static USERLIST_CALLBACK(neonserv_event_mode_userlist_lookup);
static void neonserv_event_mode_async1(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *modes, char **argv, int argc);
-static int neonserv_cmd_mode_botwar_detect(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan);
-
-static int botwar_detect_executed;
+static int neonserv_cmd_mode_botwar_detect(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int *botwar_detect_executed);
struct neonserv_event_mode_cache {
struct ClientSocket *client;
static void neonserv_event_mode_async1(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *modes, char **argv, int argc) {
struct ClientSocket *textclient = ((client->flags & SOCKET_FLAG_PREFERRED) ? client : get_prefered_bot(client->botid));
- botwar_detect_executed = 0;
+ int botwar_detect_executed = 0;
MYSQL_ROW row, defaults = NULL;
int i, arg, add = 1, skip = 0;
unsigned int modetype;
caccess = getChannelAccess(cuser, chan);
if(modes[i] == 'o' && !add && cuser == client->user) {
//someone deopped the bot???
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
requestOp(client->user, chan);
}
if((modes[i] == 'o' || (modes[i] == 'h' && !with_halfops)) && !(add && isBot(cuser))) {
deop_user = 1;
}
if(db_canop == -1 && caccess < db_getop) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
break;
}
deop_user = 1;
}
if(db_canhalfop == -1 && caccess < db_gethalfop) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
break;
}
deop_user = 1;
}
if(db_canvoice == -1 && caccess < db_getvoice) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
break;
}
if(isBot(cuser)) {
//don't send this - just try to reop
//reply(textclient, user, "NS_SERVICE_IMMUNE", cuser->nick);
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
break;
}
if(isUserProtected(chan, cuser, user)) {
reply(textclient, user, "NS_USER_PROTECTED", cuser->nick);
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
if(uaccess < db_getop)
deop_user = 1;
db_canban = -1;
}
if(db_canban == -1) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
if(uaccess < db_getop)
deop_user = 1;
}
}
if(skip) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
if(uaccess < db_getop)
deop_user = 1;
if(uaccess < db_getop)
deop_user = 1;
}
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, add, modes[i], modelock_val);
break;
}
deop_user = 1;
}
sprintf(tmp, "%d", *modelock_val);
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, add, modes[i], tmp);
break;
}
if(uaccess < db_getop)
deop_user = 1;
}
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
modeBufferSet(modeBuf, !add, modes[i], carg);
break;
}
break;
}
}
- if(deop_user && !neonserv_cmd_mode_botwar_detect(client, user, chan)) {
+ if(deop_user && !neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed)) {
modeBufferDeop(modeBuf, user->nick);
}
freeModeBuffer(modeBuf);
freeModeNode(modelock);
}
-static int neonserv_cmd_mode_botwar_detect(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan) {
+static int neonserv_cmd_mode_botwar_detect(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int *botwar_detect_executed) {
struct ChanUser *chanuser = getChanUser(user, chan);
if(!chanuser) return 0; //flying super cow?
if(time(0) - chanuser->changeTime > BOTWAR_DETECTION_TIME) {
chanuser->changeTime = time(0);
chanuser->chageEvents = 1;
} else {
- if(!botwar_detect_executed)
+ if(!*botwar_detect_executed)
chanuser->chageEvents++;
- botwar_detect_executed = 1;
+ *botwar_detect_executed = 1;
if(chanuser->chageEvents >= BOTWAR_DETECTION_EVENTS || chanuser->chageEvents < 0) {
//BOTWAR!
chanuser->changeTime = time(0);