]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/insult.rb
plugin(lart): refactor to use registry to persist
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / insult.rb
index f610efc0cb2524866eab2cd7c0654d29dad09efc..c79170c4807238038ee2ac3581d4de391cac804a 100644 (file)
@@ -134,7 +134,7 @@ class InsultPlugin < Plugin
 ]
 
 ##
-# Amounts 
+# Amounts
 ##
 @@amt = [
 "accumulation",
@@ -206,57 +206,56 @@ class InsultPlugin < Plugin
 "cold sores",
 "anal warts",
 ]
-  
+
   def help(plugin, topic="")
-    if(plugin == "insult")
-      return "insult me|<person> => insult you or <person>"
-    elsif(plugin == "msginsult")
-      return "msginsult <nick> => insult <nick> via /msg"
-    else
-      return "insult module topics: msginsult, insult"
-    end
+    return "[msg]insult me|<person> => insult you or <person>. msginsult insults in private"
   end
-  def privmsg(m)
-    suffix=""
-    unless(m.params)
-      m.reply "incorrect usage: " + help(m.plugin)
-      return
-    end
-    msgto = m.channel
-    if(m.plugin =~ /^msginsult$/)
-      prefix = "you are "
-      if (m.params =~ /^#/)
-        prefix += "all "
-      end
-      msgto = m.params
-      suffix = " (from #{m.sourcenick})"
-    elsif(m.params =~ /^me$/)
+
+  def insult(m, params)
+    who = params[:who]
+    who = m.sourcenick if ["me", @bot.nick].include?(who)
+
+    priv = params[:priv] || m.plugin == "msginsult"
+
+    case who
+    when /^#/
+      prefix = "you are all "
+    when m.sourcenick
       prefix = "you are "
     else
-      who = m.params
-      if (who == @bot.nick)
-        who = m.sourcenick
-      end
-      prefix = "#{who} is "
+      prefix = priv ? "you are " : "#{who} is "
     end
+
+    suffix = ""
+
+    if priv
+      msgto = who
+      suffix = " (from #{m.sourcenick})" unless who == m.sourcenick
+    else
+      msgto = m.channel
+    end
+    msgto = m.source.to_s if not msgto
+
     insult = generate_insult
     @bot.say msgto, prefix + insult + suffix
   end
+
   def generate_insult
-    adj = @@adj[rand(@@adj.length)]
+    adj = @@adj.pick_one
     adj2 = ""
     loop do
-      adj2 = @@adj[rand(@@adj.length)]
+      adj2 = @@adj.pick_one
       break if adj2 != adj
     end
-    amt = @@amt[rand(@@amt.length)]
-    noun = @@noun[rand(@@noun.length)]
+    amt = @@amt.pick_one
+    noun = @@noun.pick_one
     start = "a "
-    start = "an " if ['a','e','i','o','u'].include?(adj[0].chr)
+    start = "an " if ['a','e','i','o','u'].include?(adj[0,1])
     "#{start}#{adj} #{amt} of #{adj2} #{noun}"
   end
 end
+
 plugin = InsultPlugin.new
-plugin.register("insult")
-plugin.register("msginsult")
+plugin.map "insult :who [:priv]", :action => :insult, :requirements => { :priv => /in private/ }
+plugin.map "msginsult :who", :action => :insult