From: pk910 Date: Sun, 28 Aug 2011 15:20:16 +0000 (+0200) Subject: continued cmd_set X-Git-Tag: v5.3~467 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=afe3cc6660cb2c1362397ea5cbc6cd74075ba081 continued cmd_set --- diff --git a/bot_NeonServ.c b/bot_NeonServ.c index 884d002..dd8a0eb 100644 --- a/bot_NeonServ.c +++ b/bot_NeonServ.c @@ -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} }; diff --git a/cmd_neonserv_set.c b/cmd_neonserv_set.c index 69e9c06..cd54d20 100644 --- a/cmd_neonserv_set.c +++ b/cmd_neonserv_set.c @@ -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) {