-/* cmd_neonserv_nicklist.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
+/* cmd_neonserv_nicklist.c - NeonServ v5.3
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*/
static USERLIST_CALLBACK(neonserv_cmd_nicklist_userlist_lookup);
static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nickmask, int syncusers);
-static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct UserNode *user, int access, int new);
+static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct UserNode *user, int access);
struct neonserv_cmd_nicklist_cache {
struct ClientSocket *client, *textclient;
syncusers = 1;
event->flags |= CMDFLAG_LOG;
}
+ if(argc && !stricmp(argv[0], "nowho") && isGodMode(user)) {
+ argv++;
+ argc--;
+ neonserv_cmd_nicklist_async1(client, getTextBot(), user, chan, event, (argc ? argv[0] : NULL), syncusers);
+ return;
+ }
struct neonserv_cmd_nicklist_cache *cache = malloc(sizeof(*cache));
if (!cache) {
perror("malloc() failed");
int synced_user = 0;
struct ChanUser *chanuser;
int sort_nicklist[] = {
+ CHANUSERFLAG_OPPED | CHANUSERFLAG_HALFOPPED | CHANUSERFLAG_VOICED,
+ CHANUSERFLAG_OPPED | CHANUSERFLAG_HALFOPPED,
CHANUSERFLAG_OPPED | CHANUSERFLAG_VOICED,
CHANUSERFLAG_OPPED,
+ CHANUSERFLAG_HALFOPPED | CHANUSERFLAG_VOICED,
+ CHANUSERFLAG_HALFOPPED,
CHANUSERFLAG_VOICED,
CHANUSERFLAG_INVISIBLE,
0
if(!stateset) {
if((chanuser->flags & CHANUSERFLAG_INVISIBLE)) statebuf[stateset++] = '<';
if((chanuser->flags & CHANUSERFLAG_OPPED)) statebuf[stateset++] = '@';
+ if((chanuser->flags & CHANUSERFLAG_HALFOPPED)) statebuf[stateset++] = '%';
if((chanuser->flags & CHANUSERFLAG_VOICED)) statebuf[stateset++] = '+';
statebuf[stateset++] = '\0';
}
sprintf(accessbuf, "\00307%d\003", uaccess);
break;
}
- neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess, 0);
+ neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess);
sprintf(accessbuf, "\00309%d\003", uaccess);
synced_user = 1;
} else {
if(db_enfops >= caccess)
event->flags |= CMDFLAG_OPLOG;
uaccess = db_enfops;
- } else if((chanuser->flags & CHANUSERFLAG_VOICED) && db_enfvoice < caccess) {
+ } else if((chanuser->flags & CHANUSERFLAG_VOICED) && (db_enfvoice < caccess || isGodMode(user))) {
if(db_enfvoice >= caccess)
event->flags |= CMDFLAG_OPLOG;
uaccess = db_enfvoice;
sprintf(accessbuf, "\003040\003");
}
if(uaccess && (chanuser->user->flags & USERFLAG_ISAUTHED)) {
- neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess, 1);
+ neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess);
sprintf(accessbuf, "\00309%d\003", uaccess);
synced_user = 1;
} else if(uaccess) {
table_free(table);
if(synced_user) {
if(!syncusers)
- reply(textclient, user, "NS_NICKLIST_SYNC");
+ reply(textclient, user, "NS_NICKLIST_SYNC", db_enfops, db_enfvoice);
else
logEvent(event);
}
}
-static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct UserNode *user, int caccess, int new) {
+static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct UserNode *user, int caccess) {
if(!(user->flags & USERFLAG_ISAUTHED)) return;
MYSQL_RES *res;
MYSQL_ROW row;
userid = atoi(row[0]);
} else {
printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(user->auth));
- userid = (int) mysql_insert_id(mysql_conn);
+ userid = (int) mysql_insert_id(get_mysql_conn());
}
- if(new) {
- //just add
+ //check if already added
+ printf_mysql_query("SELECT `chanuser_access`, `chanuser_id`, `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ //clvl
+ if(atoi(row[0]) >= caccess) return;
+ printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%d' WHERE `chanuser_id` = '%s'", caccess, row[1]);
+ } else
printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chan->channel_id, userid, caccess);
- } else {
- //check if already added
- printf_mysql_query("SELECT `chanuser_access`, `chanuser_id`, `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
- res = mysql_use();
- if ((row = mysql_fetch_row(res)) != NULL) {
- //clvl
- if(atoi(row[0]) >= caccess) return;
- printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%d' WHERE `chanuser_id` = '%s'", caccess, row[1]);
- } else
- printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chan->channel_id, userid, caccess);
- }
}