next unless ['all', m.target.downcase].include?(badword.channel)
next unless badword.regexp.match(m.plainmessage)
- do_cmd(badword.action.to_sym, m.source.nick, m.target, badword.timer, badword.reason)
m.reply "bad word detected! #{badword.action} for #{badword.timer} because: #{badword.reason}"
+ do_cmd(badword.action.to_sym, m.source.nick, m.target, badword.timer, badword.reason)
return
}
end
badwords.each { |badword|
next unless ['all', badword.channel].include?(channel)
- debug "Removing #{badword.inspect}" if badword == regexp
- badwords.delete(badword) if badword == regexp
+ debug "Removing #{badword.inspect}" if badword.regexp == regexp
+ badwords.delete(badword) if badword.regexp == regexp
}
end
case action
when :ban
- set_mode(channel, "+b", nick)
- @bot.timer.add_once(timer) { set_mode(channel, "-b", nick) } if timer > 0
+ set_temporary_mode(channel, 'b', nick, timer)
when :unban
set_mode(channel, "-b", nick)
when :kick
do_kick(channel, nick, reason)
when :kickban
- set_mode(channel, "+b", nick)
- @bot.timer.add_once(timer) { set_mode(channel, "-b", nick) } if timer > 0
+ set_temporary_mode(channel, 'b', nick, timer)
do_kick(channel, nick, reason)
when :silence, :quiet
set_mode(channel, "+q", nick)
@bot.mode(channel, mode, host)
end
+ def set_temporary_mode(channel, mode, nick, timer)
+ host = channel.has_user?(nick) ? "*!*@" + channel.users[nick].host : nick
+ @bot.mode(channel, "+#{mode}", host)
+ return if timer == 0
+ @bot.timer.add_once(timer) { @bot.mode(channel, "-#{mode}", host) }
+ end
+
def do_kick(channel, nick, reason="")
@bot.kick(channel, nick, reason)
end