X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2FNeonServ.mod%2Fcmd_neonserv_nicklist.c;h=0fad5a84b522ab4ebec2e70f346f60d375828243;hb=caa3238cc43909d4d3a27ff95b77f9ab23f85baf;hp=d8fe67a0bc3c52a1a08db348a55bf92867f53666;hpb=4c45b9e0496cfc36aaf9a316c1047383493224f7;p=NeonServV5.git diff --git a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c index d8fe67a..0fad5a8 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_nicklist.c - NeonServ v5.5 +/* cmd_neonserv_nicklist.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -66,7 +66,7 @@ CMD_BIND(neonserv_cmd_nicklist) { } struct neonserv_cmd_nicklist_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -122,13 +122,14 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli char *content[4]; int userlistlen, i, j; int db_enfops, db_enfvoice; - int caccess, synced_user; + int caccess, synced_user, accessbufpos; struct ChanUser *chanusers[chan->usercount]; struct ChanUser *chanuser; + struct ClientSocket *bot; int chanuser_count; char statebuf[5]; - char accessbuf[9]; - char viscountbuf[5]; + char accessbuf[50]; + char viscountbuf[50]; int uaccess; i = 3; @@ -199,20 +200,20 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli uaccess = db_enfvoice; } else { //fail... - sprintf(accessbuf, "\00307%d\003", uaccess); + accessbufpos = sprintf(accessbuf, "\00307%d\003", uaccess); break; } neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess); - sprintf(accessbuf, "\00309%d\003", uaccess); + accessbufpos = sprintf(accessbuf, "\00309%d\003", uaccess); synced_user = 1; } else { synced_user = 1; - sprintf(accessbuf, "\00307%d\003", uaccess); + accessbufpos = sprintf(accessbuf, "\00307%d\003", uaccess); } } else if((uaccess >= db_enfops && !(chanuser->flags & CHANUSERFLAG_OPPED)) || (uaccess >= db_enfvoice && !(chanuser->flags & CHANUSERFLAG_OPPED_OR_VOICED))) - sprintf(accessbuf, "\00303%d\003", uaccess); + accessbufpos = sprintf(accessbuf, "\00303%d\003", uaccess); else - sprintf(accessbuf, "%d", uaccess); + accessbufpos = sprintf(accessbuf, "%d", uaccess); break; } } @@ -229,24 +230,58 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli uaccess = db_enfvoice; } else { uaccess = 0; - sprintf(accessbuf, "\003040\003"); + accessbufpos = sprintf(accessbuf, "\003040\003"); } if(uaccess && (chanuser->user->flags & USERFLAG_ISAUTHED)) { neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess); - sprintf(accessbuf, "\00309%d\003", uaccess); + accessbufpos = sprintf(accessbuf, "\00309%d\003", uaccess); synced_user = 1; } else if(uaccess) { - sprintf(accessbuf, "\003040\003"); + accessbufpos = sprintf(accessbuf, "\003040\003"); } } else { synced_user = 1; - sprintf(accessbuf, "\003040\003"); + if(((chanuser->flags & CHANUSERFLAG_OPPED) && db_enfops > uaccess) || ((chanuser->flags & CHANUSERFLAG_VOICED) && db_enfvoice > uaccess)) + accessbufpos = sprintf(accessbuf, "\003040\003"); + else + accessbufpos = sprintf(accessbuf, "0"); } } else if(!uaccess) - sprintf(accessbuf, "0"); + accessbufpos = sprintf(accessbuf, "0"); + j = 0; + if(isBot(chanuser->user)) { + //check if bot is secret + for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { + if(bot->user == chanuser->user) + break; + } + if(bot && !(bot->flags & SOCKET_FLAG_SECRET_BOT)) { + if(j) + accessbufpos += sprintf(accessbuf+accessbufpos, ", "); + else { + accessbufpos += sprintf(accessbuf+accessbufpos, " ("); + j = 1; + } + accessbufpos += sprintf(accessbuf+accessbufpos, "%s", get_language_string(user, "NS_NICKLIST_ACCESS_BOT")); + } + } + if(chanuser->user->flags & USERFLAG_ISIRCOP) { + if(j) + accessbufpos += sprintf(accessbuf+accessbufpos, ", "); + else { + accessbufpos += sprintf(accessbuf+accessbufpos, " ("); + j = 1; + } + accessbufpos += sprintf(accessbuf+accessbufpos, "%s", get_language_string(user, "NS_NICKLIST_ACCESS_OPER")); + } + if(j) + accessbufpos += sprintf(accessbuf+accessbufpos, ")"); content[2] = accessbuf; if(flags & NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT) { - sprintf(viscountbuf, "%d", chanuser->visCount); + if(chanuser->flags & CHANUSERFLAG_PARTING) + sprintf(viscountbuf, "%d (\003P\003 %d)", chanuser->visCount, chanuser->old_visCount); + else + sprintf(viscountbuf, "%d", chanuser->visCount); content[3] = viscountbuf; } table_add(table, content);