continued cmd_set
authorpk910 <philipp@zoelle1.de>
Sun, 28 Aug 2011 15:20:16 +0000 (17:20 +0200)
committerpk910 <philipp@zoelle1.de>
Sun, 28 Aug 2011 15:20:16 +0000 (17:20 +0200)
bot_NeonServ.c
cmd_neonserv_set.c

index 884d002abb2a75b935cfd7d9aded2478fe430fbe..dd8a0eb3dd4d9a7f53bfe5873d817e96e0220202 100644 (file)
@@ -104,6 +104,9 @@ static const struct default_language_entry msgtab[] = {
     {"NS_BAN_DONE", "\002%d\002 masks added to the %s ban list. (matching %d users)"},
     {"NS_BAN_FAIL", "\002%s\002 could not kickban some of the nicks you provided."},
     {"NS_LAME_MASK", "\002%s\002 is a little too general. Try making it more specific."},
+    {"NS_SET_HEADER", "Channel Settings for %s:"},
+    {"NS_SET_ON", "on"},
+    {"NS_SET_OFF", "off"},
     {NULL, NULL}
 };
 
index 69e9c06550801f5366dcbc6a0a64028edbdbf351..cd54d206d51b7e7e8798a4da7b49ddee6d780984 100644 (file)
@@ -13,52 +13,113 @@ static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNod
 #define NS_VALID_NUMERIC  0x20
 #define NS_VALID_BOOLEAN  0x40
 
