From 884c6da3a62b4ad7c404d82e00d225f0e8538d98 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sun, 11 Sep 2011 23:58:18 +0200 Subject: [PATCH] made cmd_voiceall voicing invisible users --- cmd_neonserv_voiceall.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/cmd_neonserv_voiceall.c b/cmd_neonserv_voiceall.c index a407cb7..7cb01de 100644 --- a/cmd_neonserv_voiceall.c +++ b/cmd_neonserv_voiceall.c @@ -2,14 +2,43 @@ /* * argv[0] (optional) nick mask */ +static USERLIST_CALLBACK(neonserv_cmd_voiceall_userlist_lookup); +static void neonserv_cmd_voiceall_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nickmask); + +struct neonserv_cmd_voiceall_cache { + struct ClientSocket *client, *textclient; + struct UserNode *user; + char *nickmask; +}; static CMD_BIND(neonserv_cmd_voiceall) { + struct neonserv_cmd_voiceall_cache *cache = malloc(sizeof(*cache)); + if (!cache) { + perror("malloc() failed"); + return; + } + cache->client = client; + cache->textclient = getTextBot(); + cache->user = user; + if(argc > 0) { + cache->nickmask = strdup(argv[0]); + } else + cache->nickmask = NULL; + get_userlist_with_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache); +} + +static USERLIST_CALLBACK(neonserv_cmd_voiceall_userlist_lookup) { + struct neonserv_cmd_voiceall_cache *cache = data; + neonserv_cmd_voiceall_async1(cache->client, cache->textclient, cache->user, chan, cache->nickmask); + if(cache->nickmask) + free(cache->nickmask); + free(cache); +} + +static void neonserv_cmd_voiceall_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nickmask) { int done_users = 0; - char *nickmask = NULL; struct ChanUser *chanuser; struct ModeBuffer *modeBuf; - if(argc > 0) - nickmask = argv[0]; modeBuf = initModeBuffer(client, chan); for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { if(nickmask && match(nickmask, chanuser->user->nick)) continue; @@ -18,5 +47,5 @@ static CMD_BIND(neonserv_cmd_voiceall) { done_users++; } freeModeBuffer(modeBuf); - reply(getTextBot(), user, "NS_VOICEALL_DONE", done_users, chan->name); + reply(textclient, user, "NS_VOICEALL_DONE", done_users, chan->name); } -- 2.20.1