rbot 0.9.9 → 0.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. data/AUTHORS +8 -0
  2. data/ChangeLog +51 -0
  3. data/INSTALL +4 -0
  4. data/README +1 -0
  5. data/REQUIREMENTS +11 -0
  6. data/TODO +2 -0
  7. data/bin/rbot +21 -2
  8. data/data/rbot/languages/german.lang +4 -1
  9. data/data/rbot/languages/russian.lang +75 -0
  10. data/data/rbot/plugins/autoop.rb +42 -51
  11. data/data/rbot/plugins/bans.rb +205 -0
  12. data/data/rbot/plugins/bash.rb +56 -0
  13. data/data/rbot/plugins/chucknorris.rb +74 -0
  14. data/data/rbot/plugins/chucknorris.yml.gz +0 -0
  15. data/data/rbot/plugins/deepthoughts.rb +95 -0
  16. data/data/rbot/plugins/demauro.rb +95 -0
  17. data/data/rbot/plugins/digg.rb +51 -0
  18. data/data/rbot/plugins/figlet.rb +24 -0
  19. data/data/rbot/plugins/forecast.rb +133 -0
  20. data/data/rbot/plugins/freshmeat.rb +13 -7
  21. data/data/rbot/plugins/google.rb +2 -0
  22. data/data/rbot/plugins/grouphug.rb +36 -0
  23. data/data/rbot/plugins/imdb.rb +92 -0
  24. data/data/rbot/plugins/insult.rb +8 -1
  25. data/data/rbot/plugins/iplookup.rb +227 -0
  26. data/data/rbot/plugins/karma.rb +2 -2
  27. data/data/rbot/plugins/keywords.rb +470 -0
  28. data/data/rbot/plugins/lart.rb +132 -146
  29. data/data/rbot/plugins/lastfm.rb +25 -0
  30. data/data/rbot/plugins/markov.rb +204 -0
  31. data/data/rbot/plugins/math.rb +5 -1
  32. data/data/rbot/plugins/nickserv.rb +71 -11
  33. data/data/rbot/plugins/opme.rb +19 -19
  34. data/data/rbot/plugins/quakeauth.rb +2 -2
  35. data/data/rbot/plugins/quotes.rb +40 -25
  36. data/data/rbot/plugins/remind.rb +1 -1
  37. data/data/rbot/plugins/rot13.rb +2 -2
  38. data/data/rbot/plugins/roulette.rb +49 -15
  39. data/data/rbot/plugins/rss.rb +585 -0
  40. data/data/rbot/plugins/rubyurl.rb +39 -0
  41. data/data/rbot/plugins/seen.rb +2 -1
  42. data/data/rbot/plugins/slashdot.rb +5 -5
  43. data/data/rbot/plugins/spell.rb +5 -0
  44. data/data/rbot/plugins/theyfightcrime.rb +121 -0
  45. data/data/rbot/plugins/threat.rb +55 -0
  46. data/data/rbot/plugins/tinyurl.rb +39 -0
  47. data/data/rbot/plugins/topic.rb +204 -0
  48. data/data/rbot/plugins/urban.rb +71 -0
  49. data/data/rbot/plugins/url.rb +399 -4
  50. data/data/rbot/plugins/wow.rb +123 -0
  51. data/data/rbot/plugins/wserver.rb +1 -1
  52. data/data/rbot/templates/levels.rbot +2 -0
  53. data/lib/rbot/auth.rb +207 -96
  54. data/lib/rbot/channel.rb +5 -5
  55. data/lib/rbot/config.rb +125 -24
  56. data/lib/rbot/dbhash.rb +87 -21
  57. data/lib/rbot/httputil.rb +181 -13
  58. data/lib/rbot/ircbot.rb +525 -179
  59. data/lib/rbot/ircsocket.rb +330 -54
  60. data/lib/rbot/message.rb +66 -23
  61. data/lib/rbot/messagemapper.rb +25 -17
  62. data/lib/rbot/plugins.rb +244 -115
  63. data/lib/rbot/post-clean.rb +1 -0
  64. data/lib/rbot/{post-install.rb → post-config.rb} +1 -1
  65. data/lib/rbot/rbotconfig.rb +29 -14
  66. data/lib/rbot/registry.rb +111 -72
  67. data/lib/rbot/rfc2812.rb +208 -197
  68. data/lib/rbot/timer.rb +4 -0
  69. data/lib/rbot/utils.rb +2 -2
  70. metadata +127 -104
  71. data/data/rbot/plugins/rss.rb.disabled +0 -414
  72. data/lib/rbot/keywords.rb +0 -433
