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.
- data/CHANGELOG +5 -0
- data/README.rdoc +61 -1
- data/bin/mod_spox +1 -7
- data/data/mod_spox/extras/AutoKick.rb +3 -2
- data/data/mod_spox/extras/AutoMode.rb +2 -1
- data/data/mod_spox/extras/AutoRejoin.rb +5 -4
- data/data/mod_spox/extras/Bouncer.rb +243 -131
- data/data/mod_spox/extras/FloodKicker.rb +2 -1
- data/data/mod_spox/extras/Fortune.rb +5 -1
- data/data/mod_spox/extras/Karma.rb +2 -1
- data/data/mod_spox/extras/Logger.rb +11 -9
- data/data/mod_spox/extras/NickServ.rb +2 -1
- data/data/mod_spox/extras/PhpCli.rb +1 -1
- data/data/mod_spox/extras/PhpFuncLookup.rb +2 -1
- data/data/mod_spox/extras/RegexTracker.rb +2 -1
- data/data/mod_spox/extras/Roulette.rb +2 -1
- data/data/mod_spox/extras/Seen.rb +10 -8
- data/data/mod_spox/extras/Topten.rb +2 -1
- data/data/mod_spox/extras/Translate.rb +2 -1
- data/data/mod_spox/extras/Twitter.rb +1 -1
- data/data/mod_spox/plugins/Authenticator.rb +7 -7
- data/data/mod_spox/plugins/Banner.rb +6 -6
- data/data/mod_spox/plugins/BotNick.rb +2 -1
- data/data/mod_spox/plugins/Initializer.rb +4 -4
- data/data/mod_spox/plugins/Joiner.rb +1 -1
- data/data/mod_spox/plugins/PluginLoader.rb +1 -1
- data/data/mod_spox/plugins/Ponger.rb +8 -8
- data/data/mod_spox/plugins/Status.rb +1 -1
- data/lib/mod_spox/Bot.rb +27 -27
- data/lib/mod_spox/BotConfig.rb +17 -21
- data/lib/mod_spox/Filter.rb +29 -0
- data/lib/mod_spox/FilterManager.rb +63 -0
- data/lib/mod_spox/Helpers.rb +120 -14
- data/lib/mod_spox/Loader.rb +1 -1
- data/lib/mod_spox/MessageFactory.rb +10 -2
- data/lib/mod_spox/Pipeline.rb +66 -61
- data/lib/mod_spox/PluginManager.rb +5 -5
- data/lib/mod_spox/PriorityQueue.rb +21 -8
- data/lib/mod_spox/Sockets.rb +6 -6
- data/lib/mod_spox/Timer.rb +3 -3
- data/lib/mod_spox/Version.rb +2 -2
- data/lib/mod_spox/handlers/UserHost.rb +32 -0
- data/lib/mod_spox/handlers/Whois.rb +7 -7
- data/lib/mod_spox/messages/incoming/Pong.rb +11 -2
- data/lib/mod_spox/messages/incoming/UserHost.rb +24 -0
- data/lib/mod_spox/messages/internal/FilterAdd.rb +20 -0
- data/lib/mod_spox/messages/internal/FilterList.rb +18 -0
- data/lib/mod_spox/messages/internal/FilterListing.rb +22 -0
- data/lib/mod_spox/messages/internal/FilterRemove.rb +20 -0
- data/lib/mod_spox/messages/internal/Incoming.rb +15 -0
- data/lib/mod_spox/migrations/006_ignore.rb +21 -0
- data/lib/mod_spox/models/Nick.rb +11 -0
- data/lib/mod_spox/rfc2812.rb +2 -1
- data/lib/mod_spox/rfc2812_full.rb +185 -0
- data/tests/BotHolder.rb +7 -1
- data/tests/handlers/tc_Created.rb +28 -8
- data/tests/handlers/tc_Invite.rb +11 -9
- data/tests/handlers/tc_Join.rb +36 -16
- data/tests/handlers/tc_Kick.rb +27 -6
- data/tests/handlers/tc_Mode.rb +23 -13
- data/tests/handlers/tc_Names.rb +29 -9
- data/tests/handlers/tc_Nick.rb +30 -8
- data/tests/handlers/tc_Part.rb +30 -20
- data/tests/handlers/tc_Ping.rb +32 -19
- data/tests/handlers/tc_Pong.rb +28 -8
- data/tests/handlers/tc_Privmsg.rb +33 -13
- data/tests/handlers/tc_Quit.rb +30 -17
- data/tests/handlers/tc_Who.rb +8 -3
- data/tests/handlers/tc_Whois.rb +7 -3
- data/tests/lib/tc_BotConfig.rb +35 -0
- data/tests/lib/tc_Helpers.rb +139 -0
- data/tests/lib/tc_PriorityQueue.rb +31 -0
- metadata +17 -2
@@ -9,7 +9,8 @@ class FloodKicker
|
|
9
9
|
@watched << c[:channel]
|
10
10
|
end
|
11
11
|
@data = {}
|
12
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
17
|
-
|
18
|
-
@pipeline.hook(self, :
|
19
|
-
@pipeline.hook(self, :
|
20
|
-
@pipeline.hook(self, :
|
21
|
-
@pipeline.hook(self, :
|
22
|
-
@pipeline.hook(self, :
|
23
|
-
@pipeline.hook(self, :
|
24
|
-
@pipeline.hook(self, :
|
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
|
-
|
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
|
-
|
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
|
-
|
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,
|
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
|
-
|
6
|
-
|
7
|
-
@pipeline.hook(self, :
|
8
|
-
@pipeline.hook(self, :
|
9
|
-
@pipeline.hook(self, :
|
10
|
-
@pipeline.hook(self, :
|
11
|
-
@pipeline.hook(self, :
|
12
|
-
@pipeline.hook(self, :
|
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
|
-
|
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
|
-
|
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,
|
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
|
-
|
28
|
-
|
29
|
-
|
30
|
-
@pipeline.hook(self, :
|
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,
|
28
|
-
@pipeline.hook(self, :join_check,
|
29
|
-
@pipeline.hook(self, :who_check,
|
30
|
-
@pipeline.hook(self, :process_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
|
-
|
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
|
-
|
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,
|
10
|
-
@pipeline.hook(self, :send_info,
|
11
|
-
@pipeline.hook(self, :reconnect,
|
12
|
-
@pipeline.hook(self, :reconnect,
|
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,
|
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,
|
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
|
-
|
15
|
-
|
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,
|
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,
|
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
|
-
{
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
|
data/lib/mod_spox/BotConfig.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
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
|