spox-mod_spox 0.3.1 → 0.3.2

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 (73) hide show
  1. data/CHANGELOG +5 -0
  2. data/README.rdoc +61 -1
  3. data/bin/mod_spox +1 -7
  4. data/data/mod_spox/extras/AutoKick.rb +3 -2
  5. data/data/mod_spox/extras/AutoMode.rb +2 -1
  6. data/data/mod_spox/extras/AutoRejoin.rb +5 -4
  7. data/data/mod_spox/extras/Bouncer.rb +243 -131
  8. data/data/mod_spox/extras/FloodKicker.rb +2 -1
  9. data/data/mod_spox/extras/Fortune.rb +5 -1
  10. data/data/mod_spox/extras/Karma.rb +2 -1
  11. data/data/mod_spox/extras/Logger.rb +11 -9
  12. data/data/mod_spox/extras/NickServ.rb +2 -1
  13. data/data/mod_spox/extras/PhpCli.rb +1 -1
  14. data/data/mod_spox/extras/PhpFuncLookup.rb +2 -1
  15. data/data/mod_spox/extras/RegexTracker.rb +2 -1
  16. data/data/mod_spox/extras/Roulette.rb +2 -1
  17. data/data/mod_spox/extras/Seen.rb +10 -8
  18. data/data/mod_spox/extras/Topten.rb +2 -1
  19. data/data/mod_spox/extras/Translate.rb +2 -1
  20. data/data/mod_spox/extras/Twitter.rb +1 -1
  21. data/data/mod_spox/plugins/Authenticator.rb +7 -7
  22. data/data/mod_spox/plugins/Banner.rb +6 -6
  23. data/data/mod_spox/plugins/BotNick.rb +2 -1
  24. data/data/mod_spox/plugins/Initializer.rb +4 -4
  25. data/data/mod_spox/plugins/Joiner.rb +1 -1
  26. data/data/mod_spox/plugins/PluginLoader.rb +1 -1
  27. data/data/mod_spox/plugins/Ponger.rb +8 -8
  28. data/data/mod_spox/plugins/Status.rb +1 -1
  29. data/lib/mod_spox/Bot.rb +27 -27
  30. data/lib/mod_spox/BotConfig.rb +17 -21
  31. data/lib/mod_spox/Filter.rb +29 -0
  32. data/lib/mod_spox/FilterManager.rb +63 -0
  33. data/lib/mod_spox/Helpers.rb +120 -14
  34. data/lib/mod_spox/Loader.rb +1 -1
  35. data/lib/mod_spox/MessageFactory.rb +10 -2
  36. data/lib/mod_spox/Pipeline.rb +66 -61
  37. data/lib/mod_spox/PluginManager.rb +5 -5
  38. data/lib/mod_spox/PriorityQueue.rb +21 -8
  39. data/lib/mod_spox/Sockets.rb +6 -6
  40. data/lib/mod_spox/Timer.rb +3 -3
  41. data/lib/mod_spox/Version.rb +2 -2
  42. data/lib/mod_spox/handlers/UserHost.rb +32 -0
  43. data/lib/mod_spox/handlers/Whois.rb +7 -7
  44. data/lib/mod_spox/messages/incoming/Pong.rb +11 -2
  45. data/lib/mod_spox/messages/incoming/UserHost.rb +24 -0
  46. data/lib/mod_spox/messages/internal/FilterAdd.rb +20 -0
  47. data/lib/mod_spox/messages/internal/FilterList.rb +18 -0
  48. data/lib/mod_spox/messages/internal/FilterListing.rb +22 -0
  49. data/lib/mod_spox/messages/internal/FilterRemove.rb +20 -0
  50. data/lib/mod_spox/messages/internal/Incoming.rb +15 -0
  51. data/lib/mod_spox/migrations/006_ignore.rb +21 -0
  52. data/lib/mod_spox/models/Nick.rb +11 -0
  53. data/lib/mod_spox/rfc2812.rb +2 -1
  54. data/lib/mod_spox/rfc2812_full.rb +185 -0
  55. data/tests/BotHolder.rb +7 -1
  56. data/tests/handlers/tc_Created.rb +28 -8
  57. data/tests/handlers/tc_Invite.rb +11 -9
  58. data/tests/handlers/tc_Join.rb +36 -16
  59. data/tests/handlers/tc_Kick.rb +27 -6
  60. data/tests/handlers/tc_Mode.rb +23 -13
  61. data/tests/handlers/tc_Names.rb +29 -9
  62. data/tests/handlers/tc_Nick.rb +30 -8
  63. data/tests/handlers/tc_Part.rb +30 -20
  64. data/tests/handlers/tc_Ping.rb +32 -19
  65. data/tests/handlers/tc_Pong.rb +28 -8
  66. data/tests/handlers/tc_Privmsg.rb +33 -13
  67. data/tests/handlers/tc_Quit.rb +30 -17
  68. data/tests/handlers/tc_Who.rb +8 -3
  69. data/tests/handlers/tc_Whois.rb +7 -3
  70. data/tests/lib/tc_BotConfig.rb +35 -0
  71. data/tests/lib/tc_Helpers.rb +139 -0
  72. data/tests/lib/tc_PriorityQueue.rb +31 -0
  73. metadata +17 -2
