diff options
author | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-26 21:50:00 +0000 |
---|---|---|
committer | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-26 21:50:00 +0000 |
commit | 5d5d9df1a4825fad5ef045cfc0b21b16e5e2bcc7 (patch) | |
tree | f3814abafc8f1d6c589a29f4ddc89f55e510d493 /rbot/plugins | |
parent | 3ba6917c904f5e664ae78b146f4e394ad805eb96 (diff) |
* Prevent multiple plugin registrations of the same name
* reworking the config system to use yaml for persistence
* reworking the config system key names
* on first startup, the bot will prompt for the essential startup config
* new config module for configuring the bot at runtime
* new config module includes new configurables, for example changing the
bot's language at runtime.
* various other fixes
* New way of mapping plugins to strings, using maps. These may be
familiar to rails users. This is to reduce the amount of regexps plugins
currently need to do to parse arguments. The old method (privmsg) is still
supported, of course. Example plugin now:
def MyPlugin < Plugin
def foo(m, params)
m.reply "bar"
end
def complexfoo(m, params)
m.reply "qux! (#{params[:bar]} #{params[:baz]})"
end
end
plugin = MyPlugin.new
# simple map
plugin.map 'foo'
# this will match "rbot: foo somestring otherstring" and pass the
# parameters as a hash using the names in the map.
plugin.map 'foo :bar :baz', :action => 'complexfoo'
# this means :foo is an optional parameter
plugin.map 'foo :foo', :defaults => {:foo => 'bar'}
# you can also gobble up into an array
plugin.map 'foo *bar' # params[:bar] will be an array of string elements
# and you can validate, here the first param must be a number
plugin.map 'foo :bar', :requirements => {:foo => /^\d+$/}
Diffstat (limited to 'rbot/plugins')
-rw-r--r-- | rbot/plugins/autoop.rb | 4 | ||||
-rw-r--r-- | rbot/plugins/cal.rb | 9 | ||||
-rw-r--r-- | rbot/plugins/eightball.rb | 5 | ||||
-rw-r--r-- | rbot/plugins/karma.rb | 93 | ||||
-rw-r--r-- | rbot/plugins/lart.rb | 8 | ||||
-rw-r--r-- | rbot/plugins/nickserv.rb | 10 | ||||
-rw-r--r-- | rbot/plugins/opmeh.rb | 1 | ||||
-rw-r--r-- | rbot/plugins/quotes.rb | 4 | ||||
-rw-r--r-- | rbot/plugins/remind.rb | 2 | ||||
-rw-r--r-- | rbot/plugins/roulette.rb | 2 |
10 files changed, 70 insertions, 68 deletions
diff --git a/rbot/plugins/autoop.rb b/rbot/plugins/autoop.rb index 094ee343..fdbcf6e0 100644 --- a/rbot/plugins/autoop.rb +++ b/rbot/plugins/autoop.rb @@ -38,7 +38,7 @@ class AutoOP < Plugin @registry[ma[1]] = channels.split(/,\s*/).collect { |x| x.strip } - @bot.okay m.replyto + m.okay else m.reply @bot.lang.get('dunno') end @@ -48,7 +48,7 @@ class AutoOP < Plugin if(!@registry.delete(params)) m.reply @bot.lang.get('dunno') else - @bot.okay m.replyto + m.okay end end diff --git a/rbot/plugins/cal.rb b/rbot/plugins/cal.rb index 1e823194..4f28310b 100644 --- a/rbot/plugins/cal.rb +++ b/rbot/plugins/cal.rb @@ -2,13 +2,14 @@ class CalPlugin < Plugin def help(plugin, topic="") "cal [options] => show current calendar [unix cal options]" end - def privmsg(m) - if m.params && m.params.length > 0 - m.reply Utils.safe_exec("cal", m.params) + def cal(m, params) + if params.has_key?(:month) + m.reply Utils.safe_exec("cal", params[:month], params[:year]) else m.reply Utils.safe_exec("cal") end end end plugin = CalPlugin.new -plugin.register("cal") +plugin.map 'cal :month :year', :requirements => {:month => /^\d+$/, :year => /^\d+$/} +plugin.map 'cal' diff --git a/rbot/plugins/eightball.rb b/rbot/plugins/eightball.rb index 6d123b34..64748490 100644 --- a/rbot/plugins/eightball.rb +++ b/rbot/plugins/eightball.rb @@ -8,11 +8,12 @@ class EightBallPlugin < Plugin def help(plugin, topic="") "magic 8-ball ruby bot module written by novex for nvinfo on #dumber@quakenet, usage:<botname> 8ball will i ever beat this cancer?" end - def privmsg(m) + def eightball(m, params) answers = @answers[rand(@answers.length)] action = "shakes the magic 8-ball... #{answers}" @bot.action m.replyto, action end end plugin = EightBallPlugin.new -plugin.register("8ball") +plugin.map '8ball', :action => 'usage' +plugin.map '8ball *params', :action => 'eightball' diff --git a/rbot/plugins/karma.rb b/rbot/plugins/karma.rb index 1bed175a..148427a5 100644 --- a/rbot/plugins/karma.rb +++ b/rbot/plugins/karma.rb @@ -27,60 +27,59 @@ class KarmaPlugin < Plugin end end + + def stats(m, params) + if (@registry.length) + max = @registry.values.max + min = @registry.values.min + best = @registry.to_hash.index(max) + worst = @registry.to_hash.index(min) + m.reply "#{@registry.length} items. Best: #{best} (#{max}); Worst: #{worst} (#{min})" + end + end + + def karma(m, params) + thing = params[:key] + thing = m.sourcenick unless thing + thing = thing.to_s + karma = @registry[thing] + if(karma != 0) + m.reply "karma for #{thing}: #{@registry[thing]}" + else + m.reply "#{thing} has neutral karma" + end + end + + def help(plugin, topic="") - "karma module: <thing>++/<thing>-- => increase/decrease karma for <thing>, karma for <thing>? => show karma for <thing>. Karma is a community rating system - only in-channel messages can affect karma and you cannot adjust your own." + "karma module: <thing>++/<thing>-- => increase/decrease karma for <thing>, karma for <thing>? => show karma for <thing>, karmastats => show stats. Karma is a community rating system - only in-channel messages can affect karma and you cannot adjust your own." end def listen(m) - if(m.kind_of?(PrivMessage) && m.public?) - # in channel message, the kind we are interested in - if(m.message =~ /(\+\+|--)/) - string = m.message.sub(/\W(--|\+\+)(\(.*?\)|[^(++)(\-\-)\s]+)/, "\2\1") - seen = Hash.new - while(string.sub!(/(\(.*?\)|[^(++)(\-\-)\s]+)(\+\+|--)/, "")) - key = $1 - change = $2 - next if seen[key] - seen[key] = true + return unless m.kind_of?(PrivMessage) && m.public? + # in channel message, the kind we are interested in + if(m.message =~ /(\+\+|--)/) + string = m.message.sub(/\W(--|\+\+)(\(.*?\)|[^(++)(\-\-)\s]+)/, "\2\1") + seen = Hash.new + while(string.sub!(/(\(.*?\)|[^(++)(\-\-)\s]+)(\+\+|--)/, "")) + key = $1 + change = $2 + next if seen[key] + seen[key] = true - key.sub!(/^\((.*)\)$/, "\1") - key.gsub!(/\s+/, " ") - next unless(key.length > 0) - next if(key == m.sourcenick) - if(change == "++") - @registry[key] += 1 - elsif(change == "--") - @registry[key] -= 1 - end + key.sub!(/^\((.*)\)$/, "\1") + key.gsub!(/\s+/, " ") + next unless(key.length > 0) + next if(key == m.sourcenick) + if(change == "++") + @registry[key] += 1 + elsif(change == "--") + @registry[key] -= 1 end end end end - def privmsg(m) - if (m.plugin == "karmastats") - if (@registry.length) - max = @registry.values.max - min = @registry.values.min - best = @registry.to_hash.index(max) - worst = @registry.to_hash.index(min) - m.reply "#{@registry.length} votes. Best: #{best} (#{max}); Worst: #{worst} (#{min})" - return - end - end - unless(m.params) - m.reply "incorrect usage: " + m.plugin - return - end - if(m.params =~ /^(?:for\s+)?(\S+?)\??$/) - thing = $1 - karma = @registry[thing] - if(karma != 0) - m.reply "karma for #{thing}: #{@registry[thing]}" - else - m.reply "#{thing} has neutral karma" - end - end - end end plugin = KarmaPlugin.new -plugin.register("karma") -plugin.register("karmastats") +plugin.map 'karmastats', :action => 'stats' +plugin.map 'karma :key', :defaults => {:key => false} +plugin.map 'karma for :key' diff --git a/rbot/plugins/lart.rb b/rbot/plugins/lart.rb index 385b17c3..1c72c648 100644 --- a/rbot/plugins/lart.rb +++ b/rbot/plugins/lart.rb @@ -130,25 +130,25 @@ class LartPlugin < Plugin #{{{ def handle_addlart(m) @larts << m.params - @bot.okay m.replyto + m.okay end #}}} #{{{ def handle_rmlart(m) @larts.delete m.params - @bot.okay m.replyto + m.okay end #}}} #{{{ def handle_addpraise(m) @praises << m.params - @bot.okay m.replyto + m.okay end #}}} #{{{ def handle_rmpraise(m) @praises.delete m.params - @bot.okay m.replyto + m.okay end #}}} #}}} diff --git a/rbot/plugins/nickserv.rb b/rbot/plugins/nickserv.rb index 94c57e6d..1ef2baf7 100644 --- a/rbot/plugins/nickserv.rb +++ b/rbot/plugins/nickserv.rb @@ -38,23 +38,23 @@ class NickServPlugin < Plugin nick = $1 passwd = $2 @registry[nick] = passwd - @bot.okay m.replyto + m.okay when (/^register$/) passwd = genpasswd @bot.sendmsg "PRIVMSG", "NickServ", "REGISTER " + passwd @registry[@bot.nick] = passwd - @bot.okay m.replyto + m.okay when (/^register\s*(\S*)\s*(.*)$/) passwd = $1 email = $2 @bot.sendmsg "PRIVMSG", "NickServ", "REGISTER " + passwd + " " + email @registry[@bot.nick] = passwd - @bot.okay m.replyto + m.okay when (/^register\s*(.*)\s*$/) passwd = $1 @bot.sendmsg "PRIVMSG", "NickServ", "REGISTER " + passwd @registry[@bot.nick] = passwd - @bot.okay m.replyto + m.okay when (/^listnicks$/) if @bot.auth.allow?("config", m.source, m.replyto) if @registry.length > 0 @@ -68,7 +68,7 @@ class NickServPlugin < Plugin when (/^identify$/) if @registry.has_key?(@bot.nick) @bot.sendmsg "PRIVMSG", "NickServ", "IDENTIFY " + @registry[@bot.nick] - @bot.okay m.replyto + m.okay else m.reply "I dunno the nickserv password for the nickname #{@bot.nick} :(" end diff --git a/rbot/plugins/opmeh.rb b/rbot/plugins/opmeh.rb index eb392513..2776de60 100644 --- a/rbot/plugins/opmeh.rb +++ b/rbot/plugins/opmeh.rb @@ -12,6 +12,7 @@ class OpMehPlugin < Plugin end
target = m.sourcenick
@bot.sendq("MODE #{channel} +o #{target}")
+ m.okay
end
end
plugin = OpMehPlugin.new
diff --git a/rbot/plugins/quotes.rb b/rbot/plugins/quotes.rb index 0e46b495..674a9ed6 100644 --- a/rbot/plugins/quotes.rb +++ b/rbot/plugins/quotes.rb @@ -186,7 +186,7 @@ class QuotePlugin < Plugin num = $2.to_i if(@bot.auth.allow?("delquote", m.source, m.replyto)) if(delquote(channel, num)) - @bot.okay m.replyto + m.okay else m.reply "quote not found!" end @@ -288,7 +288,7 @@ class QuotePlugin < Plugin num = $1.to_i if(@bot.auth.allow?("delquote", m.source, m.replyto)) if(delquote(m.target, num)) - @bot.okay m.replyto + m.okay else m.reply "quote not found!" end diff --git a/rbot/plugins/remind.rb b/rbot/plugins/remind.rb index 402e2d08..5ad980ae 100644 --- a/rbot/plugins/remind.rb +++ b/rbot/plugins/remind.rb @@ -145,7 +145,7 @@ class RemindPlugin < Plugin m.reply "incorrect usage: " + help(m.plugin) return end - @bot.okay m.replyto + m.okay end end plugin = RemindPlugin.new diff --git a/rbot/plugins/roulette.rb b/rbot/plugins/roulette.rb index a3d102f3..c9d585ea 100644 --- a/rbot/plugins/roulette.rb +++ b/rbot/plugins/roulette.rb @@ -30,7 +30,7 @@ class RoulettePlugin < Plugin elsif m.params == "clearstats" if @bot.auth.allow?("config", m.source, m.replyto) @registry.clear - @bot.okay m.replyto + m.okay end return elsif m.params |