simplified modcmd system
authorpk910 <philipp@zoelle1.de>
Mon, 31 Oct 2011 16:18:05 +0000 (17:18 +0100)
committerpk910 <philipp@zoelle1.de>
Mon, 31 Oct 2011 16:31:34 +0000 (17:31 +0100)
37 files changed:
Makefile.am
src/bot_DummyServ.c
src/bot_NeonServ.c
src/bot_NeonSpam.c
src/cmd_global.h [new file with mode: 0644]
src/cmd_global_bind.c [new file with mode: 0644]
src/cmd_global_emote.c [new file with mode: 0644]
src/cmd_global_god.c [new file with mode: 0644]
src/cmd_global_netinfo.c [new file with mode: 0644]
src/cmd_global_notice.c [new file with mode: 0644]
src/cmd_global_raw.c [new file with mode: 0644]
src/cmd_global_register.c [new file with mode: 0644]
src/cmd_global_reloadlang.c [new file with mode: 0644]
src/cmd_global_say.c [new file with mode: 0644]
src/cmd_global_setaccess.c [new file with mode: 0644]
src/cmd_global_unbind.c [new file with mode: 0644]
src/cmd_global_unregister.c [new file with mode: 0644]
src/cmd_global_version.c [new file with mode: 0644]
src/cmd_neonserv.h
src/cmd_neonserv_bind.c [deleted file]
src/cmd_neonserv_emote.c [deleted file]
src/cmd_neonserv_god.c [deleted file]
src/cmd_neonserv_netinfo.c [deleted file]
src/cmd_neonserv_notice.c [deleted file]
src/cmd_neonserv_raw.c [deleted file]
src/cmd_neonserv_register.c [deleted file]
src/cmd_neonserv_reloadlang.c [deleted file]
src/cmd_neonserv_say.c [deleted file]
src/cmd_neonserv_setaccess.c [deleted file]
src/cmd_neonserv_unbind.c [deleted file]
src/cmd_neonserv_unregister.c [deleted file]
src/cmd_neonserv_version.c [deleted file]
src/commands.c [new file with mode: 0644]
src/commands.h [new file with mode: 0644]
src/main.c
src/modcmd.c
src/modcmd.h

