From ffc462dec2b405f14d7b13d37e17b95ea6fdf2f5 Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 31 Oct 2011 17:18:05 +0100 Subject: [PATCH] simplified modcmd system --- Makefile.am | 27 ++-- src/bot_DummyServ.c | 19 --- src/bot_NeonServ.c | 84 ----------- src/bot_NeonSpam.c | 22 --- src/cmd_global.h | 54 ++++++++ ...{cmd_neonserv_bind.c => cmd_global_bind.c} | 6 +- ...md_neonserv_emote.c => cmd_global_emote.c} | 6 +- src/{cmd_neonserv_god.c => cmd_global_god.c} | 6 +- ...eonserv_netinfo.c => cmd_global_netinfo.c} | 6 +- ..._neonserv_notice.c => cmd_global_notice.c} | 6 +- src/{cmd_neonserv_raw.c => cmd_global_raw.c} | 6 +- ...nserv_register.c => cmd_global_register.c} | 42 +++--- ...v_reloadlang.c => cmd_global_reloadlang.c} | 6 +- src/{cmd_neonserv_say.c => cmd_global_say.c} | 6 +- ...erv_setaccess.c => cmd_global_setaccess.c} | 40 +++--- ..._neonserv_unbind.c => cmd_global_unbind.c} | 6 +- ...v_unregister.c => cmd_global_unregister.c} | 6 +- ...eonserv_version.c => cmd_global_version.c} | 6 +- src/cmd_neonserv.h | 13 -- src/commands.c | 130 ++++++++++++++++++ src/commands.h | 23 ++++ src/main.c | 2 + src/modcmd.c | 67 ++++++++- src/modcmd.h | 2 + 24 files changed, 362 insertions(+), 229 deletions(-) create mode 100644 src/cmd_global.h rename src/{cmd_neonserv_bind.c => cmd_global_bind.c} (95%) rename src/{cmd_neonserv_emote.c => cmd_global_emote.c} (89%) rename src/{cmd_neonserv_god.c => cmd_global_god.c} (95%) rename src/{cmd_neonserv_netinfo.c => cmd_global_netinfo.c} (98%) rename src/{cmd_neonserv_notice.c => cmd_global_notice.c} (89%) rename src/{cmd_neonserv_raw.c => cmd_global_raw.c} (89%) rename src/{cmd_neonserv_register.c => cmd_global_register.c} (79%) rename src/{cmd_neonserv_reloadlang.c => cmd_global_reloadlang.c} (91%) rename src/{cmd_neonserv_say.c => cmd_global_say.c} (90%) rename src/{cmd_neonserv_setaccess.c => cmd_global_setaccess.c} (70%) rename src/{cmd_neonserv_unbind.c => cmd_global_unbind.c} (95%) rename src/{cmd_neonserv_unregister.c => cmd_global_unregister.c} (95%) rename src/{cmd_neonserv_version.c => cmd_global_version.c} (94%) create mode 100644 src/commands.c create mode 100644 src/commands.h diff --git a/Makefile.am b/Makefile.am index 8c32f66..215c28b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -29,6 +29,7 @@ neonserv_SOURCES = src/version.c \ src/timeq.c \ src/DBHelper.c \ src/IRCQueue.c \ + src/commands.c \ src/bots.c \ src/bot_NeonServ.c \ src/bot_NeonSpam.c \ @@ -39,7 +40,7 @@ neonserv_SOURCES = src/version.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 \ @@ -54,10 +55,10 @@ neonserv_SOURCES = src/version.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 \ @@ -67,21 +68,21 @@ neonserv_SOURCES = src/version.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 \ @@ -89,14 +90,14 @@ neonserv_SOURCES = src/version.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 \ diff --git a/src/bot_DummyServ.c b/src/bot_DummyServ.c index 9e77935..3ebe267 100644 --- a/src/bot_DummyServ.c +++ b/src/bot_DummyServ.c @@ -105,25 +105,6 @@ static void start_bots() { 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 diff --git a/src/bot_NeonServ.c b/src/bot_NeonServ.c index 97f4f24..55445e0 100644 --- a/src/bot_NeonServ.c +++ b/src/bot_NeonServ.c @@ -420,90 +420,6 @@ static void start_bots() { 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 diff --git a/src/bot_NeonSpam.c b/src/bot_NeonSpam.c index 57d9164..f1fe00c 100644 --- a/src/bot_NeonSpam.c +++ b/src/bot_NeonSpam.c @@ -291,28 +291,6 @@ static void createSpamNode(struct ChanUser *chanuser) { 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 diff --git a/src/cmd_global.h b/src/cmd_global.h new file mode 100644 index 0000000..95164e2 --- /dev/null +++ b/src/cmd_global.h @@ -0,0 +1,54 @@ +/* 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 . + */ +#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 diff --git a/src/cmd_neonserv_bind.c b/src/cmd_global_bind.c similarity index 95% rename from src/cmd_neonserv_bind.c rename to src/cmd_global_bind.c index 74d2402..9b65436 100644 --- a/src/cmd_neonserv_bind.c +++ b/src/cmd_global_bind.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_bind.c - NeonServ v5.2 +/* 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 @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] command name @@ -23,7 +23,7 @@ * argv[2-*] parameters (optional) */ -CMD_BIND(neonserv_cmd_bind) { +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])); diff --git a/src/cmd_neonserv_emote.c b/src/cmd_global_emote.c similarity index 89% rename from src/cmd_neonserv_emote.c rename to src/cmd_global_emote.c index c1c53e2..824f712 100644 --- a/src/cmd_neonserv_emote.c +++ b/src/cmd_global_emote.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_emote.c - NeonServ v5.2 +/* 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 @@ -15,14 +15,14 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] target * argv[1-*] message */ -CMD_BIND(neonserv_cmd_emote) { +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 diff --git a/src/cmd_neonserv_god.c b/src/cmd_global_god.c similarity index 95% rename from src/cmd_neonserv_god.c rename to src/cmd_global_god.c index 116bc2a..db063f3 100644 --- a/src/cmd_neonserv_god.c +++ b/src/cmd_global_god.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_god.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] (optional) on/off */ -CMD_BIND(neonserv_cmd_god) { +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)) { diff --git a/src/cmd_neonserv_netinfo.c b/src/cmd_global_netinfo.c similarity index 98% rename from src/cmd_neonserv_netinfo.c rename to src/cmd_global_netinfo.c index 5f2d306..a9d0466 100644 --- a/src/cmd_neonserv_netinfo.c +++ b/src/cmd_global_netinfo.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_netinfo.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * no args */ -CMD_BIND(neonserv_cmd_netinfo) { +CMD_BIND(global_cmd_netinfo) { reply(getTextBot(), user, "NS_NETINFO_HEADER"); char tmp[MAXLEN]; struct Table *table; diff --git a/src/cmd_neonserv_notice.c b/src/cmd_global_notice.c similarity index 89% rename from src/cmd_neonserv_notice.c rename to src/cmd_global_notice.c index 906908e..6450a8c 100644 --- a/src/cmd_neonserv_notice.c +++ b/src/cmd_global_notice.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_notice.c - NeonServ v5.2 +/* 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 @@ -15,14 +15,14 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] target * argv[1-*] message */ -CMD_BIND(neonserv_cmd_notice) { +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 diff --git a/src/cmd_neonserv_raw.c b/src/cmd_global_raw.c similarity index 89% rename from src/cmd_neonserv_raw.c rename to src/cmd_global_raw.c index 5fd74cf..3569bf2 100644 --- a/src/cmd_neonserv_raw.c +++ b/src/cmd_global_raw.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_raw.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0-*] raw */ -CMD_BIND(neonserv_cmd_raw) { +CMD_BIND(global_cmd_raw) { char *raw = merge_argv(argv, 0, argc); putsock(client, "%s", raw); } \ No newline at end of file diff --git a/src/cmd_neonserv_register.c b/src/cmd_global_register.c similarity index 79% rename from src/cmd_neonserv_register.c rename to src/cmd_global_register.c index c806ca4..08c172a 100644 --- a/src/cmd_neonserv_register.c +++ b/src/cmd_global_register.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_register.c - NeonServ v5.2 +/* 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 @@ -15,17 +15,17 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.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); +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 neonserv_cmd_register_cache { +struct global_cmd_register_cache { struct ClientSocket *client, *textclient; struct UserNode *user; struct ChanNode *chan; @@ -35,7 +35,7 @@ struct neonserv_cmd_register_cache { int multibot; }; -CMD_BIND(neonserv_cmd_register) { +CMD_BIND(global_cmd_register) { MYSQL_RES *res; MYSQL_ROW row; char *channel = argv[0]; @@ -57,7 +57,7 @@ CMD_BIND(neonserv_cmd_register) { if(multibot && argc < 2) { //skip all these owner check lines multibot = 2; - neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot); + global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot); return; } else if(argc < 2) { reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT"); @@ -70,11 +70,11 @@ CMD_BIND(neonserv_cmd_register) { 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); + 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 neonserv_cmd_register_cache *cache = malloc(sizeof(*cache)); + struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { perror("malloc() failed"); return; @@ -87,7 +87,7 @@ CMD_BIND(neonserv_cmd_register) { cache->nick = strdup(argv[1]); cache->channel = strdup(channel); cache->multibot = multibot; - lookup_authname(argv[1], neonserv_cmd_register_auth_lookup, cache); + lookup_authname(argv[1], global_cmd_register_auth_lookup, cache); } } else { struct UserNode *cuser = getUserByNick(argv[1]); @@ -96,9 +96,9 @@ CMD_BIND(neonserv_cmd_register) { cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot); + global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot); } else { - struct neonserv_cmd_register_cache *cache = malloc(sizeof(*cache)); + struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { perror("malloc() failed"); return; @@ -111,25 +111,25 @@ CMD_BIND(neonserv_cmd_register) { cache->nick = strdup(argv[1]); cache->channel = strdup(channel); cache->multibot = multibot; - get_userauth(cuser, neonserv_cmd_register_nick_lookup, cache); + get_userauth(cuser, global_cmd_register_nick_lookup, cache); } } } -static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup) { - struct neonserv_cmd_register_cache *cache = data; +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 - neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth, cache->multibot); + 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(neonserv_cmd_register_nick_lookup) { - struct neonserv_cmd_register_cache *cache = data; +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); @@ -139,13 +139,13 @@ static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup) { 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); + 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 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) { +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; diff --git a/src/cmd_neonserv_reloadlang.c b/src/cmd_global_reloadlang.c similarity index 91% rename from src/cmd_neonserv_reloadlang.c rename to src/cmd_global_reloadlang.c index 14d3f28..4516dff 100644 --- a/src/cmd_neonserv_reloadlang.c +++ b/src/cmd_global_reloadlang.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_reloadlang.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] language tag */ -CMD_BIND(neonserv_cmd_reloadlang) { +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])); diff --git a/src/cmd_neonserv_say.c b/src/cmd_global_say.c similarity index 90% rename from src/cmd_neonserv_say.c rename to src/cmd_global_say.c index 97b9d1a..e304d12 100644 --- a/src/cmd_neonserv_say.c +++ b/src/cmd_global_say.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_say.c - NeonServ v5.2 +/* 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 @@ -15,14 +15,14 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] target * argv[1-*] message */ -CMD_BIND(neonserv_cmd_say) { +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 diff --git a/src/cmd_neonserv_setaccess.c b/src/cmd_global_setaccess.c similarity index 70% rename from src/cmd_neonserv_setaccess.c rename to src/cmd_global_setaccess.c index eaf9479..9f04b43 100644 --- a/src/cmd_neonserv_setaccess.c +++ b/src/cmd_global_setaccess.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_setaccess.c - NeonServ v5.2 +/* 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 @@ -15,17 +15,17 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.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); +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 neonserv_cmd_setaccess_cache { +struct global_cmd_setaccess_cache { struct ClientSocket *client, *textclient; struct UserNode *user; struct Event *event; @@ -33,7 +33,7 @@ struct neonserv_cmd_setaccess_cache { char *nick; }; -CMD_BIND(neonserv_cmd_setaccess) { +CMD_BIND(global_cmd_setaccess) { int caccess; MYSQL_RES *res; MYSQL_ROW row; @@ -54,11 +54,11 @@ CMD_BIND(neonserv_cmd_setaccess) { 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); + 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 neonserv_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); + struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { perror("malloc() failed"); return; @@ -69,7 +69,7 @@ CMD_BIND(neonserv_cmd_setaccess) { cache->event = event; cache->access = caccess; cache->nick = strdup(argv[0]); - lookup_authname(argv[0], neonserv_cmd_setaccess_auth_lookup, cache); + lookup_authname(argv[0], global_cmd_setaccess_auth_lookup, cache); } } else { struct UserNode *cuser = getUserByNick(argv[0]); @@ -78,9 +78,9 @@ CMD_BIND(neonserv_cmd_setaccess) { cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - neonserv_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], cuser->auth, caccess); + global_cmd_setaccess_async1(client, getTextBot(), user, event, argv[0], cuser->auth, caccess); } else { - struct neonserv_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); + struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { perror("malloc() failed"); return; @@ -91,24 +91,24 @@ CMD_BIND(neonserv_cmd_setaccess) { cache->event = event; cache->access = caccess; cache->nick = strdup(argv[0]); - get_userauth(cuser, neonserv_cmd_setaccess_nick_lookup, cache); + get_userauth(cuser, global_cmd_setaccess_nick_lookup, cache); } } } -static AUTHLOOKUP_CALLBACK(neonserv_cmd_setaccess_auth_lookup) { - struct neonserv_cmd_setaccess_cache *cache = data; +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 - neonserv_cmd_setaccess_async1(cache->client, cache->textclient, cache->user, cache->event, cache->nick, auth, cache->access); + 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(neonserv_cmd_setaccess_nick_lookup) { - struct neonserv_cmd_setaccess_cache *cache = data; +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); @@ -118,12 +118,12 @@ static USERAUTH_CALLBACK(neonserv_cmd_setaccess_nick_lookup) { 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); + 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 neonserv_cmd_setaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct Event *event, char *nick, char *auth, int caccess) { +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; diff --git a/src/cmd_neonserv_unbind.c b/src/cmd_global_unbind.c similarity index 95% rename from src/cmd_neonserv_unbind.c rename to src/cmd_global_unbind.c index 43f6c72..498e803 100644 --- a/src/cmd_neonserv_unbind.c +++ b/src/cmd_global_unbind.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_unbind.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] command name */ -CMD_BIND(neonserv_cmd_unbind) { +CMD_BIND(global_cmd_unbind) { MYSQL_RES *res; MYSQL_ROW row; struct cmd_binding *cbind = find_cmd_binding(client->botid, argv[0]); diff --git a/src/cmd_neonserv_unregister.c b/src/cmd_global_unregister.c similarity index 95% rename from src/cmd_neonserv_unregister.c rename to src/cmd_global_unregister.c index a499144..99669af 100644 --- a/src/cmd_neonserv_unregister.c +++ b/src/cmd_global_unregister.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_unregister.c - NeonServ v5.2 +/* 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 @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * argv[0] - channel */ -CMD_BIND(neonserv_cmd_unregister) { +CMD_BIND(global_cmd_unregister) { MYSQL_RES *res; MYSQL_ROW row; char *channel = argv[0]; diff --git a/src/cmd_neonserv_version.c b/src/cmd_global_version.c similarity index 94% rename from src/cmd_neonserv_version.c rename to src/cmd_global_version.c index 15e7b08..b3048db 100644 --- a/src/cmd_neonserv_version.c +++ b/src/cmd_global_version.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_version.c - NeonServ v5.2 +/* 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 @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -#include "cmd_neonserv.h" +#include "cmd_global.h" /* * no args */ -CMD_BIND(neonserv_cmd_version) { +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"); diff --git a/src/cmd_neonserv.h b/src/cmd_neonserv.h index b60342f..dcdf814 100644 --- a/src/cmd_neonserv.h +++ b/src/cmd_neonserv.h @@ -46,7 +46,6 @@ CMD_BIND(neonserv_cmd_adduser); 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); @@ -62,11 +61,9 @@ CMD_BIND(neonserv_cmd_devoice); 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); @@ -78,22 +75,15 @@ CMD_BIND(neonserv_cmd_mdeluser); 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); @@ -102,15 +92,12 @@ CMD_BIND(neonserv_cmd_trim); 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); diff --git a/src/commands.c b/src/commands.c new file mode 100644 index 0000000..f8da036 --- /dev/null +++ b/src/commands.c @@ -0,0 +1,130 @@ +/* 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 . + */ + +#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 diff --git a/src/commands.h b/src/commands.h new file mode 100644 index 0000000..56a6352 --- /dev/null +++ b/src/commands.h @@ -0,0 +1,23 @@ +/* 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 . + */ +#ifndef _commands_h +#define _commands_h +#include "main.h" + +void register_commands(); + +#endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 6c881fb..d6258a7 100644 --- a/src/main.c +++ b/src/main.c @@ -33,6 +33,7 @@ #include "ModeNode.h" #include "IRCQueue.h" #include "DBHelper.h" +#include "commands.h" #include "lib/ini.h" time_t start_time; @@ -121,6 +122,7 @@ int main(void) init_modcmd(); init_handleinfohandler(); init_tools(); + register_commands(); init_bots(); init_DBHelper(); diff --git a/src/modcmd.c b/src/modcmd.c index 3f480cd..6b769ea 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -35,6 +35,13 @@ struct trigger_callback { 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; @@ -48,6 +55,7 @@ struct command_check_user_cache { 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[] = { @@ -450,7 +458,7 @@ static void got_privmsg(struct UserNode *user, struct UserNode *target, char *me 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)); @@ -528,8 +536,22 @@ int bind_cmd_to_function(int botid, char *cmd, struct cmd_function *func) { 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; @@ -581,8 +603,21 @@ int unbind_cmd(int botid, char *cmd) { 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; @@ -628,8 +663,15 @@ void free_modcmd() { 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) { @@ -706,7 +748,7 @@ void bind_unbound_required_functions(int botid) { 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) { @@ -726,3 +768,20 @@ void bind_unbound_required_functions(int botid) { } } +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; +} + diff --git a/src/modcmd.h b/src/modcmd.h index a2d8447..4009768 100644 --- a/src/modcmd.h +++ b/src/modcmd.h @@ -92,4 +92,6 @@ void bind_set_channel_access(int botid, char *cmd, char *chanaccess); 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 -- 2.20.1