X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fcmd_neonserv_nicklist.c;h=ca7cfd7ff269192c56b2e8bfcd5b07a555bf58cd;hb=bb5692b9cbff069abbf9573c81e86c3cd2061ceb;hp=1a337c0460b9daf59953581283f75fdd8bcf5f1e;hpb=bb679ff347dbaab788e62d4fe2f8ad6eb0bd910a;p=NeonServV5.git diff --git a/src/cmd_neonserv_nicklist.c b/src/cmd_neonserv_nicklist.c index 1a337c0..ca7cfd7 100644 --- a/src/cmd_neonserv_nicklist.c +++ b/src/cmd_neonserv_nicklist.c @@ -1,5 +1,5 @@ -/* 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 @@ -23,7 +23,7 @@ */ 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; @@ -105,8 +105,12 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli 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 @@ -125,6 +129,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli 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'; } @@ -150,7 +155,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli 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 { @@ -171,7 +176,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli 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; @@ -180,7 +185,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli 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) { @@ -213,7 +218,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli } } -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; @@ -226,18 +231,13 @@ static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(user->auth)); userid = (int) mysql_insert_id(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); - } }