X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=cmd_neonserv_deop.c;h=d0ee75eb6057931d087528c55b38005b490a39b2;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=1261c37321e23bc09f7d5afecaa09df11599d21e;hpb=f8689ed5c8d9d877f2b6063d98c28d942c346d44;p=NeonServV5.git diff --git a/cmd_neonserv_deop.c b/cmd_neonserv_deop.c index 1261c37..d0ee75e 100644 --- a/cmd_neonserv_deop.c +++ b/cmd_neonserv_deop.c @@ -1,18 +1,54 @@ +#include "cmd_neonserv.h" + /* * argv[0-*] nicks */ +static USERLIST_CALLBACK(neonserv_cmd_deop_userlist_lookup); +static void neonserv_cmd_deop_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char **argv, int argc); + +struct neonserv_cmd_deop_cache { + struct ClientSocket *client, *textclient; + struct UserNode *user; + struct Event *event; + char **argv; + int argc; +}; -static CMD_BIND(neonserv_cmd_deop) { - int i, done_users; +CMD_BIND(neonserv_cmd_deop) { + struct neonserv_cmd_deop_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_deop_userlist_lookup, cache); +} + +static USERLIST_CALLBACK(neonserv_cmd_deop_userlist_lookup) { + struct neonserv_cmd_deop_cache *cache = data; + neonserv_cmd_deop_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 void neonserv_cmd_deop_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char **argv, int argc) { + int i, done_users = 0; 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; - } modeBuf = initModeBuffer(client, chan); for(i = 0; i < argc; i++) { cuser = searchUserByNick(argv[i]); @@ -20,11 +56,11 @@ static CMD_BIND(neonserv_cmd_deop) { chanuser = getChanUser(cuser, chan); if(!chanuser) continue; if(isNetworkService(cuser)) { - reply(getTextBot(), user, "NS_SERVICE_IMMUNE", cuser->nick); + reply(textclient, user, "NS_SERVICE_IMMUNE", cuser->nick); continue; } if(isUserProtected(chan, cuser, user)) { - reply(getTextBot(), user, "NS_USER_PROTECTED", cuser->nick); + reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); continue; } done_users++; @@ -33,7 +69,9 @@ static CMD_BIND(neonserv_cmd_deop) { } freeModeBuffer(modeBuf); if(done_users == argc) - reply(getTextBot(), user, "NS_DEOP_DONE", chan->name); + reply(textclient, user, "NS_DEOP_DONE", chan->name); else - reply(getTextBot(), user, "NS_DEOP_FAIL", client->user->nick); + reply(textclient, user, "NS_DEOP_FAIL", client->user->nick); + if(done_users) + logEvent(event); }