]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/bans.rb
Fix rm methods in bans plugin
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / bans.rb
index 03fe2f343af5c43d7da957a4d5316acee2085712..39f50b0065b1da926ae87325067a0bc7bebfd31e 100644 (file)
@@ -63,7 +63,7 @@ class BansPlugin < Plugin
           next\r
         end\r
         bans.delete(ar)\r
-        chan = ar[1]\r
+        chan = ar[1].downcase\r
         regexp = make_badword_rx(ar[2])\r
         badwords << BadWordAction.new(regexp, action, chan, "0s", "")\r
       }\r
@@ -203,6 +203,7 @@ class BansPlugin < Plugin
 \r
       m.okay\r
     rescue\r
+      error $!\r
       m.reply $!\r
     end\r
   end\r
@@ -218,7 +219,8 @@ class BansPlugin < Plugin
     autos = @registry[:onjoin]\r
     count = autos.length\r
 \r
-    idx = params[:idx].to_i\r
+    idx = nil\r
+    idx = params[:idx].to_i if params[:idx]\r
 \r
     if idx\r
       if idx > count\r
@@ -236,15 +238,20 @@ class BansPlugin < Plugin
           autos.delete rule if rule.host == host\r
         }\r
       rescue\r
+        error $!\r
         m.reply $!\r
       end\r
     end\r
     @registry[:onjoin] = autos\r
-    m.okay if count > autos.length\r
+    if count > autos.length\r
+      m.okay\r
+    else\r
+      m.reply "No matching onjoin rule for #{host} found"\r
+    end\r
   end\r
 \r
   def add_badword(m, params=nil)\r
-    regexp, channel = make_badword_rx(params[:regexp]), params[:channel].dup\r
+    regexp, channel = make_badword_rx(params[:regexp]), params[:channel].downcase.dup\r
     action, timer, reason = params[:action], params[:timer].dup, params[:reason].to_s\r
 \r
     badwords = @registry[:badwords]\r
@@ -266,7 +273,8 @@ class BansPlugin < Plugin
     badwords = @registry[:badwords]\r
     count = badwords.length\r
 \r
-    idx = params[:idx].to_i\r
+    idx = nil\r
+    idx = params[:idx].to_i if params[:idx]\r
 \r
     if idx\r
       if idx > count\r
@@ -282,12 +290,17 @@ class BansPlugin < Plugin
 \r
       badwords.each { |badword|\r
         next unless ['all', badword.channel].include?(channel)\r
+       debug "Removing #{badword.inspect}" if badword == regexp\r
         badwords.delete(badword) if badword == regexp\r
       }\r
     end\r
 \r
     @registry[:badwords] = badwords\r
-    m.okay if count > badwords.length\r
+    if count > badwords.length\r
+      m.okay\r
+    else\r
+      m.reply "No matching badword #{regexp} found"\r
+    end\r
   end\r
 \r
   def add_whitelist(m, params=nil)\r
@@ -301,6 +314,7 @@ class BansPlugin < Plugin
 \r
       m.okay\r
     rescue\r
+      error $!\r
       m.reply $!\r
     end\r
   end\r
@@ -316,7 +330,8 @@ class BansPlugin < Plugin
     wl = @registry[:whitelist]\r
     count = wl.length\r
 \r
-    idx = params[:idx].to_i\r
+    idx = nil\r
+    idx = params[:idx].to_i if params[:idx]\r
 \r
     if idx\r
       if idx > count\r
@@ -334,34 +349,46 @@ class BansPlugin < Plugin
           wl.delete rule if rule.host == host\r
         }\r
       rescue\r
+        error $!\r
         m.reply $!\r
       end\r
     end\r
     @registry[:whitelist] = wl\r
-    m.okay if count > whitelist.length\r
+    if count > whitelist.length\r
+      m.okay\r
+    else\r
+      m.reply "No host matching #{host}"\r
+    end\r
   end\r
 \r
   private\r
   def check_channel(m, strchannel)\r
     begin\r
