summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/rbot/plugins/autoop.rb35
1 files changed, 33 insertions, 2 deletions
diff --git a/data/rbot/plugins/autoop.rb b/data/rbot/plugins/autoop.rb
index e910bcd9..586af835 100644
--- a/data/rbot/plugins/autoop.rb
+++ b/data/rbot/plugins/autoop.rb
@@ -1,10 +1,15 @@
class AutoOP < Plugin
Config.register Config::BooleanValue.new('autoop.on_nick',
:default => true,
- :desc => "Determines if the bot should auto-op when someone changes nick and the new nick matches a listed netmask")
+ :desc => "Determines if the bot should auto-op when someone changes nick " +
+ "and the new nick matches a listed netmask")
def help(plugin, topic="")
- return "perform autoop based on hostmask - usage: add <hostmask> [channel channel ...], rm <hostmask> [channel], list - list current ops. If you don't specify which channels, all channels are assumed"
+ return "perform autoop based on hostmask - usage:"
+ + "add <hostmask> [channel channel ...], rm <hostmask> [channel], "
+ + "list - list current ops, restore [channel] - op anybody that would "
+ + "have been opped if they had just joined. "
+ + "If you don't specify which channels, all channels are assumed"
end
def join(m)
@@ -85,6 +90,31 @@ class AutoOP < Plugin
m.reply "No entries"
end
end
+
+ def restore(m, params)
+ chan = params[:channel]
+ if chan == nil
+ if m.public?
+ chan = m.channel
+ else
+ m.reply _("Either specify a channel to restore, or ask in public")
+ end
+ end
+
+ current_non_ops = @bot.server.channel(chan).users.select { |u|
+ u.is_op?(chan) == nil and u.nick != @bot.nick
+ }
+
+ @registry.each { |mask,channels|
+ if channels.empty? || channels.include?(chan)
+ current_non_ops.each { |victim|
+ if victim.matches?(mask.to_irc_netmask(:server => m.server))
+ @bot.mode(chan, "+o", victim)
+ end
+ }
+ end
+ }
+ end
end
plugin = AutoOP.new
@@ -92,5 +122,6 @@ plugin = AutoOP.new
plugin.map 'autoop list', :action => 'list'
plugin.map 'autoop add :mask [*channels]', :action => 'add'
plugin.map 'autoop rm :mask [*channels]', :action => 'rm'
+plugin.map 'autoop restore [:channel]', :action => 'restore'
plugin.default_auth('*',false)