src/timeq.c \
src/DBHelper.c \
src/IRCQueue.c \
+ src/commands.c \
src/bots.c \
src/bot_NeonServ.c \
src/bot_NeonSpam.c \
src/cmd_neonserv_adduser.c \
src/cmd_neonserv_ban.c \
src/cmd_neonserv_bans.c \
- src/cmd_neonserv_bind.c \
+ src/cmd_global_bind.c \
src/cmd_neonserv_chanservsync.c \
src/cmd_neonserv_clvl.c \
src/cmd_neonserv_command.c \
src/cmd_neonserv_devoiceall.c \
src/cmd_neonserv_down.c \
src/cmd_neonserv_downall.c \
- src/cmd_neonserv_emote.c \
+ src/cmd_global_emote.c \
src/cmd_neonserv_events.c \
src/cmd_neonserv_giveowner.c \
- src/cmd_neonserv_god.c \
+ src/cmd_global_god.c \
src/cmd_neonserv_help.c \
src/cmd_neonserv_invite.c \
src/cmd_neonserv_inviteme.c \
src/cmd_neonserv_mode.c \
src/cmd_neonserv_move.c \
src/cmd_neonserv_myaccess.c \
- src/cmd_neonserv_netinfo.c \
- src/cmd_neonserv_notice.c \
+ src/cmd_global_netinfo.c \
+ src/cmd_global_notice.c \
src/cmd_neonserv_op.c \
src/cmd_neonserv_opall.c \
src/cmd_neonserv_oplog.c \
src/cmd_neonserv_peek.c \
- src/cmd_neonserv_raw.c \
+ src/cmd_global_raw.c \
src/cmd_neonserv_recover.c \
- src/cmd_neonserv_register.c \
- src/cmd_neonserv_reloadlang.c \
+ src/cmd_global_register.c \
+ src/cmd_global_reloadlang.c \
src/cmd_neonserv_resync.c \
- src/cmd_neonserv_say.c \
+ src/cmd_global_say.c \
src/cmd_neonserv_search.c \
src/cmd_neonserv_set.c \
- src/cmd_neonserv_setaccess.c \
+ src/cmd_global_setaccess.c \
src/cmd_neonserv_suspend.c \
src/cmd_neonserv_topic.c \
src/cmd_neonserv_trace.c \
src/cmd_neonserv_unban.c \
src/cmd_neonserv_unbanall.c \
src/cmd_neonserv_unbanme.c \
- src/cmd_neonserv_unbind.c \
- src/cmd_neonserv_unregister.c \
+ src/cmd_global_unbind.c \
+ src/cmd_global_unregister.c \
src/cmd_neonserv_unsuspend.c \
src/cmd_neonserv_up.c \
src/cmd_neonserv_upall.c \
src/cmd_neonserv_users.c \
src/cmd_neonserv_uset.c \
- src/cmd_neonserv_version.c \
+ src/cmd_global_version.c \
src/cmd_neonserv_voice.c \
src/cmd_neonserv_voiceall.c \
src/cmd_neonserv_wipeinfo.c \
void init_DummyServ() {
- #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
- // NAME FUNCTION PARAMS PRIVS FLAGS
- USER_COMMAND("netinfo", neonserv_cmd_netinfo, 0, NULL, 0);
- USER_COMMAND("version", neonserv_cmd_version, 0, NULL, 0);
- #undef USER_COMMAND
-
- #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
- // NAME FUNCTION PARAMS ACCS FLAGS
- OPER_COMMAND("register", neonserv_cmd_register, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("unregister", neonserv_cmd_unregister,1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("bind", neonserv_cmd_bind, 2, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("unbind", neonserv_cmd_unbind, 1, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("say", neonserv_cmd_say, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("emote", neonserv_cmd_emote, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("notice", neonserv_cmd_notice, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("raw", neonserv_cmd_raw, 1, 800, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("god", neonserv_cmd_god, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- #undef OPER_COMMAND
-
start_bots();
//register events
void init_NeonServ() {
- #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
- // NAME FUNCTION PARAMS PRIVS FLAGS
- USER_COMMAND("adduser", neonserv_cmd_adduser, 2, "#channel_canadd", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("deluser", neonserv_cmd_deluser, 1, "#channel_candel", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("clvl", neonserv_cmd_clvl, 2, "#channel_canclvl", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("access", neonserv_cmd_access, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG);
- USER_COMMAND("users", neonserv_cmd_users, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
- USER_COMMAND("suspend", neonserv_cmd_suspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("unsuspend", neonserv_cmd_unsuspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("delme", neonserv_cmd_delme, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("myaccess", neonserv_cmd_myaccess, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- USER_COMMAND("up", neonserv_cmd_up, 0, "#channel_getop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("down", neonserv_cmd_down, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG);
- USER_COMMAND("upall", neonserv_cmd_upall, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("downall", neonserv_cmd_downall, 0, NULL, CMDFLAG_LOG);
- USER_COMMAND("mdeluser", neonserv_cmd_mdeluser, 2, "#channel_candel", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("trim", neonserv_cmd_trim, 2, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("giveowner", neonserv_cmd_giveowner, 1, "500", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("op", neonserv_cmd_op, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("deop", neonserv_cmd_deop, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("voice", neonserv_cmd_voice, 1, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("devoice", neonserv_cmd_devoice, 1, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("opall", neonserv_cmd_opall, 0, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("deopall", neonserv_cmd_deopall, 0, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("voiceall", neonserv_cmd_voiceall, 0, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("devoiceall", neonserv_cmd_devoiceall,0, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("set", neonserv_cmd_set, 0, "#channel_setters", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("kick", neonserv_cmd_kick, 1, "#channel_cankick", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("kickban", neonserv_cmd_kickban, 1, "#channel_cankick,#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("ban", neonserv_cmd_ban, 1, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("wipeinfo", neonserv_cmd_wipeinfo, 1, "#channel_wipeinfo", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("addban", neonserv_cmd_addban, 1, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("bans", neonserv_cmd_bans, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- USER_COMMAND("delban", neonserv_cmd_delban, 1, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("netinfo", neonserv_cmd_netinfo, 0, NULL, 0);
- USER_COMMAND("topic", neonserv_cmd_topic, 0, "#channel_changetopic", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("chanservsync", neonserv_cmd_chanservsync, 0,"500", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("resync", neonserv_cmd_resync, 0, "#channel_canresync", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("addtimeban", neonserv_cmd_addtimeban,2, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("mode", neonserv_cmd_mode, 1, "#channel_getop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("version", neonserv_cmd_version, 0, NULL, 0);
- USER_COMMAND("peek", neonserv_cmd_peek, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
- USER_COMMAND("uset", neonserv_cmd_uset, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- USER_COMMAND("unban", neonserv_cmd_unban, 1, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("unbanall", neonserv_cmd_unbanall, 0, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("unbanme", neonserv_cmd_unbanme, 0, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("invite", neonserv_cmd_invite, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("inviteme", neonserv_cmd_inviteme, 0, "#channel_getinvite", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- USER_COMMAND("help", neonserv_cmd_help, 0, NULL, 0);
- USER_COMMAND("events", neonserv_cmd_events, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- USER_COMMAND("command", neonserv_cmd_command, 1, NULL, 0);
- USER_COMMAND("info", neonserv_cmd_info, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
- USER_COMMAND("extscript", neonserv_cmd_extscript, 0, NULL, CMDFLAG_EMPTY_ARGS | CMDFLAG_CHAN_PARAM);
- #undef USER_COMMAND
-
- #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
- // NAME FUNCTION PARAMS ACCS FLAGS
- OPER_COMMAND("trace", neonserv_cmd_trace, 1, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- OPER_COMMAND("register", neonserv_cmd_register, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("unregister", neonserv_cmd_unregister,1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("recover", neonserv_cmd_recover, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("say", neonserv_cmd_say, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("emote", neonserv_cmd_emote, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("notice", neonserv_cmd_notice, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("raw", neonserv_cmd_raw, 1, 800, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("god", neonserv_cmd_god, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("reloadlang", neonserv_cmd_reloadlang,1, 500, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("csuspend", neonserv_cmd_csuspend, 1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("cunsuspend", neonserv_cmd_cunsuspend,1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("move", neonserv_cmd_move, 2, 300, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("bind", neonserv_cmd_bind, 2, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("unbind", neonserv_cmd_unbind, 1, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("oplog", neonserv_cmd_oplog, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("search", neonserv_cmd_search, 1, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- OPER_COMMAND("setaccess", neonserv_cmd_setaccess, 2, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("addrank", neonserv_cmd_addrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("delrank", neonserv_cmd_delrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("setrank", neonserv_cmd_setrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("assignrank", neonserv_cmd_assignrank,2, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("listrank", neonserv_cmd_listrank, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("rename", neonserv_cmd_rename, 2, 300, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("unvisited", neonserv_cmd_unvisited, 0, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- #undef OPER_COMMAND
-
start_bots();
//register events
void init_NeonSpam() {
- #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
- // NAME FUNCTION PARAMS PRIVS FLAGS
- USER_COMMAND("netinfo", neonserv_cmd_netinfo, 0, NULL, 0);
- USER_COMMAND("version", neonserv_cmd_version, 0, NULL, 0);
- USER_COMMAND("set", neonspam_cmd_set, 0, "#channel_setters", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
- #undef USER_COMMAND
-
- #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
- // NAME FUNCTION PARAMS ACCS FLAGS
- OPER_COMMAND("register", neonserv_cmd_register, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("unregister", neonserv_cmd_unregister,1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("bind", neonserv_cmd_bind, 2, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("unbind", neonserv_cmd_unbind, 1, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
- OPER_COMMAND("csuspend", neonserv_cmd_csuspend, 1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("cunsuspend", neonserv_cmd_cunsuspend,1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("say", neonserv_cmd_say, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("emote", neonserv_cmd_emote, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("notice", neonserv_cmd_notice, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
- OPER_COMMAND("raw", neonserv_cmd_raw, 1, 800, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- OPER_COMMAND("god", neonserv_cmd_god, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
- #undef OPER_COMMAND
-
start_bots();
//register events
--- /dev/null
+/* cmd_global.h - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _cmd_global_h
+#define _cmd_global_h
+#include "main.h"
+#include "modcmd.h"
+#include "IRCParser.h"
+#include "IRCEvents.h"
+#include "UserNode.h"
+#include "ChanNode.h"
+#include "ChanUser.h"
+#include "ModeNode.h"
+#include "BanNode.h"
+#include "ClientSocket.h"
+#include "mysqlConn.h"
+#include "lang.h"
+#include "HandleInfoHandler.h"
+#include "WHOHandler.h"
+#include "DBHelper.h"
+#include "tools.h"
+#include "timeq.h"
+#include "version.h"
+#include "EventLogger.h"
+#include "bots.h"
+
+CMD_BIND(global_cmd_bind);
+CMD_BIND(global_cmd_emote);
+CMD_BIND(global_cmd_god);
+CMD_BIND(global_cmd_netinfo);
+CMD_BIND(global_cmd_notice);
+CMD_BIND(global_cmd_raw);
+CMD_BIND(global_cmd_register);
+CMD_BIND(global_cmd_reloadlang);
+CMD_BIND(global_cmd_say);
+CMD_BIND(global_cmd_setaccess);
+CMD_BIND(global_cmd_unbind);
+CMD_BIND(global_cmd_unregister);
+CMD_BIND(global_cmd_version);
+
+#endif
\ No newline at end of file
--- /dev/null
+/* cmd_global_bind.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] command name
+* argv[1] command function
+* argv[2-*] parameters (optional)
+*/
+
+CMD_BIND(global_cmd_bind) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `function` FROM `bot_binds` WHERE `botclass` = '%d' AND `command` = '%s'", client->botid, escape_string(argv[0]));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ reply(getTextBot(), user, "NS_BIND_ALREADY", argv[0], row[0]);
+ return;
+ }
+ char *params;
+ if(argc > 2)
+ params = merge_argv(argv, 2, argc);
+ else
+ params = "";
+ struct cmd_function *function = find_cmd_function(client->botid, argv[1]);
+ if(!function) {
+ reply(getTextBot(), user, "NS_BIND_UNKNOWN", argv[1]);
+ return;
+ }
+ bind_cmd_to_function(client->botid, argv[0], function);
+ printf_mysql_query("INSERT INTO `bot_binds` (`botclass`, `command`, `function`, `parameters`) VALUES ('%d', '%s', '%s', '%s')", client->botid, escape_string(argv[0]), escape_string(function->name), params);
+ if(*params)
+ bind_set_parameters(client->botid, argv[0], params);
+ reply(getTextBot(), user, "NS_BIND_DONE", argv[0], function->name);
+ logEvent(event);
+}
--- /dev/null
+/* cmd_global_emote.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] target
+* argv[1-*] message
+*/
+
+CMD_BIND(global_cmd_emote) {
+ char *message = merge_argv(argv, 1, argc);
+ putsock(client, "PRIVMSG %s :\001ACTION %s\001", argv[0], message);
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_god.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] (optional) on/off
+*/
+
+CMD_BIND(global_cmd_god) {
+ if(argc > 0) {
+ if(!strcmp(argv[0], "0") || !stricmp(argv[0], "off") || !stricmp(argv[0], get_language_string(user, "NS_SET_OFF"))) {
+ if(isGodMode(user)) {
+ printf_mysql_query("UPDATE `users` SET `user_god` = '0' WHERE `user_user` = '%s'", escape_string(user->auth));
+ user->flags &= ~USERFLAG_GOD_MODE;
+ }
+ reply(getTextBot(), user, "NS_GOD_OFF");
+ } else if(!strcmp(argv[0], "1") || !stricmp(argv[0], "on") || !stricmp(argv[0], get_language_string(user, "NS_SET_ON"))) {
+ if(!isGodMode(user)) {
+ printf_mysql_query("UPDATE `users` SET `user_god` = '1' WHERE `user_user` = '%s'", escape_string(user->auth));
+ user->flags |= USERFLAG_GOD_MODE;
+ }
+ reply(getTextBot(), user, "NS_GOD_ON");
+ } else {
+ reply(getTextBot(), user, "NS_SET_INVALID_BOOLEAN", argv[0]);
+ return;
+ }
+ } else {
+ if(isGodMode(user)) {
+ printf_mysql_query("UPDATE `users` SET `user_god` = '0' WHERE `user_user` = '%s'", escape_string(user->auth));
+ user->flags &= ~USERFLAG_GOD_MODE;
+ reply(getTextBot(), user, "NS_GOD_OFF");
+ } else {
+ printf_mysql_query("UPDATE `users` SET `user_god` = '1' WHERE `user_user` = '%s'", escape_string(user->auth));
+ user->flags |= USERFLAG_GOD_MODE;
+ reply(getTextBot(), user, "NS_GOD_ON");
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_netinfo.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* no args
+*/
+
+CMD_BIND(global_cmd_netinfo) {
+ reply(getTextBot(), user, "NS_NETINFO_HEADER");
+ char tmp[MAXLEN];
+ struct Table *table;
+ table = table_init(2, 18, 0);
+ char *content[2];
+
+ content[0] = get_language_string(user, "NS_NETINFO_UPTIME");
+ content[1] = timeToStr(user, (time(0) - start_time), 3, tmp);
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_BOTS");
+ struct ClientSocket *cclient;
+ int bot_count = 0, connected_bot_count = 0;
+ float traffic_in = 0, traffic_out = 0;
+ for(cclient = getBots(0, NULL); cclient; cclient = getBots(0, cclient)) {
+ bot_count++;
+ if(cclient->flags & SOCKET_FLAG_READY)
+ connected_bot_count++;
+ traffic_in += cclient->traffic_in;
+ traffic_out += cclient->traffic_out;
+ }
+ sprintf(tmp, "%d (%d connected)", bot_count, connected_bot_count);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_TRAFFIC");
+ sprintf(tmp, "in: %.2f kb out: %.2f kb", traffic_in / 1024, traffic_out / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ int channel_count = getChannelCount();
+ float channel_memory = channel_count * sizeof(struct ChanNode);
+ int channel_ban_count = getChanBanCount();
+ float channel_ban_memory = channel_ban_count * sizeof(struct BanNode);
+ int user_count = getUserCount();
+ float user_memory = user_count * sizeof(struct UserNode);
+ int chanuser_count = getChanUserCount();
+ float chanuser_memory = chanuser_count * sizeof(struct ChanUser);
+ float total_memory = channel_memory + channel_ban_memory + user_memory + chanuser_memory;
+ content[0] = get_language_string(user, "NS_NETINFO_CACHE");
+ sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+ content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
+ sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", channel_count, channel_memory / 1024, channel_count, (unsigned int) sizeof(struct ChanNode), channel_memory / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+ content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
+ sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", channel_ban_count, channel_ban_memory / 1024, channel_ban_count, (unsigned int) sizeof(struct BanNode), channel_ban_memory / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+ content[0] = get_language_string(user, "NS_NETINFO_USER");
+ sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", user_count, user_memory / 1024, user_count, (unsigned int) sizeof(struct UserNode), user_memory / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+ content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
+ sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", chanuser_count, chanuser_memory / 1024, chanuser_count, (unsigned int) sizeof(struct ChanUser), chanuser_memory / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SHOW TABLE STATUS");
+ res = mysql_use();
+ int mysql_entrys[4];
+ float mysql_length[5];
+ total_memory = 0;
+ mysql_entrys[0] = 0; mysql_entrys[1] = 0; mysql_entrys[2] = 0; mysql_entrys[3] = 0;
+ mysql_length[0] = 0; mysql_length[1] = 0; mysql_length[2] = 0; mysql_length[3] = 0; mysql_length[4] = 0;
+ while ((row = mysql_fetch_row(res)) != NULL) {
+ if(!stricmp(row[0], "channels")) {
+ mysql_entrys[0] = atoi(row[4]);
+ mysql_length[0] = atof(row[6]);
+ total_memory += atof(row[6]);
+ } else if(!stricmp(row[0], "bans")) {
+ mysql_entrys[1] = atoi(row[4]);
+ mysql_length[1] = atof(row[6]);
+ total_memory += atof(row[6]);
+ } else if(!stricmp(row[0], "users")) {
+ mysql_entrys[2] = atoi(row[4]);
+ mysql_length[2] = atof(row[6]);
+ total_memory += atof(row[6]);
+ } else if(!stricmp(row[0], "chanusers")) {
+ mysql_entrys[3] = atoi(row[4]);
+ mysql_length[3] = atof(row[6]);
+ total_memory += atof(row[6]);
+ } else {
+ mysql_length[4] += atof(row[6]);
+ total_memory += atof(row[6]);
+ }
+ }
+
+ content[0] = get_language_string(user, "NS_NETINFO_DATABASE");
+ sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
+ sprintf(tmp, "%d %.2f kB", mysql_entrys[0], mysql_length[0] / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
+ sprintf(tmp, "%d %.2f kB", mysql_entrys[1], mysql_length[1] / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_USER");
+ sprintf(tmp, "%d %.2f kB", mysql_entrys[2], mysql_length[2] / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
+ sprintf(tmp, "%d %.2f kB", mysql_entrys[3], mysql_length[3] / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_OTHER");
+ sprintf(tmp, "* %.2f kB", mysql_length[4] / 1024);
+ content[1] = tmp;
+ table_add(table, content);
+
+ if(strcmp(revision, ""))
+ sprintf(tmp, "%s.%d (%s)", NEONSERV_VERSION, patchlevel, revision);
+ else
+ sprintf(tmp, "%s.%d", NEONSERV_VERSION, patchlevel);
+ content[0] = get_language_string(user, "NS_NETINFO_VERSION");
+ content[1] = tmp;
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_COMPILER");
+ content[1] = build_language_string(user, tmp, "NS_NETINFO_COMPILER_VALUE", COMPILER, creation);
+ table_add(table, content);
+
+ content[0] = get_language_string(user, "NS_NETINFO_CODE");
+ content[1] = build_language_string(user, tmp, "NS_NETINFO_CODE_VALUE", codelines);
+ table_add(table, content);
+
+ char **table_lines = table_end(table);
+ int i;
+ for(i = 0; i < table->entrys; i++) {
+ reply(getTextBot(), user, table_lines[i]);
+ }
+ table_free(table);
+}
+
--- /dev/null
+/* cmd_global_notice.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] target
+* argv[1-*] message
+*/
+
+CMD_BIND(global_cmd_notice) {
+ char *message = merge_argv(argv, 1, argc);
+ putsock(client, "NOTICE %s :%s", argv[0], message);
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_raw.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0-*] raw
+*/
+
+CMD_BIND(global_cmd_raw) {
+ char *raw = merge_argv(argv, 0, argc);
+ putsock(client, "%s", raw);
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_register.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] - channel
+* argv[0/1] - nick / *auth
+*/
+static AUTHLOOKUP_CALLBACK(global_cmd_register_auth_lookup);
+static USERAUTH_CALLBACK(global_cmd_register_nick_lookup);
+static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot);
+
+struct global_cmd_register_cache {
+ struct ClientSocket *client, *textclient;
+ struct UserNode *user;
+ struct ChanNode *chan;
+ struct Event *event;
+ char *nick;
+ char *channel;
+ int multibot;
+};
+
+CMD_BIND(global_cmd_register) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ char *channel = argv[0];
+ int multibot = 0;
+ if(!is_valid_chan(channel)) {
+ reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
+ return;
+ }
+ printf_mysql_query("SELECT `botid`, `botclass` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `bot_channels`.`chanid` = `channels`.`channel_id` WHERE `channel_name` = '%s'", escape_string(channel));
+ res = mysql_use();
+ while ((row = mysql_fetch_row(res)) != NULL) {
+ if(atoi(row[1]) == client->botid) {
+ reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick);
+ return;
+ } else
+ multibot = 1;
+ }
+ //if theres already another bot in the channel we don't need a owner parameter...
+ if(multibot && argc < 2) {
+ //skip all these owner check lines
+ multibot = 2;
+ global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot);
+ return;
+ } else if(argc < 2) {
+ reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT");
+ return;
+ }
+ //check own access
+ if(argv[1][0] == '*') {
+ //we've got an auth
+ argv[1]++;
+ printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[1]));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, row[0], multibot);
+ } else {
+ //we need to create a new user...
+ //but first lookup the auth to check if it really exists
+ struct global_cmd_register_cache *cache = malloc(sizeof(*cache));
+ if (!cache) {
+ perror("malloc() failed");
+ return;
+ }
+ cache->client = client;
+ cache->textclient = getTextBot();
+ cache->user = user;
+ cache->chan = chan;
+ cache->event = event;
+ cache->nick = strdup(argv[1]);
+ cache->channel = strdup(channel);
+ cache->multibot = multibot;
+ lookup_authname(argv[1], global_cmd_register_auth_lookup, cache);
+ }
+ } else {
+ struct UserNode *cuser = getUserByNick(argv[1]);
+ if(!cuser) {
+ cuser = createTempUser(argv[1]);
+ cuser->flags |= USERFLAG_ISTMPUSER;
+ }
+ if(cuser->flags & USERFLAG_ISAUTHED) {
+ global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot);
+ } else {
+ struct global_cmd_register_cache *cache = malloc(sizeof(*cache));
+ if (!cache) {
+ perror("malloc() failed");
+ return;
+ }
+ cache->client = client;
+ cache->textclient = getTextBot();
+ cache->user = user;
+ cache->chan = chan;
+ cache->event = event;
+ cache->nick = strdup(argv[1]);
+ cache->channel = strdup(channel);
+ cache->multibot = multibot;
+ get_userauth(cuser, global_cmd_register_nick_lookup, cache);
+ }
+ }
+}
+
+static AUTHLOOKUP_CALLBACK(global_cmd_register_auth_lookup) {
+ struct global_cmd_register_cache *cache = data;
+ if(!exists) {
+ //AUTH_DOES_NOT_EXIST
+ reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick);
+ } else
+ global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth, cache->multibot);
+ free(cache->channel);
+ free(cache->nick);
+ free(cache);
+}
+
+static USERAUTH_CALLBACK(global_cmd_register_nick_lookup) {
+ struct global_cmd_register_cache *cache = data;
+ if(!user) {
+ //USER_DOES_NOT_EXIST
+ reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick);
+ }
+ else if(!(user->flags & USERFLAG_ISAUTHED)) {
+ //USER_NOT_AUTHED
+ reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
+ }
+ else
+ global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth, cache->multibot);
+ free(cache->channel);
+ free(cache->nick);
+ free(cache);
+}
+
+static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot) {
+ //we've got a valid auth now...
+ MYSQL_RES *res;
+ MYSQL_ROW row, row2;
+ int userid = 0, adminid;
+ printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL)
+ adminid = atoi(row[0]);
+ else
+ adminid = 0;
+ if(multibot != 2) {
+ printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ userid = atoi(row[0]);
+ } else {
+ printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(auth));
+ userid = (int) mysql_insert_id(mysql_conn);
+ }
+ }
+ printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
+ res = mysql_use();
+ int botid = 0;
+ char *bottrigger;
+ while ((row = mysql_fetch_row(res)) != NULL) {
+ //check channel count
+ printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
+ row2 = mysql_fetch_row(mysql_use());
+ if(atoi(row2[0]) < atoi(row[1])) {
+ botid = atoi(row[0]);
+ bottrigger = row[2];
+ break;
+ }
+ }
+ if(!botid) {
+ reply(textclient, user, "NS_REGISTER_FULL");
+ return;
+ }
+ int chanid;
+ printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ chanid = atoi(row[0]);
+ printf_mysql_query("UPDATE `channels` SET `channel_registered` = UNIX_TIMESTAMP(), `channel_registrator` = '%d' WHERE `channel_id` = '%d'", adminid, chanid);
+ } else {
+ printf_mysql_query("INSERT INTO `channels` (`channel_name`, `channel_registered`, `channel_registrator`) VALUES ('%s', UNIX_TIMESTAMP(), '%d')", escape_string(channel), adminid);
+ chanid = (int) mysql_insert_id(mysql_conn);
+ }
+ struct ClientSocket *bot;
+ for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+ if(bot->clientid == botid)
+ break;
+ }
+ if(bot) {
+ putsock(bot, "JOIN %s", channel);
+ } else
+ reply(textclient, user, "NS_REGISTER_DISCONNECTED");
+ printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', '%s')", botid, chanid, bottrigger);
+ if(multibot != 2) {
+ if(multibot) {
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = 499 WHERE `chanuser_cid` = '%d' AND `chanuser_access` = '500'", chanid);
+ printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chanid, userid);
+ } else
+ printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d'", chanid);
+ printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chanid, userid, 500);
+ reply(textclient, user, "NS_REGISTER_DONE", channel, auth);
+ } else
+ reply(textclient, user, "NS_REGISTER_DONE_NOAUTH", channel);
+ logEvent(event);
+}
--- /dev/null
+/* cmd_global_reloadlang.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] language tag
+*/
+
+CMD_BIND(global_cmd_reloadlang) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `text`, `lang` FROM `language` WHERE `ident` = 'name' AND `lang` = '%s'", escape_string(argv[0]));
+ res = mysql_use();
+ if((row = mysql_fetch_row(res)) != NULL) {
+ load_language(row[1], row[0]);
+ reply(getTextBot(), user, "NS_RELOADLANG_DONE", row[0], row[1]);
+ } else {
+ reply(getTextBot(), user, "NS_RELOADLANG_UNKNOWN", argv[0]);
+ }
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_say.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] target
+* argv[1-*] message
+*/
+
+CMD_BIND(global_cmd_say) {
+ char *message = merge_argv(argv, 1, argc);
+ putsock(client, "PRIVMSG %s :%s", argv[0], message);
+}
\ No newline at end of file
--- /dev/null
+/* cmd_global_setaccess.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] - nick / *auth
+* argv[1] - global access
+*/
+static AUTHLOOKUP_CALLBACK(global_cmd_setaccess_auth_lookup);
+static USERAUTH_CALLBACK(global_cmd_setaccess_nick_lookup);
+static void global_cmd_setaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct Event *event, char *nick, char *auth, int access);
+
+struct global_cmd_setaccess_cache {
+ struct ClientSocket *client, *textclient;
+ struct UserNode *user;
+ struct Event *event;
+ int access;
+ char *nick;
+};
+
+CMD_BIND(global_cmd_setaccess) {
+ int caccess;
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ caccess = atoi(argv[1]);
+ if(caccess < 0 || caccess > 1000) {
+ reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
+ return;
+ }
+ printf_mysql_query("SELECT `user_access` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) == NULL || atoi(row[0]) < caccess) {
+ reply(getTextBot(), user, "NS_ACCESS_OUTRANKED");
+ return;
+ }
+ if(argv[0][0] == '*') {
+ //we've got an auth
+ argv[0]++;
+ printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[0]));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ global_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], row[0], caccess);
+ } else {
+ //we need to create a new user...
+ //but first lookup the auth to check if it really exists
+ struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache));
+ if (!cache) {
+ perror("malloc() failed");
+ return;
+ }
+ cache->client = client;
+ cache->textclient = getTextBot();
+ cache->user = user;
+ cache->event = event;
+ cache->access = caccess;
+ cache->nick = strdup(argv[0]);
+ lookup_authname(argv[0], global_cmd_setaccess_auth_lookup, cache);
+ }
+ } else {
+ struct UserNode *cuser = getUserByNick(argv[0]);
+ if(!cuser) {
+ cuser = createTempUser(argv[0]);
+ cuser->flags |= USERFLAG_ISTMPUSER;
+ }
+ if(cuser->flags & USERFLAG_ISAUTHED) {
+ global_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], cuser->auth, caccess);
+ } else {
+ struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache));
+ if (!cache) {
+ perror("malloc() failed");
+ return;
+ }
+ cache->client = client;
+ cache->textclient = getTextBot();
+ cache->user = user;
+ cache->event = event;
+ cache->access = caccess;
+ cache->nick = strdup(argv[0]);
+ get_userauth(cuser, global_cmd_setaccess_nick_lookup, cache);
+ }
+ }
+}
+
+static AUTHLOOKUP_CALLBACK(global_cmd_setaccess_auth_lookup) {
+ struct global_cmd_setaccess_cache *cache = data;
+ if(!exists) {
+ //AUTH_DOES_NOT_EXIST
+ reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick);
+ } else
+ global_cmd_setaccess_async1(cache->client, cache->textclient, cache->user, cache->event, cache->nick, auth, cache->access);
+ free(cache->nick);
+ free(cache);
+}
+
+static USERAUTH_CALLBACK(global_cmd_setaccess_nick_lookup) {
+ struct global_cmd_setaccess_cache *cache = data;
+ if(!user) {
+ //USER_DOES_NOT_EXIST
+ reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick);
+ }
+ else if(!(user->flags & USERFLAG_ISAUTHED)) {
+ //USER_NOT_AUTHED
+ reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
+ }
+ else
+ global_cmd_setaccess_async1(cache->client, cache->textclient, cache->user, cache->event, user->nick, user->auth, cache->access);
+ free(cache->nick);
+ free(cache);
+}
+
+static void global_cmd_setaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct Event *event, char *nick, char *auth, int caccess) {
+ //we've got a valid auth now...
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `user_id`, `user_access` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ if(atoi(row[1]) != caccess)
+ printf_mysql_query("UPDATE `users` SET `user_access` = '%d' WHERE `user_id` = '%s'", caccess, row[0]);
+ } else {
+ printf_mysql_query("INSERT INTO `users` (`user_user`, `user_access`) VALUES ('%s', '%d')", escape_string(auth), caccess);
+ }
+ reply(textclient, user, "NS_SETACCESS_DONE", auth, caccess);
+ logEvent(event);
+}
--- /dev/null
+/* cmd_global_unbind.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] command name
+*/
+
+CMD_BIND(global_cmd_unbind) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ struct cmd_binding *cbind = find_cmd_binding(client->botid, argv[0]);
+ printf_mysql_query("SELECT `function` FROM `bot_binds` WHERE `botclass` = '%d' AND `command` = '%s'", client->botid, escape_string(argv[0]));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) == NULL && (!cbind || !(cbind->flags & CMDFLAG_TEMPONARY_BIND))) {
+ reply(getTextBot(), user, "NS_UNBIND_NOT_FOUND", argv[0]);
+ return;
+ }
+ struct cmd_function *function = find_cmd_function(client->botid, row[0]);
+ if(function && (function->flags & CMDFLAG_REQUIRED)) {
+ printf_mysql_query("SELECT `id` FROM `bot_binds` WHERE `botclass` = '%d' AND `function` = '%s'", client->botid, escape_string(function->name));
+ res = mysql_use();
+ if (mysql_num_rows(res) <= 1) {
+ reply(getTextBot(), user, "NS_UNBIND_REQUIRED", function->name);
+ return;
+ }
+ }
+ unbind_cmd(client->botid, argv[0]);
+ if((!cbind || !(cbind->flags & CMDFLAG_TEMPONARY_BIND)))
+ printf_mysql_query("DELETE FROM `bot_binds` WHERE `id` = '%s'", row[0]);
+ reply(getTextBot(), user, "NS_UNBIND_DONE", argv[0]);
+ logEvent(event);
+}
--- /dev/null
+/* cmd_global_unregister.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* argv[0] - channel
+*/
+CMD_BIND(global_cmd_unregister) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ char *channel = argv[0];
+ if(!is_valid_chan(channel)) {
+ reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
+ return;
+ }
+ int chanid;
+ printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ chanid = atoi(row[0]);
+ } else {
+ reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
+ return;
+ }
+ printf_mysql_query("SELECT `botid`, `bot_channels`.`id`, `suspended` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chanid, client->botid);
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) == NULL) {
+ reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
+ return;
+ }
+ int botid = atoi(row[0]);
+ struct ClientSocket *bot;
+ for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+ if(bot->clientid == botid)
+ break;
+ }
+ if(bot && strcmp(row[2], "1")) {
+ putsock(bot, "PART %s :Channel unregistered.", channel);
+ }
+ printf_mysql_query("DELETE FROM `bot_channels` WHERE `id` = '%s'", row[1]);
+ reply(getTextBot(), user, "NS_UNREGISTER_DONE", channel);
+ logEvent(event);
+}
--- /dev/null
+/* cmd_global_version.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+
+/*
+* no args
+*/
+
+CMD_BIND(global_cmd_version) {
+ reply(getTextBot(), user, "\002NeonServ %s.%d\002 (%s), written by pk910", NEONSERV_VERSION, patchlevel, (strcmp(revision, "") ? revision : "-"));
+ reply(getTextBot(), user, "Build (#%s) %s (%s lines, " COMPILER ")", compilation, creation, codelines);
+ reply(getTextBot(), user, "NeonServ source can be found on: http://git.pk910.de/?p=NeonServV5.git");
+ //helpers :D
+ reply(getTextBot(), user, "special thanks to:");
+ reply(getTextBot(), user, " Zer0n, TeaTow (testing and ideas current version)");
+ reply(getTextBot(), user, " Buchman, Zer0n (translating current version)");
+ reply(getTextBot(), user, " Patschi95, DerGrinch, Darkfly, Zer0n, Buschman (testing and ideas older versions)");
+ reply(getTextBot(), user, " Buschman, Georg, richard (translating older versions)");
+ reply(getTextBot(), user, "and all the other users that reported all these nasty bugs :D");
+ reply(getTextBot(), user, "\002If you found a bug or if you have a good idea report it on http://bugtrack.pk910.de/git_view.php?p=NeonServV5.git\002");
+
+}
\ No newline at end of file
CMD_BIND(neonserv_cmd_assignrank);
CMD_BIND(neonserv_cmd_ban);
CMD_BIND(neonserv_cmd_bans);
-CMD_BIND(neonserv_cmd_bind);
CMD_BIND(neonserv_cmd_chanservsync);
CMD_BIND(neonserv_cmd_clvl);
CMD_BIND(neonserv_cmd_command);
CMD_BIND(neonserv_cmd_devoiceall);
CMD_BIND(neonserv_cmd_down);
CMD_BIND(neonserv_cmd_downall);
-CMD_BIND(neonserv_cmd_emote);
CMD_BIND(neonserv_cmd_events);
CMD_BIND(neonserv_cmd_extscript);
CMD_BIND(neonserv_cmd_giveowner);
-CMD_BIND(neonserv_cmd_god);
CMD_BIND(neonserv_cmd_help);
CMD_BIND(neonserv_cmd_info);
CMD_BIND(neonserv_cmd_invite);
CMD_BIND(neonserv_cmd_mode);
CMD_BIND(neonserv_cmd_move);
CMD_BIND(neonserv_cmd_myaccess);
-CMD_BIND(neonserv_cmd_netinfo);
-CMD_BIND(neonserv_cmd_notice);
CMD_BIND(neonserv_cmd_op);
CMD_BIND(neonserv_cmd_opall);
CMD_BIND(neonserv_cmd_oplog);
CMD_BIND(neonserv_cmd_peek);
-CMD_BIND(neonserv_cmd_raw);
CMD_BIND(neonserv_cmd_recover);
-CMD_BIND(neonserv_cmd_register);
-CMD_BIND(neonserv_cmd_reloadlang);
CMD_BIND(neonserv_cmd_rename);
CMD_BIND(neonserv_cmd_resync);
-CMD_BIND(neonserv_cmd_say);
CMD_BIND(neonserv_cmd_search);
CMD_BIND(neonserv_cmd_set);
-CMD_BIND(neonserv_cmd_setaccess);
CMD_BIND(neonserv_cmd_setrank);
CMD_BIND(neonserv_cmd_suspend);
CMD_BIND(neonserv_cmd_topic);
CMD_BIND(neonserv_cmd_unban);
CMD_BIND(neonserv_cmd_unbanall);
CMD_BIND(neonserv_cmd_unbanme);
-CMD_BIND(neonserv_cmd_unbind);
-CMD_BIND(neonserv_cmd_unregister);
CMD_BIND(neonserv_cmd_unsuspend);
CMD_BIND(neonserv_cmd_unvisited);
CMD_BIND(neonserv_cmd_up);
CMD_BIND(neonserv_cmd_upall);
CMD_BIND(neonserv_cmd_users);
CMD_BIND(neonserv_cmd_uset);
-CMD_BIND(neonserv_cmd_version);
CMD_BIND(neonserv_cmd_voice);
CMD_BIND(neonserv_cmd_voiceall);
CMD_BIND(neonserv_cmd_wipeinfo);
+++ /dev/null
-/* cmd_neonserv_bind.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] command name
-* argv[1] command function
-* argv[2-*] parameters (optional)
-*/
-
-CMD_BIND(neonserv_cmd_bind) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- printf_mysql_query("SELECT `function` FROM `bot_binds` WHERE `botclass` = '%d' AND `command` = '%s'", client->botid, escape_string(argv[0]));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- reply(getTextBot(), user, "NS_BIND_ALREADY", argv[0], row[0]);
- return;
- }
- char *params;
- if(argc > 2)
- params = merge_argv(argv, 2, argc);
- else
- params = "";
- struct cmd_function *function = find_cmd_function(client->botid, argv[1]);
- if(!function) {
- reply(getTextBot(), user, "NS_BIND_UNKNOWN", argv[1]);
- return;
- }
- bind_cmd_to_function(client->botid, argv[0], function);
- printf_mysql_query("INSERT INTO `bot_binds` (`botclass`, `command`, `function`, `parameters`) VALUES ('%d', '%s', '%s', '%s')", client->botid, escape_string(argv[0]), escape_string(function->name), params);
- if(*params)
- bind_set_parameters(client->botid, argv[0], params);
- reply(getTextBot(), user, "NS_BIND_DONE", argv[0], function->name);
- logEvent(event);
-}
+++ /dev/null
-/* cmd_neonserv_emote.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] target
-* argv[1-*] message
-*/
-
-CMD_BIND(neonserv_cmd_emote) {
- char *message = merge_argv(argv, 1, argc);
- putsock(client, "PRIVMSG %s :\001ACTION %s\001", argv[0], message);
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_god.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] (optional) on/off
-*/
-
-CMD_BIND(neonserv_cmd_god) {
- if(argc > 0) {
- if(!strcmp(argv[0], "0") || !stricmp(argv[0], "off") || !stricmp(argv[0], get_language_string(user, "NS_SET_OFF"))) {
- if(isGodMode(user)) {
- printf_mysql_query("UPDATE `users` SET `user_god` = '0' WHERE `user_user` = '%s'", escape_string(user->auth));
- user->flags &= ~USERFLAG_GOD_MODE;
- }
- reply(getTextBot(), user, "NS_GOD_OFF");
- } else if(!strcmp(argv[0], "1") || !stricmp(argv[0], "on") || !stricmp(argv[0], get_language_string(user, "NS_SET_ON"))) {
- if(!isGodMode(user)) {
- printf_mysql_query("UPDATE `users` SET `user_god` = '1' WHERE `user_user` = '%s'", escape_string(user->auth));
- user->flags |= USERFLAG_GOD_MODE;
- }
- reply(getTextBot(), user, "NS_GOD_ON");
- } else {
- reply(getTextBot(), user, "NS_SET_INVALID_BOOLEAN", argv[0]);
- return;
- }
- } else {
- if(isGodMode(user)) {
- printf_mysql_query("UPDATE `users` SET `user_god` = '0' WHERE `user_user` = '%s'", escape_string(user->auth));
- user->flags &= ~USERFLAG_GOD_MODE;
- reply(getTextBot(), user, "NS_GOD_OFF");
- } else {
- printf_mysql_query("UPDATE `users` SET `user_god` = '1' WHERE `user_user` = '%s'", escape_string(user->auth));
- user->flags |= USERFLAG_GOD_MODE;
- reply(getTextBot(), user, "NS_GOD_ON");
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_netinfo.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* no args
-*/
-
-CMD_BIND(neonserv_cmd_netinfo) {
- reply(getTextBot(), user, "NS_NETINFO_HEADER");
- char tmp[MAXLEN];
- struct Table *table;
- table = table_init(2, 18, 0);
- char *content[2];
-
- content[0] = get_language_string(user, "NS_NETINFO_UPTIME");
- content[1] = timeToStr(user, (time(0) - start_time), 3, tmp);
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_BOTS");
- struct ClientSocket *cclient;
- int bot_count = 0, connected_bot_count = 0;
- float traffic_in = 0, traffic_out = 0;
- for(cclient = getBots(0, NULL); cclient; cclient = getBots(0, cclient)) {
- bot_count++;
- if(cclient->flags & SOCKET_FLAG_READY)
- connected_bot_count++;
- traffic_in += cclient->traffic_in;
- traffic_out += cclient->traffic_out;
- }
- sprintf(tmp, "%d (%d connected)", bot_count, connected_bot_count);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_TRAFFIC");
- sprintf(tmp, "in: %.2f kb out: %.2f kb", traffic_in / 1024, traffic_out / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- int channel_count = getChannelCount();
- float channel_memory = channel_count * sizeof(struct ChanNode);
- int channel_ban_count = getChanBanCount();
- float channel_ban_memory = channel_ban_count * sizeof(struct BanNode);
- int user_count = getUserCount();
- float user_memory = user_count * sizeof(struct UserNode);
- int chanuser_count = getChanUserCount();
- float chanuser_memory = chanuser_count * sizeof(struct ChanUser);
- float total_memory = channel_memory + channel_ban_memory + user_memory + chanuser_memory;
- content[0] = get_language_string(user, "NS_NETINFO_CACHE");
- sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
- content[1] = tmp;
- table_add(table, content);
- content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
- sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", channel_count, channel_memory / 1024, channel_count, (unsigned int) sizeof(struct ChanNode), channel_memory / 1024);
- content[1] = tmp;
- table_add(table, content);
- content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
- sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", channel_ban_count, channel_ban_memory / 1024, channel_ban_count, (unsigned int) sizeof(struct BanNode), channel_ban_memory / 1024);
- content[1] = tmp;
- table_add(table, content);
- content[0] = get_language_string(user, "NS_NETINFO_USER");
- sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", user_count, user_memory / 1024, user_count, (unsigned int) sizeof(struct UserNode), user_memory / 1024);
- content[1] = tmp;
- table_add(table, content);
- content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
- sprintf(tmp, "%d %.2f kB (%d * %u B = %.2f kB)", chanuser_count, chanuser_memory / 1024, chanuser_count, (unsigned int) sizeof(struct ChanUser), chanuser_memory / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- MYSQL_RES *res;
- MYSQL_ROW row;
- printf_mysql_query("SHOW TABLE STATUS");
- res = mysql_use();
- int mysql_entrys[4];
- float mysql_length[5];
- total_memory = 0;
- mysql_entrys[0] = 0; mysql_entrys[1] = 0; mysql_entrys[2] = 0; mysql_entrys[3] = 0;
- mysql_length[0] = 0; mysql_length[1] = 0; mysql_length[2] = 0; mysql_length[3] = 0; mysql_length[4] = 0;
- while ((row = mysql_fetch_row(res)) != NULL) {
- if(!stricmp(row[0], "channels")) {
- mysql_entrys[0] = atoi(row[4]);
- mysql_length[0] = atof(row[6]);
- total_memory += atof(row[6]);
- } else if(!stricmp(row[0], "bans")) {
- mysql_entrys[1] = atoi(row[4]);
- mysql_length[1] = atof(row[6]);
- total_memory += atof(row[6]);
- } else if(!stricmp(row[0], "users")) {
- mysql_entrys[2] = atoi(row[4]);
- mysql_length[2] = atof(row[6]);
- total_memory += atof(row[6]);
- } else if(!stricmp(row[0], "chanusers")) {
- mysql_entrys[3] = atoi(row[4]);
- mysql_length[3] = atof(row[6]);
- total_memory += atof(row[6]);
- } else {
- mysql_length[4] += atof(row[6]);
- total_memory += atof(row[6]);
- }
- }
-
- content[0] = get_language_string(user, "NS_NETINFO_DATABASE");
- sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
- sprintf(tmp, "%d %.2f kB", mysql_entrys[0], mysql_length[0] / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
- sprintf(tmp, "%d %.2f kB", mysql_entrys[1], mysql_length[1] / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_USER");
- sprintf(tmp, "%d %.2f kB", mysql_entrys[2], mysql_length[2] / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
- sprintf(tmp, "%d %.2f kB", mysql_entrys[3], mysql_length[3] / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_OTHER");
- sprintf(tmp, "* %.2f kB", mysql_length[4] / 1024);
- content[1] = tmp;
- table_add(table, content);
-
- if(strcmp(revision, ""))
- sprintf(tmp, "%s.%d (%s)", NEONSERV_VERSION, patchlevel, revision);
- else
- sprintf(tmp, "%s.%d", NEONSERV_VERSION, patchlevel);
- content[0] = get_language_string(user, "NS_NETINFO_VERSION");
- content[1] = tmp;
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_COMPILER");
- content[1] = build_language_string(user, tmp, "NS_NETINFO_COMPILER_VALUE", COMPILER, creation);
- table_add(table, content);
-
- content[0] = get_language_string(user, "NS_NETINFO_CODE");
- content[1] = build_language_string(user, tmp, "NS_NETINFO_CODE_VALUE", codelines);
- table_add(table, content);
-
- char **table_lines = table_end(table);
- int i;
- for(i = 0; i < table->entrys; i++) {
- reply(getTextBot(), user, table_lines[i]);
- }
- table_free(table);
-}
-
+++ /dev/null
-/* cmd_neonserv_notice.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] target
-* argv[1-*] message
-*/
-
-CMD_BIND(neonserv_cmd_notice) {
- char *message = merge_argv(argv, 1, argc);
- putsock(client, "NOTICE %s :%s", argv[0], message);
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_raw.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0-*] raw
-*/
-
-CMD_BIND(neonserv_cmd_raw) {
- char *raw = merge_argv(argv, 0, argc);
- putsock(client, "%s", raw);
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_register.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] - channel
-* argv[0/1] - nick / *auth
-*/
-static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup);
-static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup);
-static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot);
-
-struct neonserv_cmd_register_cache {
- struct ClientSocket *client, *textclient;
- struct UserNode *user;
- struct ChanNode *chan;
- struct Event *event;
- char *nick;
- char *channel;
- int multibot;
-};
-
-CMD_BIND(neonserv_cmd_register) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *channel = argv[0];
- int multibot = 0;
- if(!is_valid_chan(channel)) {
- reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
- return;
- }
- printf_mysql_query("SELECT `botid`, `botclass` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `bot_channels`.`chanid` = `channels`.`channel_id` WHERE `channel_name` = '%s'", escape_string(channel));
- res = mysql_use();
- while ((row = mysql_fetch_row(res)) != NULL) {
- if(atoi(row[1]) == client->botid) {
- reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick);
- return;
- } else
- multibot = 1;
- }
- //if theres already another bot in the channel we don't need a owner parameter...
- if(multibot && argc < 2) {
- //skip all these owner check lines
- multibot = 2;
- neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot);
- return;
- } else if(argc < 2) {
- reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT");
- return;
- }
- //check own access
- if(argv[1][0] == '*') {
- //we've got an auth
- argv[1]++;
- printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[1]));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, row[0], multibot);
- } else {
- //we need to create a new user...
- //but first lookup the auth to check if it really exists
- struct neonserv_cmd_register_cache *cache = malloc(sizeof(*cache));
- if (!cache) {
- perror("malloc() failed");
- return;
- }
- cache->client = client;
- cache->textclient = getTextBot();
- cache->user = user;
- cache->chan = chan;
- cache->event = event;
- cache->nick = strdup(argv[1]);
- cache->channel = strdup(channel);
- cache->multibot = multibot;
- lookup_authname(argv[1], neonserv_cmd_register_auth_lookup, cache);
- }
- } else {
- struct UserNode *cuser = getUserByNick(argv[1]);
- if(!cuser) {
- cuser = createTempUser(argv[1]);
- cuser->flags |= USERFLAG_ISTMPUSER;
- }
- if(cuser->flags & USERFLAG_ISAUTHED) {
- neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot);
- } else {
- struct neonserv_cmd_register_cache *cache = malloc(sizeof(*cache));
- if (!cache) {
- perror("malloc() failed");
- return;
- }
- cache->client = client;
- cache->textclient = getTextBot();
- cache->user = user;
- cache->chan = chan;
- cache->event = event;
- cache->nick = strdup(argv[1]);
- cache->channel = strdup(channel);
- cache->multibot = multibot;
- get_userauth(cuser, neonserv_cmd_register_nick_lookup, cache);
- }
- }
-}
-
-static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup) {
- struct neonserv_cmd_register_cache *cache = data;
- if(!exists) {
- //AUTH_DOES_NOT_EXIST
- reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick);
- } else
- neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth, cache->multibot);
- free(cache->channel);
- free(cache->nick);
- free(cache);
-}
-
-static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup) {
- struct neonserv_cmd_register_cache *cache = data;
- if(!user) {
- //USER_DOES_NOT_EXIST
- reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick);
- }
- else if(!(user->flags & USERFLAG_ISAUTHED)) {
- //USER_NOT_AUTHED
- reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
- }
- else
- neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth, cache->multibot);
- free(cache->channel);
- free(cache->nick);
- free(cache);
-}
-
-static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot) {
- //we've got a valid auth now...
- MYSQL_RES *res;
- MYSQL_ROW row, row2;
- int userid = 0, adminid;
- printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL)
- adminid = atoi(row[0]);
- else
- adminid = 0;
- if(multibot != 2) {
- printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- userid = atoi(row[0]);
- } else {
- printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(auth));
- userid = (int) mysql_insert_id(mysql_conn);
- }
- }
- printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
- res = mysql_use();
- int botid = 0;
- char *bottrigger;
- while ((row = mysql_fetch_row(res)) != NULL) {
- //check channel count
- printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
- row2 = mysql_fetch_row(mysql_use());
- if(atoi(row2[0]) < atoi(row[1])) {
- botid = atoi(row[0]);
- bottrigger = row[2];
- break;
- }
- }
- if(!botid) {
- reply(textclient, user, "NS_REGISTER_FULL");
- return;
- }
- int chanid;
- printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- chanid = atoi(row[0]);
- printf_mysql_query("UPDATE `channels` SET `channel_registered` = UNIX_TIMESTAMP(), `channel_registrator` = '%d' WHERE `channel_id` = '%d'", adminid, chanid);
- } else {
- printf_mysql_query("INSERT INTO `channels` (`channel_name`, `channel_registered`, `channel_registrator`) VALUES ('%s', UNIX_TIMESTAMP(), '%d')", escape_string(channel), adminid);
- chanid = (int) mysql_insert_id(mysql_conn);
- }
- struct ClientSocket *bot;
- for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
- if(bot->clientid == botid)
- break;
- }
- if(bot) {
- putsock(bot, "JOIN %s", channel);
- } else
- reply(textclient, user, "NS_REGISTER_DISCONNECTED");
- printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', '%s')", botid, chanid, bottrigger);
- if(multibot != 2) {
- if(multibot) {
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = 499 WHERE `chanuser_cid` = '%d' AND `chanuser_access` = '500'", chanid);
- printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chanid, userid);
- } else
- printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d'", chanid);
- printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chanid, userid, 500);
- reply(textclient, user, "NS_REGISTER_DONE", channel, auth);
- } else
- reply(textclient, user, "NS_REGISTER_DONE_NOAUTH", channel);
- logEvent(event);
-}
+++ /dev/null
-/* cmd_neonserv_reloadlang.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] language tag
-*/
-
-CMD_BIND(neonserv_cmd_reloadlang) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- printf_mysql_query("SELECT `text`, `lang` FROM `language` WHERE `ident` = 'name' AND `lang` = '%s'", escape_string(argv[0]));
- res = mysql_use();
- if((row = mysql_fetch_row(res)) != NULL) {
- load_language(row[1], row[0]);
- reply(getTextBot(), user, "NS_RELOADLANG_DONE", row[0], row[1]);
- } else {
- reply(getTextBot(), user, "NS_RELOADLANG_UNKNOWN", argv[0]);
- }
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_say.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] target
-* argv[1-*] message
-*/
-
-CMD_BIND(neonserv_cmd_say) {
- char *message = merge_argv(argv, 1, argc);
- putsock(client, "PRIVMSG %s :%s", argv[0], message);
-}
\ No newline at end of file
+++ /dev/null
-/* cmd_neonserv_setaccess.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] - nick / *auth
-* argv[1] - global access
-*/
-static AUTHLOOKUP_CALLBACK(neonserv_cmd_setaccess_auth_lookup);
-static USERAUTH_CALLBACK(neonserv_cmd_setaccess_nick_lookup);
-static void neonserv_cmd_setaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct Event *event, char *nick, char *auth, int access);
-
-struct neonserv_cmd_setaccess_cache {
- struct ClientSocket *client, *textclient;
- struct UserNode *user;
- struct Event *event;
- int access;
- char *nick;
-};
-
-CMD_BIND(neonserv_cmd_setaccess) {
- int caccess;
- MYSQL_RES *res;
- MYSQL_ROW row;
- caccess = atoi(argv[1]);
- if(caccess < 0 || caccess > 1000) {
- reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
- return;
- }
- printf_mysql_query("SELECT `user_access` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) == NULL || atoi(row[0]) < caccess) {
- reply(getTextBot(), user, "NS_ACCESS_OUTRANKED");
- return;
- }
- if(argv[0][0] == '*') {
- //we've got an auth
- argv[0]++;
- printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[0]));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- neonserv_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], row[0], caccess);
- } else {
- //we need to create a new user...
- //but first lookup the auth to check if it really exists
- struct neonserv_cmd_setaccess_cache *cache = malloc(sizeof(*cache));
- if (!cache) {
- perror("malloc() failed");
- return;
- }
- cache->client = client;
- cache->textclient = getTextBot();
- cache->user = user;
- cache->event = event;
- cache->access = caccess;
- cache->nick = strdup(argv[0]);
- lookup_authname(argv[0], neonserv_cmd_setaccess_auth_lookup, cache);
- }
- } else {
- struct UserNode *cuser = getUserByNick(argv[0]);
- if(!cuser) {
- cuser = createTempUser(argv[0]);
- cuser->flags |= USERFLAG_ISTMPUSER;
- }
- if(cuser->flags & USERFLAG_ISAUTHED) {
- neonserv_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], cuser->auth, caccess);
- } else {
- struct neonserv_cmd_setaccess_cache *cache = malloc(sizeof(*cache));
- if (!cache) {
- perror("malloc() failed");
- return;
- }
- cache->client = client;
- cache->textclient = getTextBot();
- cache->user = user;
- cache->event = event;
- cache->access = caccess;
- cache->nick = strdup(argv[0]);
- get_userauth(cuser, neonserv_cmd_setaccess_nick_lookup, cache);
- }
- }
-}
-
-static AUTHLOOKUP_CALLBACK(neonserv_cmd_setaccess_auth_lookup) {
- struct neonserv_cmd_setaccess_cache *cache = data;
- if(!exists) {
- //AUTH_DOES_NOT_EXIST
- reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick);
- } else
- neonserv_cmd_setaccess_async1(cache->client, cache->textclient, cache->user, cache->event, cache->nick, auth, cache->access);
- free(cache->nick);
- free(cache);
-}
-
-static USERAUTH_CALLBACK(neonserv_cmd_setaccess_nick_lookup) {
- struct neonserv_cmd_setaccess_cache *cache = data;
- if(!user) {
- //USER_DOES_NOT_EXIST
- reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick);
- }
- else if(!(user->flags & USERFLAG_ISAUTHED)) {
- //USER_NOT_AUTHED
- reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
- }
- else
- neonserv_cmd_setaccess_async1(cache->client, cache->textclient, cache->user, cache->event, user->nick, user->auth, cache->access);
- free(cache->nick);
- free(cache);
-}
-
-static void neonserv_cmd_setaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct Event *event, char *nick, char *auth, int caccess) {
- //we've got a valid auth now...
- MYSQL_RES *res;
- MYSQL_ROW row;
- printf_mysql_query("SELECT `user_id`, `user_access` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- if(atoi(row[1]) != caccess)
- printf_mysql_query("UPDATE `users` SET `user_access` = '%d' WHERE `user_id` = '%s'", caccess, row[0]);
- } else {
- printf_mysql_query("INSERT INTO `users` (`user_user`, `user_access`) VALUES ('%s', '%d')", escape_string(auth), caccess);
- }
- reply(textclient, user, "NS_SETACCESS_DONE", auth, caccess);
- logEvent(event);
-}
+++ /dev/null
-/* cmd_neonserv_unbind.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] command name
-*/
-
-CMD_BIND(neonserv_cmd_unbind) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- struct cmd_binding *cbind = find_cmd_binding(client->botid, argv[0]);
- printf_mysql_query("SELECT `function` FROM `bot_binds` WHERE `botclass` = '%d' AND `command` = '%s'", client->botid, escape_string(argv[0]));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) == NULL && (!cbind || !(cbind->flags & CMDFLAG_TEMPONARY_BIND))) {
- reply(getTextBot(), user, "NS_UNBIND_NOT_FOUND", argv[0]);
- return;
- }
- struct cmd_function *function = find_cmd_function(client->botid, row[0]);
- if(function && (function->flags & CMDFLAG_REQUIRED)) {
- printf_mysql_query("SELECT `id` FROM `bot_binds` WHERE `botclass` = '%d' AND `function` = '%s'", client->botid, escape_string(function->name));
- res = mysql_use();
- if (mysql_num_rows(res) <= 1) {
- reply(getTextBot(), user, "NS_UNBIND_REQUIRED", function->name);
- return;
- }
- }
- unbind_cmd(client->botid, argv[0]);
- if((!cbind || !(cbind->flags & CMDFLAG_TEMPONARY_BIND)))
- printf_mysql_query("DELETE FROM `bot_binds` WHERE `id` = '%s'", row[0]);
- reply(getTextBot(), user, "NS_UNBIND_DONE", argv[0]);
- logEvent(event);
-}
+++ /dev/null
-/* cmd_neonserv_unregister.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* argv[0] - channel
-*/
-CMD_BIND(neonserv_cmd_unregister) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *channel = argv[0];
- if(!is_valid_chan(channel)) {
- reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
- return;
- }
- int chanid;
- printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- chanid = atoi(row[0]);
- } else {
- reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
- return;
- }
- printf_mysql_query("SELECT `botid`, `bot_channels`.`id`, `suspended` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chanid, client->botid);
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) == NULL) {
- reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
- return;
- }
- int botid = atoi(row[0]);
- struct ClientSocket *bot;
- for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
- if(bot->clientid == botid)
- break;
- }
- if(bot && strcmp(row[2], "1")) {
- putsock(bot, "PART %s :Channel unregistered.", channel);
- }
- printf_mysql_query("DELETE FROM `bot_channels` WHERE `id` = '%s'", row[1]);
- reply(getTextBot(), user, "NS_UNREGISTER_DONE", channel);
- logEvent(event);
-}
+++ /dev/null
-/* cmd_neonserv_version.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "cmd_neonserv.h"
-
-/*
-* no args
-*/
-
-CMD_BIND(neonserv_cmd_version) {
- reply(getTextBot(), user, "\002NeonServ %s.%d\002 (%s), written by pk910", NEONSERV_VERSION, patchlevel, (strcmp(revision, "") ? revision : "-"));
- reply(getTextBot(), user, "Build (#%s) %s (%s lines, " COMPILER ")", compilation, creation, codelines);
- reply(getTextBot(), user, "NeonServ source can be found on: http://git.pk910.de/?p=NeonServV5.git");
- //helpers :D
- reply(getTextBot(), user, "special thanks to:");
- reply(getTextBot(), user, " Zer0n, TeaTow (testing and ideas current version)");
- reply(getTextBot(), user, " Buchman, Zer0n (translating current version)");
- reply(getTextBot(), user, " Patschi95, DerGrinch, Darkfly, Zer0n, Buschman (testing and ideas older versions)");
- reply(getTextBot(), user, " Buschman, Georg, richard (translating older versions)");
- reply(getTextBot(), user, "and all the other users that reported all these nasty bugs :D");
- reply(getTextBot(), user, "\002If you found a bug or if you have a good idea report it on http://bugtrack.pk910.de/git_view.php?p=NeonServV5.git\002");
-
-}
\ No newline at end of file
--- /dev/null
+/* commands.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "cmd_global.h"
+#include "cmd_neonserv.h"
+#include "cmd_neonspam.h"
+#include "modcmd.h"
+
+void register_commands() {
+
+ //Global Commands
+ #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(0, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
+ // NAME FUNCTION PARAMS PRIVS FLAGS
+ USER_COMMAND("version", global_cmd_version, 0, NULL, 0);
+ USER_COMMAND("netinfo", global_cmd_netinfo, 0, NULL, 0);
+ #undef USER_COMMAND
+
+ #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(0, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
+ // NAME FUNCTION PARAMS ACCS FLAGS
+ OPER_COMMAND("register", global_cmd_register, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("unregister", global_cmd_unregister,1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("say", global_cmd_say, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("emote", global_cmd_emote, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("notice", global_cmd_notice, 2, 600, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("raw", global_cmd_raw, 1, 800, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("god", global_cmd_god, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("reloadlang", global_cmd_reloadlang,1, 500, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("bind", global_cmd_bind, 2, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
+ OPER_COMMAND("unbind", global_cmd_unbind, 1, 900, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG | CMDFLAG_REQUIRED);
+ OPER_COMMAND("setaccess", global_cmd_setaccess, 2, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ #undef OPER_COMMAND
+
+ //NeonServ Commands
+ register_bot_alias(1, "NeonServ");
+
+ #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(1, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
+ // NAME FUNCTION PARAMS PRIVS FLAGS
+ USER_COMMAND("adduser", neonserv_cmd_adduser, 2, "#channel_canadd", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("deluser", neonserv_cmd_deluser, 1, "#channel_candel", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("clvl", neonserv_cmd_clvl, 2, "#channel_canclvl", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("access", neonserv_cmd_access, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG);
+ USER_COMMAND("users", neonserv_cmd_users, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
+ USER_COMMAND("suspend", neonserv_cmd_suspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("unsuspend", neonserv_cmd_unsuspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("delme", neonserv_cmd_delme, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("myaccess", neonserv_cmd_myaccess, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ USER_COMMAND("up", neonserv_cmd_up, 0, "#channel_getop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("down", neonserv_cmd_down, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG);
+ USER_COMMAND("upall", neonserv_cmd_upall, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("downall", neonserv_cmd_downall, 0, NULL, CMDFLAG_LOG);
+ USER_COMMAND("mdeluser", neonserv_cmd_mdeluser, 2, "#channel_candel", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("trim", neonserv_cmd_trim, 2, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("giveowner", neonserv_cmd_giveowner, 1, "500", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("op", neonserv_cmd_op, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("deop", neonserv_cmd_deop, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("voice", neonserv_cmd_voice, 1, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("devoice", neonserv_cmd_devoice, 1, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("opall", neonserv_cmd_opall, 0, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("deopall", neonserv_cmd_deopall, 0, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("voiceall", neonserv_cmd_voiceall, 0, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("devoiceall", neonserv_cmd_devoiceall,0, "#channel_canvoice", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("set", neonserv_cmd_set, 0, "#channel_setters", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("kick", neonserv_cmd_kick, 1, "#channel_cankick", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("kickban", neonserv_cmd_kickban, 1, "#channel_cankick,#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("ban", neonserv_cmd_ban, 1, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("wipeinfo", neonserv_cmd_wipeinfo, 1, "#channel_wipeinfo", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("addban", neonserv_cmd_addban, 1, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("bans", neonserv_cmd_bans, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ USER_COMMAND("delban", neonserv_cmd_delban, 1, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("topic", neonserv_cmd_topic, 0, "#channel_changetopic", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("chanservsync", neonserv_cmd_chanservsync, 0,"500", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("resync", neonserv_cmd_resync, 0, "#channel_canresync", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("addtimeban", neonserv_cmd_addtimeban,2, "#channel_staticban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("mode", neonserv_cmd_mode, 1, "#channel_getop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("peek", neonserv_cmd_peek, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
+ USER_COMMAND("uset", neonserv_cmd_uset, 0, NULL, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ USER_COMMAND("unban", neonserv_cmd_unban, 1, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("unbanall", neonserv_cmd_unbanall, 0, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("unbanme", neonserv_cmd_unbanme, 0, "#channel_canban", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("invite", neonserv_cmd_invite, 1, "#channel_canop", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("inviteme", neonserv_cmd_inviteme, 0, "#channel_getinvite", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ USER_COMMAND("help", neonserv_cmd_help, 0, NULL, 0);
+ USER_COMMAND("events", neonserv_cmd_events, 0, "1", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ USER_COMMAND("command", neonserv_cmd_command, 1, NULL, 0);
+ USER_COMMAND("info", neonserv_cmd_info, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
+ USER_COMMAND("extscript", neonserv_cmd_extscript, 0, NULL, CMDFLAG_EMPTY_ARGS | CMDFLAG_CHAN_PARAM);
+ #undef USER_COMMAND
+
+ #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(1, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
+ // NAME FUNCTION PARAMS ACCS FLAGS
+ OPER_COMMAND("trace", neonserv_cmd_trace, 1, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ OPER_COMMAND("recover", neonserv_cmd_recover, 1, 200, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("csuspend", neonserv_cmd_csuspend, 1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("cunsuspend", neonserv_cmd_cunsuspend,1, 100, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("move", neonserv_cmd_move, 2, 300, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
+ OPER_COMMAND("oplog", neonserv_cmd_oplog, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("search", neonserv_cmd_search, 1, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ OPER_COMMAND("addrank", neonserv_cmd_addrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("delrank", neonserv_cmd_delrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("setrank", neonserv_cmd_setrank, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("assignrank", neonserv_cmd_assignrank,2, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("listrank", neonserv_cmd_listrank, 0, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("rename", neonserv_cmd_rename, 2, 300, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("unvisited", neonserv_cmd_unvisited, 0, 400, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ #undef OPER_COMMAND
+
+ //NeonSpam Commands
+ register_bot_alias(2, "NeonSpam");
+
+ #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(2, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
+ // NAME FUNCTION PARAMS PRIVS FLAGS
+ USER_COMMAND("set", neonspam_cmd_set, 0, "#channel_setters", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
+ #undef USER_COMMAND
+
+
+}
\ No newline at end of file
--- /dev/null
+/* commands.h - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _commands_h
+#define _commands_h
+#include "main.h"
+
+void register_commands();
+
+#endif
\ No newline at end of file
#include "ModeNode.h"
#include "IRCQueue.h"
#include "DBHelper.h"
+#include "commands.h"
#include "lib/ini.h"
time_t start_time;
init_modcmd();
init_handleinfohandler();
init_tools();
+ register_commands();
init_bots();
init_DBHelper();
struct trigger_callback *next;
};
+struct cmd_bot_alias {
+ int botid;
+ char *alias;
+
+ struct cmd_bot_alias *next;
+};
+
struct command_check_user_cache {
struct ClientSocket *client, *textclient;
struct UserNode *user;
static struct cmd_binding **cmd_binds;
static struct cmd_function *cmd_functions = NULL;
static struct trigger_callback *trigger_callbacks = NULL;
+static struct cmd_bot_alias *bot_aliases = NULL;
static struct ClientSocket *tmp_text_client;
static const struct default_language_entry msgtab[] = {
int register_command(int botid, char *name, cmd_bind_t *func, int paramcount, char *channel_access, int global_access, unsigned int flags) {
struct cmd_function *cmdfunc;
for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
- if(cmdfunc->botid == botid && strcmp(cmdfunc->name, name) == 0)
+ if((cmdfunc->botid == botid || cmdfunc->botid == 0) && strcmp(cmdfunc->name, name) == 0)
return 0;
}
cmdfunc = malloc(sizeof(*cmdfunc));
int bind_cmd_to_command(int botid, char *cmd, char *func) {
struct cmd_function *cmdfunc;
+ int fbotid = botid;
+ char *c;
+ if((c = strstr(func, "."))) {
+ *c = '\0';
+ struct cmd_bot_alias *botalias;
+ for(botalias = bot_aliases; botalias; botalias = botalias->next) {
+ if(!stricmp(botalias->alias, func)) {
+ fbotid = botalias->botid;
+ break;
+ }
+ }
+ *c = '.';
+ func = c+1;
+ }
for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
- if(cmdfunc->botid == botid && strcmp(cmdfunc->name, func) == 0)
+ if((cmdfunc->botid == fbotid || cmdfunc->botid == 0) && strcmp(cmdfunc->name, func) == 0)
break;
}
if(!cmdfunc) return 0;
struct cmd_function *find_cmd_function(int botid, char *name) {
struct cmd_function *cmdfunc;
+ char *c;
+ if((c = strstr(name, "."))) {
+ *c = '\0';
+ struct cmd_bot_alias *botalias;
+ for(botalias = bot_aliases; botalias; botalias = botalias->next) {
+ if(!stricmp(botalias->alias, name)) {
+ botid = botalias->botid;
+ break;
+ }
+ }
+ *c = '.';
+ name = c+1;
+ }
for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
- if(cmdfunc->botid == botid && stricmp(cmdfunc->name, name) == 0)
+ if((cmdfunc->botid == botid || cmdfunc->botid == 0) && stricmp(cmdfunc->name, name) == 0)
break;
}
return cmdfunc;
next_cb = cb->next;
free(next_cb);
}
+ struct cmd_bot_alias *botalias, *next_botalias;
+ for(botalias = bot_aliases; botalias; botalias = next_botalias) {
+ next_botalias = botalias->next;
+ free(botalias->alias);
+ free(botalias);
+ }
cmd_functions = NULL;
trigger_callbacks = NULL;
+ bot_aliases = NULL;
}
void bind_set_parameters(int botid, char *cmd, char *parameters) {
int i, found;
struct cmd_binding *cbind;
for(cmdfunc = cmd_functions; cmdfunc; cmdfunc = cmdfunc->next) {
- if(cmdfunc->botid == botid && (cmdfunc->flags & CMDFLAG_REQUIRED)) {
+ if((cmdfunc->flags & CMDFLAG_REQUIRED)) {
found = 0;
for(i = 0; i < 27; i++) {
for(cbind = cmd_binds[i]; cbind; cbind = cbind->next) {
}
}
+void register_bot_alias(int botid, char *alias) {
+ struct cmd_bot_alias *botalias;
+ for(botalias = bot_aliases; botalias; botalias = botalias->next) {
+ if(!stricmp(botalias->alias, alias))
+ return;
+ }
+ botalias = malloc(sizeof(*botalias));
+ if (!botalias) {
+ perror("malloc() failed");
+ return;
+ }
+ botalias->botid = botid;
+ botalias->alias = strdup(alias);
+ botalias->next = bot_aliases;
+ bot_aliases = botalias;
+}
+
struct cmd_binding *find_cmd_binding(int botid, char *cmd);
void bind_unbound_required_functions(int botid);
+void register_bot_alias(int botid, char *alias);
+
#endif
\ No newline at end of file