X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fautorejoin.rb;h=751966563a6e25e5a329c7776418fe661713fe5e;hb=052217de30c59206d7025b582d4604557a747470;hp=4b6572747c7ef4fbeb15718a531f648d1c1b00bc;hpb=d29df50ddaf32536b105decefb135a0b86ee937f;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/autorejoin.rb b/data/rbot/plugins/autorejoin.rb index 4b657274..75196656 100644 --- a/data/rbot/plugins/autorejoin.rb +++ b/data/rbot/plugins/autorejoin.rb @@ -1,21 +1,65 @@ +#-- vim:sw=2:et +#++ +# +# :title: Autorejoin + class AutoRejoinPlugin < Plugin + Config.register Config::BooleanValue.new('rejoin.insult', + :default => true, + :desc => "Determines if the bot will insult whoever kicked it, after rejoin") + Config.register Config::BooleanValue.new('rejoin.kick', + :default => false, + :desc => "Determines if the bot will kick whoever kicked it, after rejoin") + Config.register Config::ArrayValue.new('rejoin.no_kick_list', + :default => ["owner"], + :desc => "List of botusers that can kick the bot without being kicked") + + + def initialize + super + @should_kick = Hash.new + end + def help(plugin, topic="") "performs an automatic rejoin if the bot is kicked from a channel" end + def kick(m) + password = m.channel.mode[:k].value + if m.address? + if @bot.config['rejoin.kick'] and not @bot.config['rejoin.no_kick_list'].include? m.source.botuser.username + @should_kick[m.channel.downcase] = m.sourcenick + end r = rand(10) if r > 0 - @bot.timer.add_once(r, m) {|m| - @bot.join m.channel - @bot.say m.channel, @bot.lang.get("insult") % m.sourcenick + @bot.timer.add_once(r) { + @bot.join m.channel, password + @bot.say(m.channel, @bot.lang.get("insult") % m.sourcenick) if @bot.config['rejoin.insult'] } else - @bot.join m.channel - @bot.say m.channel, @bot.lang.get("insult") % m.sourcenick + @bot.join m.channel, password + @bot.say(m.channel, @bot.lang.get("insult") % m.sourcenick) if @bot.config['rejoin.insult'] end end end + + def modechange(m) + # if we got opped on a channel we want to kick somebody from, + # do the kicking + + # getting opped on a channel is a channel mode change, so bail out if this + # is not a channel mode change + return unless m.target.kind_of? Channel + # bail out if we are not op, too + return unless @bot.myself.is_op?(m.target) + # bail out if there's nobody to kick + to_kick = @should_kick.delete(m.target.downcase) + return unless to_kick + # kick the evil user that kicked us + @bot.kick m.target, to_kick, _("for kicking me out earlier") + end + end plugin = AutoRejoinPlugin.new