X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=cmd_neonserv_deopall.c;h=f9ee763b1fb254d193d80e07ff880d4c51e18db4;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=8e3c60c41771bf48f6beff371ec3bb0d5913c0e7;hpb=f8689ed5c8d9d877f2b6063d98c28d942c346d44;p=NeonServV5.git diff --git a/cmd_neonserv_deopall.c b/cmd_neonserv_deopall.c index 8e3c60c..f9ee763 100644 --- a/cmd_neonserv_deopall.c +++ b/cmd_neonserv_deopall.c @@ -1,19 +1,54 @@ +#include "cmd_neonserv.h" + /* * argv[0] (optional) nick mask */ +static USERLIST_CALLBACK(neonserv_cmd_deopall_userlist_lookup); +static void neonserv_cmd_deopall_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char **argv, int argc); + +struct neonserv_cmd_deopall_cache { + struct ClientSocket *client, *textclient; + struct UserNode *user; + struct Event *event; + char **argv; + int argc; +}; + +CMD_BIND(neonserv_cmd_deopall) { + struct neonserv_cmd_deopall_cache *cache = malloc(sizeof(*cache)); + if (!cache) { + perror("malloc() failed"); + return; + } + cache->client = client; + cache->textclient = getTextBot(); + cache->user = user; + cache->event = event; + cache->argv = calloc(argc, sizeof(char*)); + int i; + for(i = 0; i < argc; i++) { + cache->argv[i] = strdup(argv[i]); + } + cache->argc = argc; + get_userlist(chan, neonserv_cmd_deopall_userlist_lookup, cache); +} + +static USERLIST_CALLBACK(neonserv_cmd_deopall_userlist_lookup) { + struct neonserv_cmd_deopall_cache *cache = data; + neonserv_cmd_deopall_async1(cache->client, cache->textclient, cache->user, chan, cache->event, cache->argv, cache->argc); + int i; + for(i = 0; i < cache->argc; i++) { + free(cache->argv[i]); + } + free(cache); +} -static CMD_BIND(neonserv_cmd_deopall) { - int i, issuer_access, user_access, done_users; +static void neonserv_cmd_deopall_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char **argv, int argc) { + int issuer_access, victim_access, done_users = 0; char *nickmask = NULL; - struct UserNode *cuser; struct ChanUser *chanuser; struct ModeBuffer *modeBuf; - check_mysql(); - if(!checkChannelAccess(user, chan, "channel_canop", 1, 0)) { - reply(getTextBot(), user, "NS_ACCESS_DENIED"); - return; - } if(argc > 0) nickmask = argv[0]; modeBuf = initModeBuffer(client, chan); @@ -23,9 +58,11 @@ static CMD_BIND(neonserv_cmd_deopall) { victim_access = getChannelAccess(user, chan, 0); if(victim_access >= issuer_access) continue; if(!(chanuser->flags & CHANUSERFLAG_OPPED)) continue; - modeBufferDeop(modeBuf, argv[i]); + modeBufferDeop(modeBuf, chanuser->user->nick); done_users++; } freeModeBuffer(modeBuf); reply(getTextBot(), user, "NS_DEOPALL_DONE", done_users, chan->name); + if(done_users) + logEvent(event); }