char *hostmask;
char *reason = watchdog_conf.punishment_reason;
char mask[IRC_NTOP_MAX_SIZE+3] = { '*', '@', '\0' };
- switch(badword->action) {
- case BADACTION_BAN:
- hostmask = generate_hostmask(user, GENMASK_STRICT_HOST | GENMASK_ANY_IDENT);
- sanitize_ircmask(hostmask);
- if(chan->channel_info) {
- //registered channel
- add_channel_ban(chan->channel_info, hostmask, watchdog->nick, now, now, now + watchdog_conf.ban_duration, reason);
- }
- struct mod_chanmode change;
- mod_chanmode_init(&change);
- change.argc = 1;
- change.args[0].mode = MODE_BAN;
- change.args[0].u.hostmask = hostmask;
- mod_chanmode_announce(watchdog, chan, &change);
- free(hostmask);
-
- case BADACTION_KICK:
- if(GetUserMode(chan, user))
- KickChannelUser(user, chan, watchdog, reason);
- break;
- case BADACTION_KILL:
- DelUser(user, watchdog, 1, reason);
- break;
- case BADACTION_GLINE:
- irc_ntop(mask + 2, sizeof(mask) - 2, &user->ip);
- gline_add(watchdog->nick, mask, watchdog_conf.gline_duration, reason, now, now, 0, 1);
- break;
- default:
- //error?
- break;
- }
+ if(!IsOper(user)) {
+ switch(badword->action) {
+ case BADACTION_BAN:
+ hostmask = generate_hostmask(user, GENMASK_STRICT_HOST | GENMASK_ANY_IDENT);
+ sanitize_ircmask(hostmask);
+ if(chan->channel_info) {
+ //registered channel
+ add_channel_ban(chan->channel_info, hostmask, watchdog->nick, now, now, now + watchdog_conf.ban_duration, reason);
+ }
+ struct mod_chanmode change;
+ mod_chanmode_init(&change);
+ change.argc = 1;
+ change.args[0].mode = MODE_BAN;
+ change.args[0].u.hostmask = hostmask;
+ mod_chanmode_announce(watchdog, chan, &change);
+ free(hostmask);
+
+ case BADACTION_KICK:
+ if(GetUserMode(chan, user))
+ KickChannelUser(user, chan, watchdog, reason);
+ break;
+ case BADACTION_KILL:
+ DelUser(user, watchdog, 1, reason);
+ break;
+ case BADACTION_GLINE:
+ irc_ntop(mask + 2, sizeof(mask) - 2, &user->ip);
+ gline_add(watchdog->nick, mask, watchdog_conf.gline_duration, reason, now, now, 0, 1);
+ break;
+ default:
+ //error?
+ break;
+ }
+ }
}
static void