#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) {