+#define NS_HAS_OPT  0x100 /* options (SET_OPTION_{NAME}_{VALUE}) */
+#define NS_HAS_HALP 0x200 /* help    (SET_HELP_{NAME}) - only shown if help is requested */
+
 static const struct {
     const char *setting;
     const char *chanfield;
     unsigned int valid;
     void *parameter;
 } channel_settings[] = {
-    {"trigger",         "channel_trigger",      NS_VALID_FUNCTION,  neonserv_cmd_set_trigger},
-    {"defaulttopic",    "channel_defaulttopic", NS_VALID_STRING,    NULL},
-    {"topicmask",       "channel_topicmask",    NS_VALID_STRING,    NULL},
-    {"greeting",        "channel_greeting",     NS_VALID_STRING,    NULL},
-    {"usergreeting",    "channel_usergreeting", NS_VALID_STRING,    NULL},
-    {"userinfo",        "channel_userinfo",     NS_VALID_ACCESS,    NULL},
-    {"wipeinfo",        "channel_wipeinfo",     NS_VALID_ACCESS,    NULL},
-    {"modes",           "channel_modes",        NS_VALID_FUNCTION,  neonserv_cmd_set_modes},
-    {"inviteme",        "channel_getinvite",    NS_VALID_ACCESS,    NULL},
-    {"giveops",         "channel_getop",        NS_VALID_ACCESS,    NULL},
-    {"givevoice",       "channel_getvoice",     NS_VALID_ACCESS,    NULL},
-    {"enfops",          "channel_canop",        NS_VALID_ACCESS,    NULL},
-    {"enfvoice",        "channel_canvoice",     NS_VALID_ACCESS,    NULL},
-    {"kick",            "channel_cankick",      NS_VALID_ACCESS,    NULL},
-    {"ban",             "channel_canban",       NS_VALID_ACCESS,    NULL},
-    {"staticban",       "channel_staticban",    NS_VALID_ACCESS,    NULL},
-    {"pubcmd",          "channel_pubcmd",       NS_VALID_ACCESS,    NULL},
-    {"enfmodes",        "channel_enfmodes",     NS_VALID_ACCESS,    NULL},
-    {"enftopic",        "channel_enftopic",     NS_VALID_ACCESS,    NULL},
-    {"topicsnarf",      "channel_topicsnarf",   NS_VALID_ACCESS,    NULL},
-    {"changetopic",     "channel_changetopic",  NS_VALID_ACCESS,    NULL},
-    {"setters",         "channel_setters",      NS_VALID_ACCESS | NS_VALID_NO501, NULL},
-    {"adduser",         "channel_canadd",       NS_VALID_ACCESS,    NULL},
-    {"deluser",         "channel_candel",       NS_VALID_ACCESS,    NULL},
-    {"clvl",            "channel_canclvl",      NS_VALID_ACCESS,    NULL},
-    {"resync",          "channel_canresync",    NS_VALID_ACCESS,    NULL},
-    {"suspend",         "channel_cansuspend",   NS_VALID_ACCESS,    NULL},
-    {"noticeusers",     "channel_notice",       NS_VALID_ACCESS,    NULL},
-    {"noticereaction",  "channel_noticereaction", NS_VALID_OPTIONS, "4"},
-    {"ctcpusers",       "channel_ctcp",         NS_VALID_ACCESS,    NULL},
-    {"ctcpreaction",    "channel_ctcpreaction", NS_VALID_OPTIONS,   "4"},
-    {"protect",         "channel_protect",      NS_VALID_OPTIONS,   "4"},
-    {"toys",            "channel_toys",         NS_VALID_OPTIONS,   "3"},
-    {"dynlimit",        "channel_dynlimit",     NS_VALID_NUMERIC | NS_VALID_FUNCTION, neonserv_cmd_set_dynlimit},
-    {"nodelete",        "channel_nodelete",     NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete},
+    {"TRIGGER",         "channel_trigger",      NS_VALID_FUNCTION,                  neonserv_cmd_set_trigger},
+    {"DEFAULTTOPIC",    "channel_defaulttopic", NS_VALID_STRING,                    NULL},
+    {"TOPICMASK",       "channel_topicmask",    NS_VALID_STRING,                    NULL},
+    {"GREETING",        "channel_greeting",     NS_VALID_STRING,                    NULL},
+    {"USERGREETING",    "channel_usergreeting", NS_VALID_STRING,                    NULL},
+    {"USERINFO",        "channel_userinfo",     NS_VALID_ACCESS,                    NULL},
+    {"WIPEINFO",        "channel_wipeinfo",     NS_VALID_ACCESS,                    NULL},
+    {"MODES",           "channel_modes",        NS_VALID_FUNCTION,                  neonserv_cmd_set_modes},
+    {"INVITEME",        "channel_getinvite",    NS_VALID_ACCESS,                    NULL},
+    {"GIVEOPS",         "channel_getop",        NS_VALID_ACCESS,                    NULL},
+    {"GIVEVOICE",       "channel_getvoice",     NS_VALID_ACCESS,                    NULL},
+    {"ENFOPS",          "channel_canop",        NS_VALID_ACCESS,                    NULL},
+    {"ENFVOICE",        "channel_canvoice",     NS_VALID_ACCESS,                    NULL},
+    {"KICK",            "channel_cankick",      NS_VALID_ACCESS,                    NULL},
+    {"BAN",             "channel_canban",       NS_VALID_ACCESS,                    NULL},
+    {"STATICBAN",       "channel_staticban",    NS_VALID_ACCESS,                    NULL},
+    {"PUBCMD",          "channel_pubcmd",       NS_VALID_ACCESS,                    NULL},
+    {"ENFMODES",        "channel_enfmodes",     NS_VALID_ACCESS,                    NULL},
+    {"ENFTOPIC",        "channel_enftopic",     NS_VALID_ACCESS,                    NULL},
+    {"TOPICSNARF",      "channel_topicsnarf",   NS_VALID_ACCESS,                    NULL},
+    {"CHANGETOPIC",     "channel_changetopic",  NS_VALID_ACCESS,                    NULL},
+    {"SETTERS",         "channel_setters",      NS_VALID_ACCESS | NS_VALID_NO501,   NULL},
+    {"ADDUSER",         "channel_canadd",       NS_VALID_ACCESS,                    NULL},
+    {"DELUSER",         "channel_candel",       NS_VALID_ACCESS,                    NULL},
+    {"CLVL",            "channel_canclvl",      NS_VALID_ACCESS,                    NULL2},
+    {"RESYNC",          "channel_canresync",    NS_VALID_ACCESS,                    NULL},
+    {"SUSPEND",         "channel_cansuspend",   NS_VALID_ACCESS,                    NULL},
+    {"NOTICEUSERS",     "channel_notice",       NS_VALID_ACCESS,                    NULL},
+    {"NOTICEREACTION",  "channel_noticereaction", NS_VALID_OPTIONS | NS_HAS_OPT,    "4"},
+    {"CTCPUSERS",       "channel_ctcp",         NS_VALID_ACCESS,                    NULL},
+    {"CTCPREACTION",    "channel_ctcpreaction", NS_VALID_OPTIONS | NS_HAS_OPT,      "4"},
+    {"PROTECT",         "channel_protect",      NS_VALID_OPTIONS | NS_HAS_OPT,      "4"},
+    {"TOYS",            "channel_toys",         NS_VALID_OPTIONS | NS_HAS_OPT,      "3"},
+    {"DYNLIMIT",        "channel_dynlimit",     NS_VALID_NUMERIC | NS_VALID_FUNCTION | NS_HAS_OPT, neonserv_cmd_set_dynlimit},
+    {"NODELETE",        "channel_nodelete",     NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete},
     {NULL, NULL, 0, NULL}
 };
 
 static CMD_BIND(neonserv_cmd_set) {
-    return;
+    int i;
+    if(argc && strcmp(argv[0], "help")) {
+        
+    } else {
+        check_mysql();
+        char query[512], *value, *tmp, nameBuf[64];
+        int querypos = 0;
+        MYSQL_RES *res;
+        MYSQL_ROW row, defaults;
+        struct Table *table;
+        char *content[2];
+        i = 0;
+        while(channel_settings[i]->setting) {
+            querypos += sprintf(query + querypos, ", `%s`", channel_settings[i]->chanfield);
+            i++;
+        }
+        table = table_init(2, i, 0);
+        table_set_bold(table, 0, 1);
+        printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_id` = 'defaults'", query);
+        defaults = mysql_fetch_row(mysql_use());
+        printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%s'", query, chan->channel_id);
+        res = mysql_use();
+        row = mysql_fetch_row(res);
+        i = 0;
+        reply(textclient, user, "NS_SET_HEADER", chan->name);
+        while(channel_settings[i]->setting) {
+            value = (row[1+i] ? row[1+i] : defaults[1+i]);
+            if(channel_settings[i]->valid & NS_VALID_BOOLEAN) {
+                if(!strcmp(value, "0"))
+                    value = get_language_string(user, "NS_SET_OFF");
+                else
+                    value = get_language_string(user, "NS_SET_ON");
+            }
+            strcpy(query, value);
+            querypos = strlen(query);
+            if(channel_settings[i]->valid & NS_HAS_OPT) {
+                sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i]->setting, (row[1+i] ? row[1+i] : defaults[1+i]));
+                tmp = get_language_string(user, nameBuf);
+                if(tmp) {
+                    querypos += sprintf(query+querypos, " - %s", tmp);
+                }
+            }
+            if(argc && channel_settings[i]->valid & NS_HAS_HELP) {
+                sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i]->setting);
+                tmp = get_language_string(user, nameBuf);
+                if(tmp) {
+                    querypos += sprintf(query+querypos, " - %s", tmp);
+                }
+            }
+            content[0] = channel_settings[i]->setting;
+            content[1] = query;
+            table_add(table, content);
+        }
+        char **table_lines = table_end(table);
+        for(i = 0; i < table->entrys; i++) {
+            reply(getTextBot(), user, table_lines[i]);
+        }
+        free_table(table);
+    }
 }
 
 static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {