+}
+
+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_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);
+}