index 8c32f660c6175ef37ec6cba5809d25f7b54ab523..215c28b11417116ba78ba9fff07935380f831d05 100644 (file)
@@ -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 \
index 9e7793598a54ae7b6a06fe1fe527f3590e98ad5b..3ebe2676525234972df8918825f385a5c14bad8d 100644 (file)
@@ -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
index 97f4f246f6c7ead35c3c3f1ae84e03dbb649ab66..55445e0c56b8fff70b7bb5c17455a11275b44497 100644 (file)
@@ -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
index 57d9164f5679a0666f8e50899e7dd05ed5e38caa..f1fe00ca8670bea6057781366998a174581f8b5b 100644 (file)
@@ -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 (file)
index 0000000..95164e2
--- /dev/null
@@ -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 <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
diff --git a/src/cmd_global_bind.c b/src/cmd_global_bind.c
new file mode 100644 (file)
index 0000000..9b65436
--- /dev/null
@@ -0,0 +1,51 @@
+/* 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);
+}
diff --git a/src/cmd_global_emote.c b/src/cmd_global_emote.c
new file mode 100644 (file)
index 0000000..824f712
--- /dev/null
@@ -0,0 +1,28 @@
+/* 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
diff --git a/src/cmd_global_god.c b/src/cmd_global_god.c
new file mode 100644 (file)
index 0000000..db063f3
--- /dev/null
@@ -0,0 +1,53 @@
+/* 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
diff --git a/src/cmd_global_netinfo.c b/src/cmd_global_netinfo.c
new file mode 100644 (file)
index 0000000..a9d0466
--- /dev/null
@@ -0,0 +1,170 @@
+/* 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);
+}
+
diff --git a/src/cmd_global_notice.c b/src/cmd_global_notice.c
new file mode 100644 (file)
index 0000000..6450a8c
--- /dev/null
@@ -0,0 +1,28 @@
+/* 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
diff --git a/src/cmd_global_raw.c b/src/cmd_global_raw.c
new file mode 100644 (file)
index 0000000..3569bf2
--- /dev/null
@@ -0,0 +1,27 @@
+/* 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
diff --git a/src/cmd_global_register.c b/src/cmd_global_register.c
new file mode 100644 (file)
index 0000000..08c172a
--- /dev/null
@@ -0,0 +1,218 @@
+/* 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);
+}
diff --git a/src/cmd_global_reloadlang.c b/src/cmd_global_reloadlang.c
new file mode 100644 (file)
index 0000000..4516dff
--- /dev/null
@@ -0,0 +1,35 @@
+/* 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
diff --git a/src/cmd_global_say.c b/src/cmd_global_say.c
new file mode 100644 (file)
index 0000000..e304d12
--- /dev/null
@@ -0,0 +1,28 @@
+/* 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
diff --git a/src/cmd_global_setaccess.c b/src/cmd_global_setaccess.c
new file mode 100644 (file)
index 0000000..9f04b43
--- /dev/null
@@ -0,0 +1,140 @@
+/* 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);
+}
diff --git a/src/cmd_global_unbind.c b/src/cmd_global_unbind.c
new file mode 100644 (file)
index 0000000..498e803
--- /dev/null
@@ -0,0 +1,48 @@
+/* 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);
+}
diff --git a/src/cmd_global_unregister.c b/src/cmd_global_unregister.c
new file mode 100644 (file)
index 0000000..99669af
--- /dev/null
@@ -0,0 +1,58 @@
+/* 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);
+}
diff --git a/src/cmd_global_version.c b/src/cmd_global_version.c
new file mode 100644 (file)
index 0000000..b3048db
--- /dev/null
@@ -0,0 +1,37 @@
+/* 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
index b60342fe1aec58a9a8fb1d3bbd178bd514d67be8..dcdf8142bc7af20194543ef0cd69350b8cecb641 100644 (file)
@@ -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/cmd_neonserv_bind.c b/src/cmd_neonserv_bind.c
deleted file mode 100644 (file)
index 74d2402..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 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);
-}
diff --git a/src/cmd_neonserv_emote.c b/src/cmd_neonserv_emote.c
deleted file mode 100644 (file)
index c1c53e2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_god.c b/src/cmd_neonserv_god.c
deleted file mode 100644 (file)
index 116bc2a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_netinfo.c b/src/cmd_neonserv_netinfo.c
deleted file mode 100644 (file)
index 5f2d306..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/* 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);
-}
-
diff --git a/src/cmd_neonserv_notice.c b/src/cmd_neonserv_notice.c
deleted file mode 100644 (file)
index 906908e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_raw.c b/src/cmd_neonserv_raw.c
deleted file mode 100644 (file)
index 5fd74cf..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_register.c b/src/cmd_neonserv_register.c
deleted file mode 100644 (file)
index c806ca4..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/* 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);
-}
diff --git a/src/cmd_neonserv_reloadlang.c b/src/cmd_neonserv_reloadlang.c
deleted file mode 100644 (file)
index 14d3f28..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_say.c b/src/cmd_neonserv_say.c
deleted file mode 100644 (file)
index 97b9d1a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* 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
diff --git a/src/cmd_neonserv_setaccess.c b/src/cmd_neonserv_setaccess.c
deleted file mode 100644 (file)
index eaf9479..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* 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);
-}
diff --git a/src/cmd_neonserv_unbind.c b/src/cmd_neonserv_unbind.c
deleted file mode 100644 (file)
index 43f6c72..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* 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);
-}
diff --git a/src/cmd_neonserv_unregister.c b/src/cmd_neonserv_unregister.c
deleted file mode 100644 (file)
index a499144..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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);
-}
diff --git a/src/cmd_neonserv_version.c b/src/cmd_neonserv_version.c
deleted file mode 100644 (file)
index 15e7b08..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* 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
diff --git a/src/commands.c b/src/commands.c
new file mode 100644 (file)
index 0000000..f8da036
--- /dev/null
@@ -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 <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
diff --git a/src/commands.h b/src/commands.h
new file mode 100644 (file)
index 0000000..56a6352
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>. 
+ */
+#ifndef _commands_h
+#define _commands_h
+#include "main.h"
+
+void register_commands();
+
+#endif
\ No newline at end of file
index 6c881fb00bfef702b9254c2cba82b247953db0ca..d6258a7598e5fce77fdb7b4116f27c68a681d30b 100644 (file)
@@ -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();
     
index 3f480cda6b8fcac491f15397f4e84f0d632a206a..6b769eac56c6b2017cac2268cd3854d1e907148c 100644 (file)
@@ -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;
+}
+
index a2d8447f82a6417e0253a0d88ac1d787fb12fbc4..400976825fb21ce3a54f6f662b447a7ac3b20644 100644 (file)
@@ -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