data/AUTHORS CHANGED
@@ -1,14 +1,22 @@
1
1
  Main Author
2
2
  o Tom Gilbert (giblet) <tom@linuxbrit.co.uk>
3
3
 
4
+ Bugbear (heavy-duty framework reworker and backwards-compatibility-breaker)
5
+ o Giuseppe Bilotta (tango_) <giuseppe.bilotta@gmail.com>
6
+
4
7
  Patch contributors
5
8
  o Peter Suschlik (pesu) <peter@zilium.de>
9
+ o Alexey I. Froloff <raorn@altlinux.ru>
10
+ o Ari Pollak <ajp@aripollak.com>
11
+ o Rudolf Polzer <atfield-dt@durchnull.de>
12
+ o Ren� Nussbaumer <public@killerfox.forkbomb.ch>
6
13
 
7
14
  Module contributors
8
15
  o dice.rb - David Dorward (Dorward) <david@david.us-lot.org>
9
16
  o lart.rb - Michael Brailsford <brailsmt@yahoo.com>
10
17
  o stats.rb - Michael Brailsford <brailsmt@yahoo.com>
11
18
  o ri.rb - Michael Brailsford <brailsmt@yahoo.com>
19
+ o bash/threat - Robin Kearney <robin@riviera.org.uk>
12
20
 
13
21
  "Testing" (having fun breaking rbot creatively)
14
22
  o Paul Duncan (pabs) <pabs@pablotron.org>
