X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=cmd_neonserv_deopall.c;h=f9ee763b1fb254d193d80e07ff880d4c51e18db4;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=57f01f3561ffc91e7069a62da9662d5021a142fd;hpb=fb1dee61840455a6669c868f30701e963cdfa629;p=NeonServV5.git diff --git a/cmd_neonserv_deopall.c b/cmd_neonserv_deopall.c index 57f01f3..f9ee763 100644 --- a/cmd_neonserv_deopall.c +++ b/cmd_neonserv_deopall.c @@ -1,18 +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) { +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 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); @@ -27,4 +63,6 @@ static CMD_BIND(neonserv_cmd_deopall) { } freeModeBuffer(modeBuf); reply(getTextBot(), user, "NS_DEOPALL_DONE", done_users, chan->name); + if(done_users) + logEvent(event); }