-      raise "must specify channel if using privmsg" if strchannel.empty? and m.private?\r
-      channel = strchannel.empty? ? m.target : m.server.channel(strchannel)\r
-      raise "I am not in that channel" unless channel.has_user?(@bot)\r
+      raise "must specify channel if using privmsg" if m.private? and not strchannel\r
+      channel = m.server.channel(strchannel) || m.target\r
+      raise "I am not in that channel" unless channel.has_user?(@bot.nick)\r
 \r
       return channel\r
     rescue\r
+      error $!\r
       m.reply $!\r
     end\r
   end\r
 \r
-  def do_cmd(action, nick, channel, timer="0s", reason="")\r
-    if timer.eql? "0s"\r
+  def do_cmd(action, nick, channel, timer_in=nil, reason=nil)\r
+    case timer_in\r
+    when nil\r
       timer = 0\r
+    when /^(\d+)s$/\r
+      timer = $1.to_i\r
+    when /^(\d+)m$/\r
+      timer = $1.to_i * 60\r
+    when /^(\d+)h$/\r
+      timer = $1.to_i * 60 * 60 \r
+    when /^(\d+)d$/\r
+      timer = $1.to_i * 60 * 60 * 24\r
     else\r
-      timer = $1.to_i if timer =~ /^(\d+)s$/\r
-      timer = $1.to_i * 60 if timer =~ /^(\d+)m$/\r
-      timer = $1.to_i * 60 * 60 if timer =~ /^(\d+)h$/\r
-      timer = $1.to_i * 60 * 60 * 24 if timer =~ /^(\d+)d$/\r
+      raise "Wrong time specifications"\r
     end\r
 \r
     case action\r
@@ -402,27 +429,27 @@ plugin.default_auth( 'list', true )
 \r
 plugin.map 'ban :nick :timer :channel', :action => 'ban_user',\r
   :requirements => {:timer => BansPlugin::TimerRe, :channel => BansPlugin::ChannelRe},\r
-  :defaults => {:timer => '0s', :channel => ''},\r
+  :defaults => {:timer => nil, :channel => nil},\r
   :auth_path => 'act'\r
 plugin.map 'unban :nick :channel', :action => 'unban_user',\r
   :requirements => {:channel => BansPlugin::ChannelRe},\r
-  :defaults => {:channel => ''},\r
+  :defaults => {:channel => nil},\r
   :auth_path => 'act'\r
 plugin.map 'kick :nick :channel *reason', :action => 'kick_user',\r
   :requirements => {:channel => BansPlugin::ChannelRe},\r
-  :defaults => {:channel => '', :reason => ''},\r
+  :defaults => {:channel => nil, :reason => 'requested'},\r
   :auth_path => 'act'\r
 plugin.map 'kickban :nick :timer :channel *reason', :action => 'kickban_user',\r
   :requirements => {:timer => BansPlugin::TimerRe, :channel => BansPlugin::ChannelRe},\r
-  :defaults => {:timer => '0s', :channel => '', :reason => ''},\r
+  :defaults => {:timer => nil, :channel => nil, :reason => 'requested'},\r
   :auth_path => 'act'\r
 plugin.map 'silence :nick :timer :channel', :action => 'silence_user',\r
   :requirements => {:timer => BansPlugin::TimerRe, :channel => BansPlugin::ChannelRe},\r
-  :defaults => {:timer => '0s', :channel => ''},\r
+  :defaults => {:timer => nil, :channel => nil},\r
   :auth_path => 'act'\r
 plugin.map 'unsilence :nick :channel', :action => 'unsilence_user',\r
   :requirements => {:channel => BansPlugin::ChannelRe},\r
-  :defaults => {:channel => ''},\r
+  :defaults => {:channel => nil},\r
   :auth_path => 'act'\r
 \r
 plugin.map 'bans add onjoin :host :action :channel *reason', :action => 'add_onjoin',\r