data/ChangeLog CHANGED
@@ -1,3 +1,54 @@
1
+ Wed Sep 07 20:16:46 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
2
+
3
+ * Fixed quit, broke it last commit
4
+ * Fixed trap() for win32
5
+
6
+ Sun Aug 21 13:29:55 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
7
+
8
+ * fix for bug in quakenet plugin (trac #14)
9
+ * multiple fixes for unescaped bot nick in regexp's (trac #13)
10
+
11
+ Fri Aug 12 20:51:38 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
12
+
13
+ * fix up autoop plugin a bit
14
+
15
+ Thu Aug 11 00:13:11 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
16
+
17
+ * Added two plugins from Robin Kearney <robin@riviera.org.uk>
18
+ * Threat (US threat level :P)
19
+ * bash (bash.org quotes)
20
+
21
+ Thu Aug 11 00:04:31 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
22
+
23
+ * Patches from "Alexey I. Froloff" <raorn@altlinux.ru>
24
+ * Do not use "/home/#{Etc.getlogin}/" for default home directory, use
25
+ "#{Etc.getpwnam(Etc.getlogin).dir}/" instead.
26
+ * Do not try to load same plugin from different locations. Added ability
27
+ to disable system-wide plugins - create PLUGIN.rb.disabled in user's
28
+ plugins directory.
29
+ * For example, to disable freshmeat plugin installed in /usr/share/rbot/plugins/freshmeat.rb one can create empty file ~/.rbot/plugins/freshmeat.rb.disabled
30
+
31
+ Mon Aug 08 23:08:01 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
32
+
33
+ * new markov plugin for random inane chat
34
+
35
+ Sun Aug 07 18:20:24 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
36
+
37
+ * stop insult plugin being used to insult the bot
38
+
39
+ Sun Aug 07 17:53:06 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
40
+
41
+ * workaround for people without YAML::load_file
42
+ * quit message for restart
43
+
44
+ Sun Aug 07 15:11:07 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
45
+
46
+ * fix address_prefix, broken in 0.9.9, reported by ruskie.
47
+
48
+ Sat Aug 06 00:54:34 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
49
+
50
+ * Released 0.9.9
51
+
1
52
  Fri Aug 05 23:55:20 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
2
53
 
3
54
  * few more tweaks preparing to release 0.9.9
data/INSTALL CHANGED
@@ -1,3 +1,5 @@
1
+ Run setup.rb to install the bot.
2
+
1
3
  Just run rbot, it'll ask you for any core information it needs before it can
2
4
  start, after that you can configure everything else online using the config
3
5
  module.
@@ -6,3 +8,5 @@ You can maintain multiple configurations at once. Start rbot with the
6
8
  location you want it to store runtime data in. By default, running rbot
7
9
  uses the ~/.rbot config directory. If you run 'rbot /path/to/foo', then the
8
10
  configuration will be stored to and read from there instead.
11
+
12
+ Instructions for windows in REQUIREMENTS
data/README CHANGED
@@ -42,3 +42,4 @@ owed to RADKade1, as rbot's quote plugin is a direct reimplementation of his
42
42
  Mainly, rbot's fun to play with, although the plugin architecture can be used
43
43
  to write very useful modules
44
44
 
45
+
data/REQUIREMENTS CHANGED
@@ -9,6 +9,8 @@ Core requirements
9
9
  socket
10
10
  uri
11
11
 
12
+ (for debian, you'll also need libopenssl-ruby)
13
+
12
14
  Plugin requirements
13
15
  (these are all optional, if you don't have them, the plugins just won't
14
16
  function)
@@ -32,3 +34,12 @@ spell plugin:
32
34
  ispell(1)
33
35
 
34
36
 
37
+ Running rbot on win32
38
+ =====================
39
+
40
+ here is bdb:
41
+ http://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/ext/bdb-0.5.1-i386-mingw32-1.8.tar.gz
42
+
43
+ and you need the Win32 MinGW version of Ruby:
44
+ http://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/ruby-1.8.4-i386-mingw32.tar.gz
45
+
data/TODO CHANGED
@@ -1,3 +1,5 @@
1
+ o if searchquote (or similar) has 3 results, roundrobin between them as
2
+ asked, don't respond a random one
1
3
  o freeze/thaw factoids (make them readonly) at higher auth
2
4
  o respond to insults
3
5
  o feed back errors from plugins (optional)
data/bin/rbot CHANGED
@@ -21,30 +21,39 @@
21
21
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22
22
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
+ $KCODE = 'u'
25
+
24
26
  $VERBOSE=true
25
27
 
26
28
  require 'etc'
27
29
  require 'getoptlong'
28
30
  require 'fileutils'
29
31
 
30
- $version="0.9.9"
32
+ $version="0.9.10"
31
33
  $opts = Hash.new
32
34
 
33
35
  orig_opts = ARGV.dup
34
36
 
35
37
  opts = GetoptLong.new(
38
+ ["--background", "-b", GetoptLong::NO_ARGUMENT],
36
39
  ["--debug", "-d", GetoptLong::NO_ARGUMENT],
37
40
  ["--help", "-h", GetoptLong::NO_ARGUMENT],
41
+ ["--loglevel", "-l", GetoptLong::REQUIRED_ARGUMENT],
38
42
  ["--trace", "-t", GetoptLong::REQUIRED_ARGUMENT],
39
43
  ["--version", "-v", GetoptLong::NO_ARGUMENT]
40
44
  )
41
45
 
42
46
  $debug = false
47
+ $daemonize = false
48
+
43
49
  opts.each {|opt, arg|
44
50
  $debug = true if(opt == "--debug")
51
+ $daemonize = true if(opt == "--background")
45
52
  $opts[opt.sub(/^-+/, "")] = arg
46
53
  }
47
54
 
55
+ $cl_loglevel = $opts["loglevel"].to_i
56
+
48
57
  if ($opts["trace"])
49
58
  set_trace_func proc { |event, file, line, id, binding, classname|
50
59
  if classname.to_s == $opts["trace"]
@@ -53,10 +62,19 @@ if ($opts["trace"])
53
62
  }
54
63
  end
55
64
 
65
+ defaultlib = File.expand_path(File.dirname($0) + '/../lib')
66
+
67
+ if File.directory? "#{defaultlib}/rbot"
68
+ unless $:.include? defaultlib
69
+ $:.unshift defaultlib
70
+ end
71
+ end
72
+
56
73
  begin
57
74
  require 'rbot/ircbot'
58
75
  rescue LoadError => e
59
- puts "Error: couldn't find the rbot/ircbot module for loading\n - did you install rbot using install.rb?"
76
+ puts "Error: couldn't find the rbot/ircbot module (or one of its dependencies)\n"
77
+ puts e
60
78
  exit 2
61
79
  end
62
80
 
@@ -70,6 +88,7 @@ if ($opts["help"])
70
88
  puts " -h, --help this message"
71
89
  puts " -v, --version version information"
72
90
  puts " -d, --debug enable debug messages"
91
+ puts " -b, --background background (daemonize) the bot"
73
92
  puts "config directory defaults to ~/.rbot"
74
93
  exit 0
75
94
  end
@@ -19,7 +19,8 @@ dunno:
19
19
  ich kann es nicht tun
20
20
  am besten du schaust selber nach
21
21
  dunno_about_X:
22
- ich weiss nichts uber %s
22
+ ich weiss nichts �ber %s
23
+ ich habe nie von %s geh�rt :(
23
24
  was zum Teufel ist %s?
24
25
  insult:
25
26
  %s: Arsch!
@@ -55,12 +56,14 @@ welcome:
55
56
  np :)
56
57
  thanks:
57
58
  Danke :)
59
+ S�ss!
58
60
  juhu :)