@@ -9,7 +9,8 @@ class FloodKicker
9
9
  @watched << c[:channel]
10
10
  end
11
11
  @data = {}
12
- @pipeline.hook(self, :listener, :Incoming_Privmsg)
12
+ Helpers.load_message(:incoming, :Privmsg)
13
+ @pipeline.hook(self, :listener, ModSpox::Messages::Incoming::Privmsg)
13
14
  add_sig(:sig => 'floodkick enable(\s \S+)?', :method => :add_channel, :group => flood,
14
15
  :desc => 'Add channel to flood kicker', :params => [:channel])
15
16
  add_sig(:sig => 'floodkick disable(\s \S+)?', :method => :remove_channel, :group => flood,
@@ -54,7 +54,11 @@ class Fortune < ModSpox::Plugin
54
54
  f = @db[:fortunes].filter(:id => rand(@ids[:all])).first
55
55
  end
56
56
  if(f)
57
- reply m.replyto, f[:fortune]
57
+ if(f[:fortune].size > 350)
58
+ fortune(m, params)
59
+ else
60
+ reply m.replyto, f[:fortune]
61
+ end
58
62
  else
59
63
  error m.replyto, "Failed to locate fortune"
60
64
  end
@@ -20,7 +20,8 @@ class Karma < ModSpox::Plugin
20
20
  add_sig(:sig => 'antikarma fight (\S+|\(.+?\)) (\S+|\(.+?\))', :method => :antifight, :desc => 'Make two antikarma objects fight', :params => [:thing, :thang])
21
21
  add_sig(:sig => 'karma topten', :method => :topten, :desc => 'Show top ten highest karma objects')
22
22
  add_sig(:sig => 'karma bottomten', :method => :bottomten, :desc => 'Show bottom ten lowest karma objects')
23
- @pipeline.hook(self, :check, :Incoming_Privmsg)
23
+ Helpers.load_message(:incoming, :Privmsg)
24
+ @pipeline.hook(self, :check, ModSpox::Messages::Incoming::Privmsg)
24
25
  @thing_maxlen = 32
25
26
  @karma_regex = /(\(.{1,#@thing_maxlen}?\)|\S{1,#@thing_maxlen})([+-]{2})(?:\s|$)/
26
27
  @eggs = {}
@@ -13,15 +13,17 @@ class ChatLogger < ModSpox::Plugin
13
13
  super
14
14
  PublicLog.create_table unless PublicLog.table_exists?
15
15
  PrivateLog.create_table unless PrivateLog.table_exists?
16
- @pipeline.hook(self, :log_privmsg, :Incoming_Privmsg)
17
- @pipeline.hook(self, :log_join, :Incoming_Join)
18
- @pipeline.hook(self, :log_part, :Incoming_Part)
19
- @pipeline.hook(self, :log_quit, :Incoming_Quit)
20
- @pipeline.hook(self, :log_kick, :Incoming_Kick)
21
- @pipeline.hook(self, :log_mode, :Incoming_Mode)
22
- @pipeline.hook(self, :log_privmsg, :Incoming_Notice)
23
- @pipeline.hook(self, :log_outpriv, :Outgoing_Privmsg)
24
- @pipeline.hook(self, :log_outpriv, :Outgoing_Notice)
16
+ [:Privmsg, :Join, :Part, :Quit, :Kick, :Mode].each{|t|Helpers.load_message(:incoming, t)}
17
+ [:Privmsg, :Notice].each{|t|Helpers.load_message(:outgoing, t)}
18
+ @pipeline.hook(self, :log_privmsg, ModSpox::Messages::Incoming::Privmsg)
19
+ @pipeline.hook(self, :log_join, ModSpox::Messages::Incoming::Join)
20
+ @pipeline.hook(self, :log_part, ModSpox::Messages::Incoming::Part)
21
+ @pipeline.hook(self, :log_quit, ModSpox::Messages::Incoming::Quit)
22
+ @pipeline.hook(self, :log_kick, ModSpox::Messages::Incoming::Kick)
23
+ @pipeline.hook(self, :log_mode, ModSpox::Messages::Incoming::Mode)
24
+ @pipeline.hook(self, :log_privmsg, ModSpox::Messages::Incoming::Notice)
25
+ @pipeline.hook(self, :log_outpriv, ModSpox::Messages::Outgoing::Privmsg)
26
+ @pipeline.hook(self, :log_outpriv, ModSpox::Messages::Outgoing::Notice)
25
27
  add_sig(:sig => 'seen (\S+)', :method => :seen, :desc => 'Report last sighting of nick', :params => [:nick])
26
28
  add_sig(:sig => 'lastspoke (\S+)', :method => :spoke, :desc => 'Report last time nick spoke', :params => [:nick])
27
29
  end
@@ -18,7 +18,8 @@ class NickServ < ModSpox::Plugin
18
18
  unless(@nickserv.is_a?(Hash) && @nickserv.has_key?(:address) && @nickserv.has_key?(:combos))
19
19
  @nickserv = {:address => nil, :combos => {}}
20
20
  end
21
- @pipeline.hook(self, :send_nickserv, :Incoming_Welcome)
21
+ Helpers.load_message(:incoming, :Welcome)
22
+ @pipeline.hook(self, :send_nickserv, ModSpox::Messages::Incoming::Welcome)
22
23
  end
23
24
 
24
25
  # @nickserv = {:address => 'nickserv@blah', :combos => {'nick' => 'pass'}}
@@ -232,7 +232,7 @@ class PhpCli < ModSpox::Plugin
232
232
  foreign_key :nick_id, :null => false
233
233
  primary_key :id
234
234
  end
235
-
235
+ Sequel::Model.plugin :lazy_attributes, :php_function
236
236
  Sequel::Model.plugin :serialization, :marshal, :php_function
237
237
  # serialize(:php_function, :format => :marshal)
238
238
 
@@ -71,7 +71,8 @@ class PhpFuncLookup < ModSpox::Plugin
71
71
  add_sig(:sig => 'pfunc show trigger', :method => :show_trigger, :desc => 'Show current trigger')
72
72
  add_sig(:sig => 'pfunc (add|remove) (\S+)', :method => :set_channels, :group => admin, :desc => 'Add or remove channels from auto-lookups', :params => [:action, :channel])
73
73
  add_sig(:sig => 'pfunc show channels', :method => :list_channels, :desc => 'Show channels with auto lookup enabled')
74
- @pipeline.hook(self, :listen, :Incoming_Privmsg)
74
+ Helpers.load_message(:incoming, :Privmsg)
75
+ @pipeline.hook(self, :listen, ModSpox::Messages::Incoming::Privmsg)
75
76
  populate_classes
76
77
  end
77
78
 
@@ -13,7 +13,8 @@ class RegexTracker < ModSpox::Plugin
13
13
  :params => [:id], :group => track)
14
14
  add_sig(:sig => 'track modify (\d+) (.+)', :method => :modify, :desc => 'Modify regex',
15
15
  :params => [:id, :regex], :group => track)
16
- @pipeline.hook(self, :check, :Incoming_Privmsg)
16
+ Helpers.load_message(:incoming, :Privmsg)
17
+ @pipeline.hook(self, :check, ModSpox::Messages::Incoming::Privmsg)
17
18
  TrackInfo.create_table unless TrackInfo.table_exists?
18
19
  @cache = {}
19
20
  build_cache
@@ -1,4 +1,5 @@
1
1
  require 'mod_spox/messages/internal/PluginRequest'
2
+ require 'mod_spox/messages/internal/PluginResponse'
2
3
 
3
4
  class Roulette < ModSpox::Plugin
4
5
 
@@ -15,7 +16,7 @@ class Roulette < ModSpox::Plugin
15
16
  Game.create_table unless Game.table_exists?
16
17
  Info.create_table unless Info.table_exists?
17
18
  @banner = nil
18
- @pipeline.hook(self, :get_banner, :Internal_PluginResponse)
19
+ @pipeline.hook(self, :get_banner, ModSpox::Messages::Internal::PluginResponse)
19
20
  end
20
21
 
21
22
  # message:: ModSpox::Messages::Incoming::Privmsg
@@ -2,14 +2,16 @@ class Seen < ModSpox::Plugin
2
2
  def initialize(pipe)
3
3
  super
4
4
  SeenLog.create_table unless SeenLog.table_exists?
5
- @pipeline.hook(self, :log_privmsg, :Incoming_Privmsg)
6
- @pipeline.hook(self, :log_join, :Incoming_Join)
7
- @pipeline.hook(self, :log_part, :Incoming_Part)
8
- @pipeline.hook(self, :log_quit, :Incoming_Quit)
9
- @pipeline.hook(self, :log_kick, :Incoming_Kick)
10
- @pipeline.hook(self, :log_privmsg, :Incoming_Notice)
11
- @pipeline.hook(self, :log_outpriv, :Outgoing_Privmsg)
12
- @pipeline.hook(self, :log_outpriv, :Outgoing_Notice)
5
+ [:Privmsg, :Join, :Part, :Quit, :Kick, :Notice].each{|t| Helpers.load_message(:incoming, t)}
6
+ [:Privmsg, :Notice].each{|t|Helpers.load_message(:outgoing, t)}
7
+ @pipeline.hook(self, :log_privmsg, ModSpox::Messages::Incoming::Privmsg)
8
+ @pipeline.hook(self, :log_join, ModSpox::Messages::Incoming::Join)
9
+ @pipeline.hook(self, :log_part, ModSpox::Messages::Incoming::Part)
10
+ @pipeline.hook(self, :log_quit, ModSpox::Messages::Incoming::Quit)
11
+ @pipeline.hook(self, :log_kick, ModSpox::Messages::Incoming::Kick)
12
+ @pipeline.hook(self, :log_privmsg, ModSpox::Messages::Incoming::Notice)
13
+ @pipeline.hook(self, :log_outpriv, ModSpox::Messages::Outgoing::Privmsg)
14
+ @pipeline.hook(self, :log_outpriv, ModSpox::Messages::Outgoing::Notice)
13
15
  add_sig(:sig => 'seen (\S+)', :method => :seen, :desc => 'Report last sighting of nick', :params => [:nick])
14
16
  end
15
17
 
@@ -9,7 +9,8 @@ class Topten < ModSpox::Plugin
9
9
  add_sig(:sig => 'topten ([0-9]{4}\/[0-9]{2}\/[0-9]{2})', :method => :archive, :desc => 'Show topten from given date', :req => 'public', :params => [:date])
10
10
  add_sig(:sig => 'stats ?(\S+)?', :method => :stats, :desc => 'Show stats on nick', :req => 'public', :params => [:nick])
11
11
  add_sig(:sig => 'stats lifetime (\S+)?', :method => :life_stats, :desc => 'Show stat totals for given nick', :req => 'public', :params => [:nick])
12
- @pipeline.hook(self, :log_stats, :Incoming_Privmsg)
12
+ Helpers.load_message(:incoming, :Privmsg)
13
+ @pipeline.hook(self, :log_stats, ModSpox::Messages::Incoming::Privmsg)
13
14
  end
14
15
 
15
16
  def topten(m, p)
@@ -8,7 +8,8 @@ class Translate < ModSpox::Plugin
8
8
  add_sig(:sig => 'autotranslate add ([a-z]{2}) (\S+)', :method => :auto_add, :desc => 'Add a nick to the autotranslate service', :params => [:lang, :nick])
9
9
  add_sig(:sig => 'autotranslate remove (\S+)', :method => :auto_remove, :desc => 'Remove a nick from the autotranslate service', :params => [:nick])
10
10
  add_sig(:sig => 'translate languages', :method => :langs, :desc => 'Show available languages')
11
- @pipeline.hook(self, :listener, :Incoming_Privmsg)
11
+ Helpers.load_message(:incoming, :Privmsg)
12
+ @pipeline.hook(self, :listener, ModSpox::Messages::Incoming::Privmsg)
12
13
  @watchers = {}
13
14
  @cache = {}
14
15
  @allowed = {'zh'=>'Chinese-simplified','zt'=>'Chinese-traditional','en'=>'English','nl'=>'Dutch',
@@ -70,7 +70,7 @@ class Twitter < ModSpox::Plugin
70
70
  add_sig(:sig => 'twitter alias (\S+) (\S+)', :method => :alias_user, :desc => 'Set alias for twitter account', :group => twitter, :params => [:twit, :irc])
71
71
  add_sig(:sig => 'twitter aliases (\S+)', :method => :show_aliases, :desc => 'Show alias for twit', :params => [:twit])
72
72
  add_sig(:sig => 'twitter dealias (\S+)', :method => :remove_alias, :desc => 'Remove alias for twit', :params => [:twit], :group => twitter)
73
- @pipeline.hook(self, :get_timer, :Internal_TimerResponse)
73
+ @pipeline.hook(self, :get_timer, ModSpox::Messages::Internal::TimerResponse)
74
74
  @auth_info = Models::Setting.find_or_create(:name => 'twitter').value
75
75
  @twitter = ModClient.new
76
76
  @search_url = 'http://search.twitter.com/search.json'
@@ -1,6 +1,3 @@
1
- require 'mod_spox/messages/outgoing/Raw'
2
- require 'mod_spox/messages/internal/TimerAdd'
3
-
4
1
  class Authenticator < ModSpox::Plugin
5
2
  def initialize(pipeline)
6
3
  super(pipeline)
@@ -24,10 +21,13 @@ class Authenticator < ModSpox::Plugin
24
21
  @nickserv_nicks = []
25
22
  @nickserv_cache = []
26
23
  populate_nickserv
27
- @pipeline.hook(self, :check_join, :Incoming_Join)
28
- @pipeline.hook(self, :check_nicks, :Incoming_Who)
29
- @pipeline.hook(self, :check_nicks, :Incoming_Names)
30
- @pipeline.hook(self, :check_notice, :Incoming_Notice)
24
+ [:Join, :Who, :Names, :Notice].each{|t| Helpers.load_message(:incoming, t)}
25
+ Helpers.load_message(:outgoing, :Raw)
26
+ Helpers.load_message(:internal, :TimerAdd)
27
+ @pipeline.hook(self, :check_join, ModSpox::Messages::Incoming::Join)
28
+ @pipeline.hook(self, :check_nicks, ModSpox::Messages::Incoming::Who)
29
+ @pipeline.hook(self, :check_nicks, ModSpox::Messages::Incoming::Names)
30
+ @pipeline.hook(self, :check_notice, ModSpox::Messages::Incoming::Notice)
31
31
  end
32
32
 
33
33
  # message:: ModSpox::Messages::Incoming::Privmsg
@@ -24,10 +24,10 @@ class Banner < ModSpox::Plugin
24
24
  add_sig(:sig => 'exempt source (\S+)', :method => :exempt_source, :group => admin, :desc => 'Exempt a source from kicks globally or per channel', :params => [:source, :channel])
25
25
  add_sig(:sig => 'exempt list (nick|mode|source)', :method => :exempt_list, :group => admin, :desc => 'List current exemptions of given type', :params => [:type])
26
26
  add_sig(:sig => 'exempt remove (nick|mode|source) (\d+)', :method => :exempt_remove, :group => admin, :desc => 'Remove exemption from given type', :params => [:type, :id])
27
- @pipeline.hook(self, :mode_check, :Incoming_Mode)
28
- @pipeline.hook(self, :join_check, :Incoming_Join)
29
- @pipeline.hook(self, :who_check, :Incoming_Who)
30
- @pipeline.hook(self, :process_ban, :Banner_Ban)
27
+ @pipeline.hook(self, :mode_check, ModSpox::Messages::Incoming::Mode)
28
+ @pipeline.hook(self, :join_check, ModSpox::Messages::Incoming::Join)
29
+ @pipeline.hook(self, :who_check, ModSpox::Messages::Incoming::Who)
30
+ @pipeline.hook(self, :process_ban, 'Banner::Ban')
31
31
  BanRecord.create_table unless BanRecord.table_exists?
32
32
  BanMask.create_table unless BanMask.table_exists?
33
33
  BanNickExempt.create_table unless BanNickExempt.table_exists?
@@ -110,7 +110,7 @@ class Banner < ModSpox::Plugin
110
110
  record.remaining = record.remaining + time.to_i
111
111
  record.save
112
112
  else
113
- record = BanRecord.new(:nick_id => nick.pk, :bantime => time.to_i, :remaining => time.to_i,
113
+ record = BanRecord.new(:nick_id => nick.pk, :bantime => time.to_i, :remaining => time.to_i, :stamp => ::Time.now,
114
114
  :invite => invite, :channel_id => channel.pk, :mask => mask)
115
115
  record.save
116
116
  end
@@ -472,7 +472,7 @@ class Banner < ModSpox::Plugin
472
472
  many_to_one :nick, :class => ModSpox::Models::Nick
473
473
 
474
474
  def before_create
475
- update(:stamp => Object::Time.now)
475
+ stamp = Object::Time.now
476
476
  end
477
477
  end
478
478
 
@@ -2,7 +2,8 @@ class BotNick < ModSpox::Plugin
2
2
 
3
3
  def initialize(pipeline)
4
4
  super(pipeline)
5
- @pipeline.hook(self, :shutdown, :Internal_Shutdown)
5
+ Helpers.load_message(:internal, :Shutdown)
6
+ @pipeline.hook(self, :shutdown, ModSpox::Messages::Internal::Shutdown)
6
7
  end
7
8
 
8
9
  def shutdown(message)
@@ -6,10 +6,10 @@ class Initializer < ModSpox::Plugin
6
6
 
7
7
  def initialize(pipeline)
8
8
  super(pipeline)
9
- @pipeline.hook(self, :connect, :Internal_BotInitialized)
10
- @pipeline.hook(self, :send_info, :Internal_Connected)
11
- @pipeline.hook(self, :reconnect, :Internal_ConnectionFailed)
12
- @pipeline.hook(self, :reconnect, :Internal_Disconnected)
9
+ @pipeline.hook(self, :connect, ModSpox::Messages::Internal::BotInitialized)
10
+ @pipeline.hook(self, :send_info, ModSpox::Messages::Internal::Connected)
11
+ @pipeline.hook(self, :reconnect, ModSpox::Messages::Internal::ConnectionFailed)
12
+ @pipeline.hook(self, :reconnect, ModSpox::Messages::Internal::Disconnected)
13
13
  @servers = Array.new
14
14
  end
15
15
 
@@ -6,7 +6,7 @@ class Joiner < ModSpox::Plugin
6
6
  super(pipeline)
7
7
  admin = Models::Group.filter(:name => 'admin').first
8
8
  add_sig(:sig => 'join (\S+)', :method => :join, :group => admin, :params => [:channel])
9
- @pipeline.hook(self, :send_who, :Incoming_Join)
9
+ @pipeline.hook(self, :send_who, ModSpox::Messages::Incoming::Join)
10
10
  end
11
11
 
12
12
  # message:: ModSpox::Messages::Incoming::Privmsg
@@ -13,7 +13,7 @@ class PluginLoader < ModSpox::Plugin
13
13
  add_sig(:sig => 'plugins load (\S+)', :method => :load_plugin, :group => admin, :desc => 'Load the given plugin', :params => [:plugin])
14
14
  add_sig(:sig => 'plugins unload (\S+)', :method => :unload_plugin, :group => admin, :desc => 'Unload given plugin', :params => [:plugin])
15
15
  add_sig(:sig => 'plugins reload ?(\S+)?', :method => :reload_plugin, :group => admin, :desc => 'Reload single plugin or all plugins if names not provided', :params => [:plugin])
16
- @pipeline.hook(self, :get_module, :Internal_PluginModuleResponse)
16
+ @pipeline.hook(self, :get_module, ModSpox::Messages::Internal::PluginModuleResponse)
17
17
  @plugins_mod = nil
18
18
  end
19
19
 
@@ -1,8 +1,3 @@
1
- require 'mod_spox/messages/outgoing/Pong'
2
- require 'mod_spox/messages/outgoing/Ping'
3
- require 'mod_spox/messages/internal/Reconnect'
4
- require 'mod_spox/messages/internal/TimerAdd'
5
-
6
1
  class Ponger < ModSpox::Plugin
7
2
 
8
3
  def initialize(pipeline)
@@ -11,10 +6,15 @@ class Ponger < ModSpox::Plugin
11
6
  @last = nil
12
7
  @attempts = 0
13
8
  add_sig(:sig => 'lag', :method => :print_lag, :desc => 'Shows bot\'s current lag to server')
14
- @pipeline.hook(self, :ping, :Incoming_Ping)
15
- @pipeline.hook(self, :get_lag_pong, :Incoming_Pong)
9
+ Helpers.load_message(:incoming, :Ping)
10
+ Helpers.load_message(:incoming, :Pong)
11
+ Helpers.load_message(:internal, :PluginsReady)
12
+ Helpers.load_message(:internal, :Reconnect)
13
+ Helpers.load_message(:internal, :TimerAdd)
14
+ @pipeline.hook(self, :ping, ModSpox::Messages::Incoming::Ping)
15
+ @pipeline.hook(self, :get_lag_pong, ModSpox::Messages::Incoming::Pong)
16
16
  @lock = Mutex.new
17
- @pipeline.hook(self, :check_start_ponger, :Internal_PluginsReady)
17
+ @pipeline.hook(self, :check_start_ponger, ModSpox::Messages::Internal::PluginsReady)
18
18
  @running = false
19
19
  send_lag_ping
20
20
  end
@@ -7,7 +7,7 @@ class Status < ModSpox::Plugin
7
7
  add_sig(:sig => 'status', :method => :status, :desc => 'Show current status')
8
8
  add_sig(:sig => 'version', :method => :version, :desc => 'Show version information')
9
9
  add_sig(:sig => 'VERSION', :method => :version, :desc => 'Show version information')
10
- @pipeline.hook(self, :get_status, :Internal_StatusResponse)
10
+ @pipeline.hook(self, :get_status, ModSpox::Messages::Internal::StatusResponse)
11
11
  @resp = []
12
12
  end
13
13
 
data/lib/mod_spox/Bot.rb CHANGED
@@ -161,33 +161,33 @@ module ModSpox
161
161
 
162
162
  # Adds hooks to pipeline for processing messages
163
163
  def hook_pipeline
164
- {:Outgoing_Admin => :admin, :Outgoing_Away => :away,
165
- :Outgoing_ChannelMode => :channel_mode, :Outgoing_Connect => :connect,
166
- :Outgoing_Die => :die, :Outgoing_Info => :info,
167
- :Outgoing_Invite => :invite, :Outgoing_Ison => :ison,
168
- :Outgoing_Join => :join, :Outgoing_Kick => :kick,
169
- :Outgoing_Kill => :kill, :Outgoing_Links => :links,
170
- :Outgoing_List => :list, :Outgoing_Lusers => :lusers,
171
- :Outgoing_Motd => :motd, :Outgoing_Names => :names,
172
- :Outgoing_Nick => :nick, :Outgoing_Notice => :notice,
173
- :Outgoing_Oper => :oper, :Outgoing_Part => :part,
174
- :Outgoing_Pass => :pass, :Outgoing_Ping => :ping,
175
- :Outgoing_Pong => :pong, :Outgoing_Privmsg => :privmsg,
176
- :Outgoing_Quit => :quit, :Outgoing_Rehash => :rehash,
177
- :Outgoing_ServList => :servlist, :Outgoing_Squery => :squery,
178
- :Outgoing_Squit => :squit, :Outgoing_Stats => :stats,
179
- :Outgoing_Summon => :summon, :Outgoing_Time => :time,
180
- :Outgoing_Topic => :topic, :Outgoing_Trace => :trace,
181
- :Outgoing_Unaway => :unaway, :Outgoing_User => :user,
182
- :Outgoing_UserHost => :userhost, :Outgoing_UserMode => :user_mode,
183
- :Outgoing_Users => :users, :Outgoing_Version => :version,
184
- :Outgoing_Who => :who, :Outgoing_WhoWas => :whowas,
185
- :Outgoing_Whois => :whois, :Internal_EstablishConnection => :bot_connect,
186
- :Internal_StatusRequest => :status, :Internal_ChangeNick => :set_nick,
187
- :Internal_NickRequest => :get_nick, :Internal_HaltBot => :halt,
188
- :Internal_Disconnected => :disconnected, :Internal_TimerClear => :clear_timer,
189
- :Outgoing_Raw => :raw, :Internal_Reconnect => :reconnect,
190
- :Incoming_Join => :check_join, :Incoming_Part => :check_part
164
+ {'ModSpox::Messages::Outgoing::Admin' => :admin, 'ModSpox::Messages::Outgoing::Away' => :away,
165
+ 'ModSpox::Messages::Outgoing::ChannelMode' => :channel_mode, 'ModSpox::Messages::Outgoing::Connect' => :connect,
166
+ 'ModSpox::Messages::Outgoing::Die' => :die, 'ModSpox::Messages::Outgoing::Info' => :info,
167
+ 'ModSpox::Messages::Outgoing::Invite' => :invite, 'ModSpox::Messages::Outgoing::Ison' => :ison,
168
+ 'ModSpox::Messages::Outgoing::Join' => :join, 'ModSpox::Messages::Outgoing::Kick' => :kick,
169
+ 'ModSpox::Messages::Outgoing::Kill' => :kill, 'ModSpox::Messages::Outgoing::Links' => :links,
170
+ 'ModSpox::Messages::Outgoing::List' => :list, 'ModSpox::Messages::Outgoing::Lusers' => :lusers,
171
+ 'ModSpox::Messages::Outgoing::Motd' => :motd, 'ModSpox::Messages::Outgoing::Names' => :names,
172
+ 'ModSpox::Messages::Outgoing::Nick' => :nick, 'ModSpox::Messages::Outgoing::Notice' => :notice,
173
+ 'ModSpox::Messages::Outgoing::Oper' => :oper, 'ModSpox::Messages::Outgoing::Part' => :part,
174
+ 'ModSpox::Messages::Outgoing::Pass' => :pass, 'ModSpox::Messages::Outgoing::Ping' => :ping,
175
+ 'ModSpox::Messages::Outgoing::Pong' => :pong, 'ModSpox::Messages::Outgoing::Privmsg' => :privmsg,
176
+ 'ModSpox::Messages::Outgoing::Quit' => :quit, 'ModSpox::Messages::Outgoing::Rehash' => :rehash,
177
+ 'ModSpox::Messages::Outgoing::ServList' => :servlist, 'ModSpox::Messages::Outgoing::Squery' => :squery,
178
+ 'ModSpox::Messages::Outgoing::Squit' => :squit, 'ModSpox::Messages::Outgoing::Stats' => :stats,
179
+ 'ModSpox::Messages::Outgoing::Summon' => :summon, 'ModSpox::Messages::Outgoing::Time' => :time,
180
+ 'ModSpox::Messages::Outgoing::Topic' => :topic, 'ModSpox::Messages::Outgoing::Trace' => :trace,
181
+ 'ModSpox::Messages::Outgoing::Unaway' => :unaway, 'ModSpox::Messages::Outgoing::User' => :user,
182
+ 'ModSpox::Messages::Outgoing::UserHost' => :userhost, 'ModSpox::Messages::Outgoing::UserMode' => :user_mode,
183
+ 'ModSpox::Messages::Outgoing::Users' => :users, 'ModSpox::Messages::Outgoing::Version' => :version,
184
+ 'ModSpox::Messages::Outgoing::Who' => :who, 'ModSpox::Messages::Outgoing::WhoWas' => :whowas,
185
+ 'ModSpox::Messages::Outgoing::Whois' => :whois, 'ModSpox::Messages::Internal::EstablishConnection' => :bot_connect,
186
+ 'ModSpox::Messages::Internal::StatusRequest' => :status, 'ModSpox::Messages::Internal::ChangeNick' => :set_nick,
187
+ 'ModSpox::Messages::Internal::NickRequest' => :get_nick, 'ModSpox::Messages::Internal::HaltBot' => :halt,
188
+ 'ModSpox::Messages::Internal::Disconnected' => :disconnected, 'ModSpox::Messages::Internal::TimerClear' => :clear_timer,
189
+ 'ModSpox::Messages::Outgoing::Raw' => :raw, 'ModSpox::Messages::Internal::Reconnect' => :reconnect,
190
+ 'ModSpox::Messages::Incoming::Join' => :check_join, 'ModSpox::Messages::Incoming::Part' => :check_part
191
191
  }.each_pair{ |type,method| @pipeline.hook(self, method, type) }
192
192
  end
193
193
 
@@ -19,27 +19,22 @@ module ModSpox
19
19
  # :userpluginpath => path to user's plugin directory
20
20
  # :userconfigpath => path to the user configuration file
21
21
  def BotConfig.populate(createdir=true)
22
- gemname, gem = Gem.source_index.find{|name, spec|
23
- spec.name == 'mod_spox' && spec.version.version = ModSpox.botversion
24
- }
25
- if(gem)
26
- p = gem.full_gem_path
27
- up = ModSpox.mod_spox_path.nil? ? Etc.getpwnam(Etc.getlogin).dir : ModSpox.mod_spox.path
28
- @@config = {:basepath => p,
29
- :libpath => "#{p}/lib/mod_spox",
30
- :datapath => "#{p}/data/mod_spox",
31
- :pluginpath => "#{p}/data/mod_spox/plugins",
32
- :pluginextraspath => "#{p}/data/mod_spox/extras",
33
- :userpath => "#{up}/.mod_spox",
34
- :userpluginpath => "#{up}/.mod_spox/plugins",
35
- :userconfigpath => "#{up}/.mod_spox/config"}
36
- if(createdir)
37
- [@@config[:userpath], @@config[:userpluginpath]].each do |path|
38
- Dir.mkdir(path) unless File.exists?(path)
39
- end
22
+ path = __FILE__.split(File::Separator)
23
+ 3.times{ path.pop }
24
+ path = path.join(File::Separator)
25
+ upath = ModSpox.mod_spox_path.nil? ? Etc.getpwnam(Etc.getlogin).dir : ModSpox.mod_spox_path
26
+ @@config = {:basepath => path,
27
+ :libpath => "#{path}/lib/mod_spox",
28
+ :datapath => "#{path}/data/mod_spox",
29
+ :pluginpath => "#{path}/data/mod_spox/plugins",
30
+ :pluginextraspath => "#{path}/data/mod_spox/extras",
31
+ :userpath => "#{upath}/.mod_spox",
32
+ :userpluginpath => "#{upath}/.mod_spox/plugins",
33
+ :userconfigpath => "#{upath}/.mod_spox/config"}
34
+ if(createdir)
35
+ [@@config[:userpath], @@config[:userpluginpath]].each do |mpath|
36
+ Dir.mkdir(mpath) unless File.exists?(mpath)
40
37
  end
41
- else
42
- raise Exceptions::InstallationError.new('Failed to find mod_spox gem')
43
38
  end
44
39
  end
45
40
 
@@ -47,7 +42,8 @@ module ModSpox
47
42
  # Provides access to important path values
48
43
  def BotConfig.[](name)
49
44
  BotConfig.populate unless @@config
50
- name = name.to_sym unless name.is_a?(Symbol)
45
+ raise ArgumentError.new('Parameter must have a to_s method') unless name.respond_to?(:to_s)
46
+ name = name.to_s.to_sym unless name.is_a?(Symbol)
51
47
  raise Exceptions::UnknownKey.new("Failed to find given key: #{name}") unless @@config.has_key?(name)
52
48
  return @@config[name]
53
49
  end
@@ -0,0 +1,29 @@
1
+ module ModSpox
2
+ class Filter
3
+ # message type filter is applied to
4
+ attr_reader :type
5
+ def initialize(t)
6
+ @type = t
7
+ end
8
+
9
+ # message:: Message from pipeline
10
+ # Applies filters to message
11
+ def filter(message)
12
+ raise ArgumentError.new("Wrong type supplied (Expected: #{@type})") unless Helpers.type_of?(message, @type)
13
+ do_filter(message)
14
+ end
15
+
16
+ protected
17
+
18
+ # message:: Message to be filtered
19
+ # This is where the actual filtering takes place. This
20
+ # is the method to overload!
21
+ # NOTE: Messages can be filtered in any way. For a filter to
22
+ # basically "throw away" a message, simply set the message to
23
+ # nil and it will not be processed or added to the pipeline:
24
+ # *message = nil
25
+ def do_filter(message)
26
+ raise Exceptions::NotImplemented.new
27
+ end
28
+ end
29
+ end