-typedef int neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+typedef char* neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
#define NS_VALID_FUNCTION 0x01
#define NS_VALID_STRING 0x02
#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 */
+#define NS_HAS_HELP 0x200 /* help (SET_HELP_{NAME}) - only shown if help is requested */
static const struct {
const char *setting;
unsigned int valid;
void *parameter;
} channel_settings[] = {
- {"TRIGGER", "channel_trigger", NS_VALID_FUNCTION, neonserv_cmd_set_trigger},
+ {"TRIGGER", NULL, 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},
{"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},
+ {"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},
};
static CMD_BIND(neonserv_cmd_set) {
- int i;
+ int i, j;
if(argc && strcmp(argv[0], "help")) {
} else {
check_mysql();
- char query[512], *value, *tmp, nameBuf[64];
+ char query[1024], *value, *org_value, *tmp, nameBuf[64];
int querypos = 0;
- MYSQL_RES *res;
+ MYSQL_RES *res, *defaults_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);
+ while(channel_settings[i].setting) {
+ if(channel_settings[i].chanfield)
+ 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);
+ printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_name` = 'defaults'", query);
+ defaults_res = mysql_use();
+ defaults = mysql_fetch_row(defaults_res);
+ printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%d'", 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) {
+ j = 0;
+ reply(getTextBot(), user, "NS_SET_HEADER", chan->name);
+ while(channel_settings[i].setting) {
+ if(channel_settings[i].chanfield) {
+ j++;
+ org_value = (row[j] ? row[j] : defaults[j]);
+ } else if(channel_settings[i].valid & NS_VALID_FUNCTION) {
+ neonserv_cmd_set_function *func = channel_settings[i].parameter;
+ org_value = func(client, user, chan, 0, NULL);
+ } else
+ org_value = "0";
+ value = org_value;
+ if(channel_settings[i].valid & NS_VALID_BOOLEAN) {
if(!strcmp(value, "0"))
value = get_language_string(user, "NS_SET_OFF");
else
}
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]));
+ if(channel_settings[i].valid & NS_HAS_OPT) {
+ sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i].setting, org_value);
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);
+ 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[0] = (char*)channel_settings[i].setting;
content[1] = query;
table_add(table, content);
+ i++;
}
char **table_lines = table_end(table);
for(i = 0; i < table->entrys; i++) {
reply(getTextBot(), user, table_lines[i]);
}
- free_table(table);
+ table_free(table);
}
}
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
- return 1;
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+ return "+";
}
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
- return 1;
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+ return NULL;
}
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
- return 1;
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+ return NULL;
}
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
- return 1;
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+ return NULL;
}