59
61
  :-D
60
62
  Prost!
61
63
  thanks_X:
62
64
  %s: danke :)
63
65
  %s: :-D
66
+ %s: s�ss!
64
67
  %s: juhu :)
65
68
  %s: Prost
66
69
  quit:
@@ -0,0 +1,75 @@
1
+ okay:
2
+ ������
3
+ �������
4
+ �� �������
5
+ ��� �������
6
+ �������
7
+ �����
8
+ ����������
9
+ �� ��
10
+ �������
11
+ ��� �������
12
+ dunno:
13
+ ������
14
+ ������� �� ����
15
+ ��� �������
16
+ � �� ���� ��� ������
17
+ ���?
18
+ ���� �� � ����
19
+ �� ���������
20
+ � ��� ��� �����
21
+ � �� �������?
22
+ �� ���!
23
+ dunno_about_X:
24
+ ������ �� %s
25
+ ������� �� ������ %s :(
26
+ %s? � ��� ��� ����� ?
27
+ �� ��� ������ %s?
28
+ insult:
29
+ %s: � ��� ��������!
30
+ %s: :(
31
+ %s: � ��� ��� ������� :(
32
+ %s: ����!
33
+ %s: � ���� ���������
34
+ %s: � �� ���� �������
35
+ hello:
36
+ ������ :)
37
+ ��� ���� :)
38
+ ������
39
+ �� ���!
40
+ ���� ������
41
+ ������ ����
42
+ ������ ����
43
+ ��� ����?
44
+ hello_X:
45
+ ������ %s :)
46
+ %s: ������
47
+ %s: ���� ������
48
+ %s: ������ ����
49
+ hey %s :)
50
+ %s: �� ���!
51
+ %s: ��� �� ���
52
+ ��� ������ %s!
53
+ %s: ���!
54
+ ����������� %s?
55
+ welcome:
56
+ ��� �������
57
+ ������ ���
58
+ ��� ���� �������
59
+ ��� ������
60
+ :)
61
+ thanks:
62
+ ������ :)
63
+ �� ��� ������!
64
+ ������� :)
65
+ =D
66
+ � �� ������!
67
+ thanks_X:
68
+ %s: ������� :)
69
+ %s: �� ��� ������!!
70
+ %s: =D
71
+ %s: ������ :)
72
+ %s: � �� ������
73
+ quit:
74
+ �� ��������
75
+ �� � �����
@@ -1,68 +1,59 @@
1
1
  class AutoOP < Plugin
2
- @@handlers = {
3
- "addop" => "handle_addop",
4
- "rmop" => "handle_rmop",
5
- "listop" => "handle_listop"
6
- }
7
-
8
2
  def help(plugin, topic="")
9
- "perform autoop based on hostmask - usage: addop <hostmask>, rmop <hostmask>, listop"
3
+ "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"
10
4
  end
11
5
 
12
6
  def join(m)
13
- if(!m.address?)
14
- @registry.each { |mask,channels|
15
- if(Irc.netmaskmatch(mask, m.source) && channels.include?(m.channel))
16
- @bot.mode(m.channel, "+o", m.sourcenick)
17
- end
18
- }
19
- end
20
- end
21
-
22
- def privmsg(m)
23
- if(m.private?)
24
- if (!m.params || m.params == "list")
25
- handle_listop(m)
26
- elsif (m.params =~ /^add\s+(.+)$/)
27
- handle_addop(m, $1)
28
- elsif (m.params =~ /^rm\s+(.+)$/)
29
- handle_rmop(m, $1)
30
- end
7
+ return if m.address?
8
+ @registry.each { |mask,channels|
9
+ if(Irc.netmaskmatch(mask, m.source) &&
10
+ (channels.empty? || channels.include?(m.channel)))
11
+ @bot.mode(m.channel, "+o", m.sourcenick)
12
+ return
31
13
  end
14
+ }
32
15
  end
33
16
 
34
- def handle_addop(m, params)
35
- ma = /^(.+?)(\s+(.+))?$/.match(params)
36
- channels = ma[2] ? ma[2] : @bot.config['JOIN_CHANNELS']
37
- if(ma[1] && channels)
38
- @registry[ma[1]] = channels.split(/,\s*/).collect { |x|
39
- x.strip
40
- }
41
- m.okay
42
- else
43
- m.reply @bot.lang.get('dunno')
44
- end
17
+ def add(m, params)
18
+ @registry[params[:mask]] = params[:channels].dup
19
+ m.okay
45
20
  end
46
21
 
47
- def handle_rmop(m, params)
48
- if(!@registry.delete(params))
49
- m.reply @bot.lang.get('dunno')
50
- else
51
- m.okay
52
- end
22
+ def rm(m, params)
23
+ unless @registry.has_key?(params[:mask])
24
+ m.reply @bot.lang.get('dunno')
25
+ return
26
+ end
27
+ if (!params[:channels].empty? && @registry[params[:mask]] != nil)
28
+ params[:channels].each do |c|
29
+ @registry[params[:mask]] = @registry[params[:mask]].reject {|ele| ele =~ /^#{c}$/i}
30
+ end
31
+ if @registry[params[:mask]].empty?
32
+ @registry.delete(params[:mask])
33
+ end
34
+ else
35
+ @registry.delete(params[:mask])
36
+ end
37
+ m.okay
53
38
  end
54
39
 
55
- def handle_listop(m)
56
- if(@registry.length)
57
- @registry.each { |mask,channels|
58
- m.reply "#{mask} in #{channels.join(', ')}"
59
- }
60
- else
61
- m.reply "No entrys"
62
- end
40
+ def list(m, params)
41
+ debug @registry.length
42
+ if(@registry.length > 0)
43
+ @registry.each { |mask,channels|
44
+ m.reply "#{mask} in #{channels.empty? ? 'all channels' : channels.join(', ')}"
45
+ }
46
+ else
47
+ m.reply "No entries"
48
+ end
63
49
  end
64
50
  end
65
51
 
66
52
  plugin = AutoOP.new
67
- plugin.register("autoop")
53
+
54
+ plugin.map 'autoop list', :action => 'list'
55
+ plugin.map 'autoop add :mask *channels', :action => 'add'
56
+ plugin.map 'autoop add :mask', :action => 'add'
57
+ plugin.map 'autoop rm :mask *channels', :action => 'rm'
58
+ plugin.map 'autoop rm :mask', :action => 'rm'
68
59
 
@@ -0,0 +1,205 @@
1
+ # Plugin for the Ruby IRC bot (http://linuxbrit.co.uk/rbot/)
2
+ #
3
+ # Managing kick and bans, automatically removing bans after timeouts, quiet bans, and kickban/quietban based on regexp
4
+ #
5
+ # Commands are little Ruby programs that run in the context of the command plugin. You
6
+ # can create them directly in an IRC channel, and invoke them just like normal rbot plugins.
7
+ #
8
+ # (c) 2006 Marco Gulino <marco@kmobiletools.org>
9
+ # Licensed under GPL V2.
10
+
11
+
12
+ class BansPlugin < Plugin
13
+ def initialize
14
+ super
15
+ if @registry.has_key?(:bans)
16
+ @bansregexps = @registry[:bans]
17
+ else
18
+ @bansregexps = Hash.new
19
+ end
20
+
21
+ if @registry.has_key?(:bansmasks)
22
+ @whitelist = @registry[:bansmasks]
23
+ else
24
+ @whitelist = Hash.new
25
+ end
26
+ end
27
+
28
+
29
+ def save
30
+ @registry[:bans] = @bansregexps
31
+ @registry[:bansmasks] = @whitelist
32
+ end
33
+
34
+
35
+
36
+
37
+ def help(plugin, topic="")
38
+ case topic
39
+ when "kickbans"
40
+ return "bans ban|quietban nick [channel] [timer]: bans|quietbans a nick from the channel for a specified time. bans kick nick [channel] [message]: kicks <nick> from <channel> with kick <message>. bans kickban nick [channel] [timer] [message]: kick+ban, same parameters as before. timer is always specified as <number><unit>, like 3m, 10s, 1h."
41
+ when "whitelist"
42
+ return "bans addwhitelist <mask>: adds <mask> to whitelist (NEVER regexp ban this). bans whitelist: shows current whitelist. bans delwhitelist <key>: delete whitelist entry <key>."
43
+ when "regexpbans"
44
+ return "bans addregexp type [timer] regexp: listens for <regexp>, then do actions depending on <type> (\"quietban\" or \"kickban\", currently). If timer if specified, it removes the ban after timer expires. timer is always specified as <number><unit>, like 3m, 10s, 1h. bans delregexp <key>: remove watching for regexp <key>. bans listregexps: show current regexp watching list."
45
+ else
46
+ return "Topics: \"kickbans\", \"whitelist\", \"regexpbans\""
47
+ end
48
+ # return "Channel administration plugin. bans ban nick [channel] [timer]: bans a nick from the channel for a specified time; bans unban nick [channel]: removes the ban on <nick>; bans quiet nick [channel] [timer] and bans unquiet nick [channel]: same as ban and unban, but uses quiet ban instead. Timer is specified as 6s, 10m, 2h. If channel is not specified will use current channel.\nbans listregexps|addregexp type timeout regexp|delregexp: regexp banning management. Type can be quietban or kickban"
49
+ end
50
+
51
+
52
+ def cmd_setmode(m, nick, channel, smode, time, umode )
53
+ channel=channel != '####currentchannel' ? channel : m.target
54
+ timercnt=/^(\d+)([smh])$/.match(time)[1]
55
+ timeru=/^(\d+)([smh])$/.match(time)[2]
56
+ timer = timercnt.to_i if timeru == "s"
57
+ timer = timercnt.to_i*60 if timeru == "m"
58
+ timer = timercnt.to_i*3600 if timeru == "h"
59
+ if timer > 0 then @bot.timer.add_once(timer, m ) {|m|
60
+ @bot.sendq("MODE #{channel} #{umode} #{nick}")
61
+ # m.reply("Undo mode")
62
+ } end
63
+
64
+ @bot.sendq("MODE #{channel} #{smode} #{nick}")
65
+ # m.reply "ban cmd nick=#{nick} channel=#{channel} timer=#{timercnt} #{timeru} #{timer}"
66
+ end
67
+ def cmd_dokick(m, nick, channel, message)
68
+ channel=channel != '####currentchannel' ? channel : m.target
69
+ @bot.sendq("KICK #{channel} #{nick} :#{message}")
70
+ end
71
+
72
+
73
+ def cmd_kick(m,params)
74
+ cmd_dokick(m,params[:nick], params[:channel], params[:message])
75
+ end
76
+ def cmd_ban(m, params)
77
+ cmd_setmode(m, params[:nick], params[:channel], "+b", params[:timer], "-b")
78
+ end
79
+ def cmd_kickban(m,params)
80
+ cmd_setmode(m, params[:nick], params[:channel], "+b", params[:timer], "-b")
81
+ cmd_dokick(m,params[:nick], params[:channel], params[:message])
82
+ end
83
+
84
+
85
+ def cmd_quietban(m, params)
86
+ cmd_setmode(m, params[:nick], params[:channel], "+q", params[:timer], "-q")
87
+ end
88
+ def cmd_unban(m, params)
89
+ cmd_setmode(m, params[:nick], params[:channel], "-b", "0s", "")
90
+ end
91
+ def cmd_unquiet(m, params)
92
+ cmd_setmode(m, params[:nick], params[:channel], "-q", "0s", "")
93
+ end
94
+
95
+ def listen(m)
96
+ if @bansregexps.length <= 0 then return end
97
+ @whitelist.each_key do |key|
98
+ if Irc.netmaskmatch(@whitelist[key], m.source) then
99
+ return
100
+ end
101
+ next
102
+ end
103
+
104
+ @bansregexps.each_key do |key|
105
+ match=@bansregexps[key][2]
106
+ if m.message =~ /^.*#{match}.*$/i then
107
+ case @bansregexps[key][0]
108
+ when "quietban"
109
+ cmd_setmode(m, m.sourcenick, m.channel, "+q", @bansregexps[key][1], "-q")
110
+ return
111
+ when "kickban"
112
+ cmd_setmode(m, m.sourcenick, m.channel, "+b", @bansregexps[key][1], "-b")
113
+ cmd_dokick(m, m.sourcenick, m.channel, "Autokick")
114
+ return
115
+ end
116
+ end
117
+ next
118
+ end
119
+ end
120
+
121
+ def cmd_addregexp(m, params)
122
+ toadd=Array[ params[:type], params[:timeout], "#{params[:regexp]}" ]
123
+ regsize=@bansregexps.length+1
124
+ # m.reply("Current registry size: #{regsize}")
125
+
126
+ @bansregexps[regsize]=toadd
127
+
128
+ # @bansregexps.store(toadd)
129
+ regsize=@bansregexps.length
130
+ # m.reply("New registry size: #{regsize}")
131
+ m.reply("Done.")
132
+ end
133
+ def cmd_listregexp(m, params)
134
+ if @bansregexps.length == 0
135
+ m.reply("No regexps stored."); return
136
+ end
137
+ @bansregexps.each_key do |key|
138
+ m.reply("Key: #{key}, type: #{@bansregexps[key][0]}, timeout: #{@bansregexps[key][1]}, pattern: #{@bansregexps[key][2]}")
139
+ sleep 1
140
+ next
141
+ end
142
+ end
143
+ def cmd_delregexp(m, params)
144
+ index=params[:index]
145
+ @bansregexps.each_key do |key|
146
+ if ( "#{key}" == "#{index}" ) then
147
+ @bansregexps.delete(key)
148
+ m.reply("Done.")
149
+ return
150
+ end
151
+ next
152
+ end
153
+ m.reply("Key #{index} not found.")
154
+ end
155
+ def cmd_whitelistadd(m, params)
156
+ regsize=@whitelist.length+1
157
+ @whitelist[regsize]=params[:netmask]
158
+ m.reply("Done.")
159
+ end
160
+ def cmd_whitelist(m, params)
161
+ if @whitelist.length == 0
162
+ m.reply("Whitelist is empty."); return
163
+ end
164
+ @whitelist.each_key do |key|
165
+ m.reply("Key: #{key}, netmask: #{@whitelist[key]}")
166
+ sleep 1
167
+ next
168
+ end
169
+ end
170
+ def cmd_whitelistdel(m, params)
171
+ index=params[:index]
172
+ @whitelist.each_key do |key|
173
+ if ( "#{key}" == "#{index}" ) then
174
+ @whitelist.delete(key)
175
+ m.reply("Done.")
176
+ return
177
+ end
178
+ next
179
+ end
180
+ m.reply("Key #{index} not found.")
181
+ end
182
+ end
183
+ plugin = BansPlugin.new
184
+ plugin.register("bans")
185
+
186
+ plugin.map 'bans whitelist', :action => 'cmd_whitelist', :auth => 'bans'
187
+ plugin.map 'bans delwhitelist :index', :action => 'cmd_whitelistdel', :auth => 'bans', :requirements => { :index => /^\d+$/ }
188
+ plugin.map 'bans addwhitelist :netmask', :action => 'cmd_whitelistadd', :auth => 'bans'
189
+ plugin.map 'bans delregexp :index', :action => 'cmd_delregexp', :auth => 'bans', :requirements => { :index => /^\d+$/ }
190
+ plugin.map 'bans addregexp :type :timeout *regexp', :action => 'cmd_addregexp', :auth => 'bans', :requirements => {:timeout => /^\d+[smh]$/, :type => /(quietban)|(kickban)/ }, :defaults => { :timeout => "0s" }
191
+ plugin.map 'bans listregexps', :action => 'cmd_listregexp', :auth => 'bans'
192
+ plugin.map 'bans ban :nick :channel :timer', :action => 'cmd_ban', :auth => 'bans', :requirements => {:timer => /^\d+[smh]$/, :channel => /^#+[^\s]+$/}, :defaults => {:channel => '####currentchannel', :timer => '0s'}
193
+ plugin.map 'bans quiet :nick :channel :timer', :action => 'cmd_quietban', :auth => 'bans', :requirements => {:timer => /^\d+[smh]$/, :channel => /^#+[^\s]+$/}, :defaults => {:channel => '####currentchannel', :timer => '0s'}
194
+
195
+ plugin.map 'bans kick :nick :channel *message', :action => 'cmd_kick', :auth => 'bans', :requirements => {:channel => /^#+[^\s]+$/}, :defaults => {:channel => '####currentchannel', :message => 'Au revoir.'}
196
+ plugin.map 'bans kickban :nick :channel :timer *message', :action => 'cmd_kickban', :auth => 'bans', :requirements => {:channel => /^#+[^\s]+$/, :timer => /^\d+[smh]$/ }, :defaults => {:channel => '####currentchannel', :message => 'Au revoir.', :timer => '0s'}
197
+
198
+
199
+ plugin.map 'bans unban :nick :channel', :action => 'cmd_unban', :auth => 'bans', :requirements => { :channel => /^#+[^\s]+$/}, :defaults => {:channel => '####currentchannel'}
200
+ plugin.map 'bans unquiet :nick :channel', :action => 'cmd_unquiet', :auth => 'bans', :requirements => { :channel => /^#+[^\s]+$/}, :defaults => {:channel => '####currentchannel'}
201
+
202
+ #plugin.map 'admin kick :nick :channel *message', :action => 'cmd_kick', :auth => 'admin'
203
+ #plugin.map 'admin kickban :nick :channel *message', :action => 'cmd_kickban' :auth => 'admin'
204
+ #plugin.register("quietban")
205
+ #plugin.register("kickban")