-/* cmd_neonserv_uset.c - NeonServ v5.3
+/* cmd_neonserv_uset.c - NeonServ v5.4
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
#include "cmd_neonserv.h"
+typedef void neonserv_cmd_uset_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_language(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_blockinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_noinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_autoinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_noautoop(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_info(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+
+#define USET_FLAG_GLOBAL 0x01
+#define USET_FLAG_CHANNEL 0x02
+#define USET_FLAG_STAFF 0x04
+#define USET_FLAG_INVISIBLE 0x08
+#define USET_FLAG_DEFAULTS 0x10
+
+#define USET_DEFAULTS_QUERY \
+ printf_mysql_query("SELECT `chanuser_flags`, `chanuser_infoline`, `chanuser_access`, `channel_getinvite`, `chanuser_id` FROM `chanusers` LEFT JOIN `users` ON `chanuser_uid` = `user_id` LEFT JOIN `channels` ON `channel_id` = `chanuser_cid` WHERE `chanuser_cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth))
+
+static const struct {
+ const char *setting;
+ neonserv_cmd_uset_function *function;
+ int flags;
+} uset_settings[] = {
+ {"Language", neonserv_cmd_uset_language, USET_FLAG_GLOBAL},
+ {"BlockInvites", neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL},
+ {"BlockInvite", neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL | USET_FLAG_INVISIBLE},
+ {"BlockAllInvites", neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL | USET_FLAG_INVISIBLE},
+ {"NoInvite", neonserv_cmd_uset_noinvite, USET_FLAG_CHANNEL},
+ {"AutoInvite", neonserv_cmd_uset_autoinvite, USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+ {"NoAutoOp", neonserv_cmd_uset_noautoop, USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+ {"NoAutoVoice", neonserv_cmd_uset_noautoop, USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS | USET_FLAG_INVISIBLE}, //alias of NoAutoOp
+ {"Info", neonserv_cmd_uset_info, USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+ {NULL, NULL, 0}
+};
+
CMD_BIND(neonserv_cmd_uset) {
MYSQL_RES *res;
- MYSQL_ROW row;
+ MYSQL_ROW row = NULL;
+ int i = 0, j = 0;
loadUserSettings(user);
if(argc > 0) {
- if(!stricmp(argv[0], "language")) {
- struct language* lang;
- if(argc > 1) {
- if((lang = get_language_by_tag(argv[1])) == NULL && (lang = get_language_by_name(argv[1])) == NULL) {
- lang = user->language;
- } else {
- 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) {
- printf_mysql_query("UPDATE `users` SET `user_lang` = '%s' WHERE `user_id` = '%s'", escape_string(lang->langtag), row[0]);
- } else {
- printf_mysql_query("INSERT INTO `users` (`user_user`, `user_lang`) VALUES ('%s', '%s')", escape_string(user->auth), escape_string(lang->langtag));
- }
- struct UserNode *cuser;
- for(cuser = getAllUsers(NULL); cuser; cuser = getAllUsers(cuser)) {
- if((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))
- cuser->language = lang;
+ char *args = (argc > 1 ? merge_argv(argv, 1, argc) : NULL);
+ while(uset_settings[i].setting) {
+ if(!stricmp(uset_settings[i].setting, argv[0])) {
+ //setting found
+ if(uset_settings[i].flags & USET_FLAG_CHANNEL) {
+ if(!chan)
+ goto neonserv_cmd_uset_err_chan_required;
+ loadChannelSettings(chan);
+ if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
+ neonserv_cmd_uset_err_chan_required:
+ reply(getTextBot(), user, "MODCMD_CHAN_REQUIRED");
+ return;
}
- }
- } else
- lang = user->language;
- reply(getTextBot(), user, "\002Language \002%s", lang->langname);
- char tmp[MAXLEN];
- int tmppos = 0;
- lang = get_default_language();
- tmppos = sprintf(tmp, "%s (%s)", lang->langname, lang->langtag);
- printf_mysql_query("SELECT `lang`,`text` FROM `language` WHERE `ident` = 'name'");
- res = mysql_use();
- while((row = mysql_fetch_row(res)) != NULL) {
- tmppos += sprintf(tmp + tmppos, ", %s (%s)", row[1], row[0]);
- }
- reply(getTextBot(), user, " %s", tmp);
- } else if(!stricmp(argv[0], "noinvite") && chan) {
- loadChannelSettings(chan);
- if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
- reply(getTextBot(), user, "MODCMD_CHAN_REQUIRED");
- return;
- }
- printf_mysql_query("SELECT `id` FROM `noinvite` LEFT JOIN `users` ON `uid` = `user_id` WHERE `cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth));
- res = mysql_use();
- row = mysql_fetch_row(res);
- int noinvite = (row ? 1 : 0);
- if(argc > 1) {
- if(!strcmp(argv[1], "0") || !stricmp(argv[1], "off") || !stricmp(argv[1], get_language_string(user, "NS_SET_OFF"))) {
- if(noinvite) {
- printf_mysql_query("DELETE FROM `noinvite` WHERE `id` = '%s'", row[0]);
- noinvite = 0;
- }
- } else if(!strcmp(argv[1], "1") || !stricmp(argv[1], "on") || !stricmp(argv[1], get_language_string(user, "NS_SET_ON"))) {
- if(!noinvite) {
- int userid;
- printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+ if((uset_settings[i].flags & USET_FLAG_DEFAULTS) && !row) {
+ USET_DEFAULTS_QUERY;
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(user->auth));
- userid = (int) mysql_insert_id(get_mysql_conn());
+ row = mysql_fetch_row(res);
+ if(!row) {
+ reply(getTextBot(), user, "NS_NOT_ON_USERLIST_YOU", chan->name);
+ return;
}
- printf_mysql_query("INSERT INTO `noinvite` (`uid`, `cid`) VALUES ('%d', '%d')", userid, chan->channel_id);
- noinvite = 1;
}
}
+ neonserv_cmd_uset_function *func = uset_settings[i].function;
+ func(client, user, chan, event, uset_settings[i].setting, args, row);
+ j = 1;
+ break;
}
- reply(getTextBot(), user, "\002NoInvite \002%s", (noinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- } else if((!stricmp(argv[0], "autoinvite") || !stricmp(argv[0], "noautoop") || !stricmp(argv[0], "info")) && chan) {
- loadChannelSettings(chan);
- if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
- reply(getTextBot(), user, "MODCMD_CHAN_REQUIRED");
- return;
- }
- printf_mysql_query("SELECT `chanuser_flags`, `chanuser_infoline`, `chanuser_access`, `channel_getinvite`, `chanuser_id` FROM `chanusers` LEFT JOIN `users` ON `chanuser_uid` = `user_id` LEFT JOIN `channels` ON `channel_id` = `chanuser_cid` WHERE `chanuser_cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth));
- res = mysql_use();
- row = mysql_fetch_row(res);
- if(row) {
- int flags = atoi(row[0]);
- if(!stricmp(argv[0], "autoinvite")) {
- int getInvite = 0;
- if(!row[3] && atoi(row[2]) >= atoi(getChanDefault("channel_getinvite")))
- getInvite = 1;
- else if(row[3] && atoi(row[2]) >= atoi(row[3]))
- getInvite = 1;
- if(getInvite && argc > 1) {
- if(!strcmp(argv[1], "0") || !stricmp(argv[1], "off") || !stricmp(argv[1], get_language_string(user, "NS_SET_OFF"))) {
- if(flags & DB_CHANUSER_AUTOINVITE) {
- flags &= ~DB_CHANUSER_AUTOINVITE;
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, row[4]);
- }
- } else if(!strcmp(argv[1], "1") || !stricmp(argv[1], "on") || !stricmp(argv[1], get_language_string(user, "NS_SET_ON"))) {
- if(!(flags & DB_CHANUSER_AUTOINVITE)) {
- flags |= DB_CHANUSER_AUTOINVITE;
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, row[4]);
- }
- }
- }
- if(getInvite)
- reply(getTextBot(), user, "\002AutoInvite \002%s", ((flags & DB_CHANUSER_AUTOINVITE) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- else
- reply(getTextBot(), user, "\002AutoInvite \002%s", get_language_string(user, "NS_USET_NO_ACCESS"));
- } else if(!stricmp(argv[0], "noautoop")) {
- if(argc > 1) {
- if(!strcmp(argv[1], "0") || !stricmp(argv[1], "off") || !stricmp(argv[1], get_language_string(user, "NS_SET_OFF"))) {
- if(flags & DB_CHANUSER_NOAUTOOP) {
- flags &= ~DB_CHANUSER_NOAUTOOP;
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, row[4]);
- }
- } else if(!strcmp(argv[1], "1") || !stricmp(argv[1], "on") || !stricmp(argv[1], get_language_string(user, "NS_SET_ON"))) {
- if(!(flags & DB_CHANUSER_NOAUTOOP)) {
- flags |= DB_CHANUSER_NOAUTOOP;
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, row[4]);
- }
- }
- }
- reply(getTextBot(), user, "\002NoAutoOp \002%s", ((flags & DB_CHANUSER_NOAUTOOP) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- } else if(!stricmp(argv[0], "info")) {
- char *infoline;
- if(argc > 1) {
- infoline = merge_argv(argv, 1, argc);
- if(!strcmp(infoline, "*"))
- infoline = "";
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_infoline` = '%s' WHERE `chanuser_id` = '%s'", escape_string(infoline), row[4]);
- } else
- infoline = row[1];
- reply(getTextBot(), user, "\002Info \002%s", infoline);
- }
- } else
- reply(getTextBot(), user, "NS_NOT_ON_USERLIST_YOU", chan);
- } else
+ i++;
+ }
+ if(j == 0) {
+ //unknown setting
reply(getTextBot(), user, "NS_USET_UNKNOWN_SETTING", argv[0]);
+ }
} else {
//view all options
reply(getTextBot(), user, "NS_USET_GLOBAL");
- reply(getTextBot(), user, "\002Language \002%s", user->language->langname);
+ while(uset_settings[i].setting) {
+ if((uset_settings[i].flags & (USET_FLAG_INVISIBLE | USET_FLAG_GLOBAL)) == USET_FLAG_GLOBAL) {
+ neonserv_cmd_uset_function *func = uset_settings[i].function;
+ func(client, user, chan, event, uset_settings[i].setting, NULL, row);
+ }
+ i++;
+ }
if(!chan) return;
loadChannelSettings(chan);
if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) return;
reply(getTextBot(), user, "NS_USET_CHANNEL");
- printf_mysql_query("SELECT `id` FROM `noinvite` LEFT JOIN `users` ON `uid` = `user_id` WHERE `cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth));
- res = mysql_use();
- row = mysql_fetch_row(res);
- reply(getTextBot(), user, "\002NoInvite \002%s", (row ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- printf_mysql_query("SELECT `chanuser_flags`, `chanuser_infoline`, `chanuser_access`, `channel_getinvite` FROM `chanusers` LEFT JOIN `users` ON `chanuser_uid` = `user_id` LEFT JOIN `channels` ON `channel_id` = `chanuser_cid` WHERE `chanuser_cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth));
- res = mysql_use();
- row = mysql_fetch_row(res);
- if(row) {
- int flags = atoi(row[0]);
- int getInvite = 0;
- if(!row[3] && atoi(row[2]) >= atoi(getChanDefault("channel_getinvite")))
- getInvite = 1;
- else if(row[3] && atoi(row[2]) >= atoi(row[3]))
- getInvite = 1;
- if(getInvite)
- reply(getTextBot(), user, "\002AutoInvite \002%s", ((flags & DB_CHANUSER_AUTOINVITE) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- else
- reply(getTextBot(), user, "\002AutoInvite \002%s", get_language_string(user, "NS_USET_NO_ACCESS"));
- reply(getTextBot(), user, "\002NoAutoOp \002%s", ((flags & DB_CHANUSER_NOAUTOOP) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
- reply(getTextBot(), user, "\002Info \002%s", row[1]);
+ i = 0;
+ while(uset_settings[i].setting) {
+ if((uset_settings[i].flags & (USET_FLAG_INVISIBLE | USET_FLAG_CHANNEL)) == USET_FLAG_CHANNEL) {
+ if((uset_settings[i].flags & USET_FLAG_DEFAULTS) && !row) {
+ USET_DEFAULTS_QUERY;
+ res = mysql_use();
+ row = mysql_fetch_row(res);
+ if(!row) {
+ i++;
+ continue;
+ }
+ }
+ neonserv_cmd_uset_function *func = uset_settings[i].function;
+ func(client, user, chan, event, uset_settings[i].setting, NULL, row);
+ }
+ i++;
}
}
-}
\ No newline at end of file
+}
+
+static void neonserv_cmd_uset_language(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ struct language* lang;
+ if(argument) {
+ if((lang = get_language_by_tag(argument)) == NULL && (lang = get_language_by_name(argument)) == NULL) {
+ lang = user->language;
+ } else {
+ 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) {
+ printf_mysql_query("UPDATE `users` SET `user_lang` = '%s' WHERE `user_id` = '%s'", escape_string(lang->langtag), row[0]);
+ } else {
+ printf_mysql_query("INSERT INTO `users` (`user_user`, `user_lang`) VALUES ('%s', '%s')", escape_string(user->auth), escape_string(lang->langtag));
+ }
+ struct UserNode *cuser;
+ for(cuser = getAllUsers(NULL); cuser; cuser = getAllUsers(cuser)) {
+ if((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))
+ cuser->language = lang;
+ }
+ }
+ } else
+ lang = user->language;
+ reply(getTextBot(), user, "\002Language \002%s", lang->langname);
+ char tmp[MAXLEN];
+ int tmppos = 0;
+ lang = get_default_language();
+ tmppos = sprintf(tmp, "%s (%s)", lang->langname, lang->langtag);
+ printf_mysql_query("SELECT `lang`,`text` FROM `language` WHERE `ident` = 'name'");
+ res = mysql_use();
+ while((row = mysql_fetch_row(res)) != NULL) {
+ tmppos += sprintf(tmp + tmppos, ", %s (%s)", row[1], row[0]);
+ }
+ reply(getTextBot(), user, " %s", tmp);
+}
+
+static void neonserv_cmd_uset_blockinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `user_id`, `user_block_invites` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+ res = mysql_use();
+ row = mysql_fetch_row(res);
+ int blockinvite = (row ? atoi(row[1]) : 0);
+ if(argument) {
+ if(!strcmp(argument, "0") || !stricmp(argument, "off") || !stricmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+ blockinvite = 0;
+ } else if(!strcmp(argument, "1") || !stricmp(argument, "on") || !stricmp(argument, get_language_string(user, "NS_SET_ON"))) {
+ blockinvite = 1;
+ }
+ if(blockinvite && !row) {
+ printf_mysql_query("INSERT INTO `users` (`user_user`, `user_block_invites`) VALUES ('%s', '1')", escape_string(user->auth));
+ } else if(blockinvite != atoi(row[1])) {
+ printf_mysql_query("UPDATE `users` SET `user_block_invites` = '%d' WHERE `user_id` = '%s'", blockinvite, row[0]);
+ }
+ }
+ reply(getTextBot(), user, "\002BlockInvite \002%s", (blockinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+}
+
+static void neonserv_cmd_uset_noinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `id` FROM `noinvite` LEFT JOIN `users` ON `uid` = `user_id` WHERE `cid` = '%d' AND `user_user` = '%s'", chan->channel_id, escape_string(user->auth));
+ res = mysql_use();
+ row = mysql_fetch_row(res);
+ int noinvite = (row ? 1 : 0);
+ if(argument) {
+ if(!strcmp(argument, "0") || !stricmp(argument, "off") || !stricmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+ if(noinvite) {
+ printf_mysql_query("DELETE FROM `noinvite` WHERE `id` = '%s'", row[0]);
+ noinvite = 0;
+ }
+ } else if(!strcmp(argument, "1") || !stricmp(argument, "on") || !stricmp(argument, get_language_string(user, "NS_SET_ON"))) {
+ if(!noinvite) {
+ int userid;
+ 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) {
+ userid = atoi(row[0]);
+ } else {
+ printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(user->auth));
+ userid = (int) mysql_insert_id(get_mysql_conn());
+ }
+ printf_mysql_query("INSERT INTO `noinvite` (`uid`, `cid`) VALUES ('%d', '%d')", userid, chan->channel_id);
+ noinvite = 1;
+ }
+ }
+ }
+ reply(getTextBot(), user, "\002NoInvite \002%s", (noinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+}
+
+static void neonserv_cmd_uset_autoinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ int flags = atoi(defaults[0]);
+ int getInvite = 0;
+ if(!defaults[3] && atoi(defaults[2]) >= atoi(getChanDefault("channel_getinvite")))
+ getInvite = 1;
+ else if(defaults[3] && atoi(defaults[2]) >= atoi(defaults[3]))
+ getInvite = 1;
+ if(getInvite && argument) {
+ if(!strcmp(argument, "0") || !stricmp(argument, "off") || !stricmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+ if(flags & DB_CHANUSER_AUTOINVITE) {
+ flags &= ~DB_CHANUSER_AUTOINVITE;
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, defaults[4]);
+ }
+ } else if(!strcmp(argument, "1") || !stricmp(argument, "on") || !stricmp(argument, get_language_string(user, "NS_SET_ON"))) {
+ if(!(flags & DB_CHANUSER_AUTOINVITE)) {
+ flags |= DB_CHANUSER_AUTOINVITE;
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, defaults[4]);
+ }
+ }
+ }
+ if(getInvite)
+ reply(getTextBot(), user, "\002AutoInvite \002%s", ((flags & DB_CHANUSER_AUTOINVITE) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+ else
+ reply(getTextBot(), user, "\002AutoInvite \002%s", get_language_string(user, "NS_USET_NO_ACCESS"));
+}
+
+static void neonserv_cmd_uset_noautoop(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ int flags = atoi(defaults[0]);
+ if(argument) {
+ if(!strcmp(argument, "0") || !stricmp(argument, "off") || !stricmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+ if(flags & DB_CHANUSER_NOAUTOOP) {
+ flags &= ~DB_CHANUSER_NOAUTOOP;
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, defaults[4]);
+ }
+ } else if(!strcmp(argument, "1") || !stricmp(argument, "on") || !stricmp(argument, get_language_string(user, "NS_SET_ON"))) {
+ if(!(flags & DB_CHANUSER_NOAUTOOP)) {
+ flags |= DB_CHANUSER_NOAUTOOP;
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_flags` = '%d' WHERE `chanuser_id` = '%s'", flags, defaults[4]);
+ }
+ }
+ }
+ reply(getTextBot(), user, "\002NoAutoOp \002%s", ((flags & DB_CHANUSER_NOAUTOOP) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+}
+
+static void neonserv_cmd_uset_info(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+ char *infoline;
+ if(argument) {
+ infoline = argument;
+ if(!strcmp(infoline, "*"))
+ infoline = "";
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_infoline` = '%s' WHERE `chanuser_id` = '%s'", escape_string(infoline), defaults[4]);
+ } else
+ infoline = defaults[1];
+ reply(getTextBot(), user, "\002Info \002%s", infoline);
+}