-/* event_neonserv_mode.c - NeonServ v5.4
+/* event_neonserv_mode.c - NeonServ v5.6
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
if(argc)
temp_argv = malloc(argc*sizeof(*temp_argv));
if (!cache || (argc && !temp_argv)) {
- perror("malloc() failed");
+ printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
return;
}
if(argc) {
//someone deopped the bot???
if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
requestOp(client->user, chan);
+ } else if(modes[i] == 'o' && add && isBot(cuser)) {
+ //someone opped a bot
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
+ module_neonbackup_recover_chan(chan);
}
if((modes[i] == 'o' || (modes[i] == 'h' && !with_halfops)) && !(add && isBot(cuser))) {
if(uaccess < db_canop) {
db_canban = -1;
}
if(db_canban == -1) {
- if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed))
+ if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed)) {
+ if(!add) {
+ //check if a user just removed a bot ban
+ for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
+ cuser = chanuser->user;
+ sprintf(usermask, "%s!%s@%s", cuser->nick, cuser->ident, cuser->host);
+ if(!match(carg, usermask) && isBot(cuser)) {
+ skip = 1;
+ break;
+ }
+ }
+ if(skip)
+ break;
+ }
modeBufferSet(modeBuf, !add, modes[i], carg);
+ }
if(uaccess < db_getop)
deop_user = 1;
break;