spox-mod_spox 0.3.1
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 +174 -0
- data/INSTALL +15 -0
- data/LICENSE +674 -0
- data/README.rdoc +73 -0
- data/bin/mod_spox +112 -0
- data/data/mod_spox/extras/AOLSpeak.rb +257 -0
- data/data/mod_spox/extras/AutoKick.rb +152 -0
- data/data/mod_spox/extras/AutoMode.rb +122 -0
- data/data/mod_spox/extras/AutoRejoin.rb +37 -0
- data/data/mod_spox/extras/Bash.rb +55 -0
- data/data/mod_spox/extras/Bouncer.rb +220 -0
- data/data/mod_spox/extras/Bullshit.rb +19 -0
- data/data/mod_spox/extras/Bytes.rb +11 -0
- data/data/mod_spox/extras/Confess.rb +244 -0
- data/data/mod_spox/extras/DCC.rb +182 -0
- data/data/mod_spox/extras/DevWatch.rb +153 -0
- data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
- data/data/mod_spox/extras/EightBall.rb +33 -0
- data/data/mod_spox/extras/FML.rb +35 -0
- data/data/mod_spox/extras/FloodKicker.rb +129 -0
- data/data/mod_spox/extras/Fortune.rb +76 -0
- data/data/mod_spox/extras/GoogleIt.rb +13 -0
- data/data/mod_spox/extras/Headers.rb +59 -0
- data/data/mod_spox/extras/Karma.rb +302 -0
- data/data/mod_spox/extras/Locator.rb +44 -0
- data/data/mod_spox/extras/Logger.rb +182 -0
- data/data/mod_spox/extras/LolSpeak.rb +21 -0
- data/data/mod_spox/extras/NickServ.rb +84 -0
- data/data/mod_spox/extras/PhpCli.rb +308 -0
- data/data/mod_spox/extras/PhpFuncLookup.rb +297 -0
- data/data/mod_spox/extras/Pinger.rb +11 -0
- data/data/mod_spox/extras/Quotes.rb +79 -0
- data/data/mod_spox/extras/RegexTracker.rb +158 -0
- data/data/mod_spox/extras/Roulette.rb +267 -0
- data/data/mod_spox/extras/RubyCli.rb +93 -0
- data/data/mod_spox/extras/Search.rb +49 -0
- data/data/mod_spox/extras/Seen.rb +150 -0
- data/data/mod_spox/extras/Slashdot.rb +35 -0
- data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
- data/data/mod_spox/extras/Talk.rb +32 -0
- data/data/mod_spox/extras/Topten.rb +103 -0
- data/data/mod_spox/extras/TracTicket.rb +66 -0
- data/data/mod_spox/extras/Translate.rb +132 -0
- data/data/mod_spox/extras/Twitter.rb +458 -0
- data/data/mod_spox/extras/UrbanDictionary.rb +55 -0
- data/data/mod_spox/extras/Weather.rb +55 -0
- data/data/mod_spox/plugins/Authenticator.rb +289 -0
- data/data/mod_spox/plugins/Banner.rb +585 -0
- data/data/mod_spox/plugins/BotNick.rb +18 -0
- data/data/mod_spox/plugins/Helper.rb +49 -0
- data/data/mod_spox/plugins/Initializer.rb +35 -0
- data/data/mod_spox/plugins/Joiner.rb +23 -0
- data/data/mod_spox/plugins/Nicker.rb +14 -0
- data/data/mod_spox/plugins/Parter.rb +23 -0
- data/data/mod_spox/plugins/Permissions.rb +60 -0
- data/data/mod_spox/plugins/PluginLoader.rb +180 -0
- data/data/mod_spox/plugins/Ponger.rb +70 -0
- data/data/mod_spox/plugins/PoolConfig.rb +52 -0
- data/data/mod_spox/plugins/Quitter.rb +15 -0
- data/data/mod_spox/plugins/Servers.rb +57 -0
- data/data/mod_spox/plugins/Status.rb +31 -0
- data/data/mod_spox/plugins/Triggers.rb +85 -0
- data/lib/mod_spox/BaseConfig.rb +51 -0
- data/lib/mod_spox/Bot.rb +604 -0
- data/lib/mod_spox/BotConfig.rb +65 -0
- data/lib/mod_spox/ConfigurationWizard.rb +180 -0
- data/lib/mod_spox/Database.rb +51 -0
- data/lib/mod_spox/Exceptions.rb +84 -0
- data/lib/mod_spox/Helpers.rb +122 -0
- data/lib/mod_spox/Loader.rb +60 -0
- data/lib/mod_spox/Logger.rb +37 -0
- data/lib/mod_spox/MessageFactory.rb +112 -0
- data/lib/mod_spox/Pipeline.rb +207 -0
- data/lib/mod_spox/Plugin.rb +97 -0
- data/lib/mod_spox/PluginHolder.rb +22 -0
- data/lib/mod_spox/PluginManager.rb +257 -0
- data/lib/mod_spox/PriorityQueue.rb +69 -0
- data/lib/mod_spox/Socket.rb +201 -0
- data/lib/mod_spox/Sockets.rb +226 -0
- data/lib/mod_spox/Timer.rb +60 -0
- data/lib/mod_spox/Version.rb +14 -0
- data/lib/mod_spox/handlers/BadNick.rb +19 -0
- data/lib/mod_spox/handlers/Bounce.rb +24 -0
- data/lib/mod_spox/handlers/Created.rb +27 -0
- data/lib/mod_spox/handlers/Handler.rb +39 -0
- data/lib/mod_spox/handlers/Invite.rb +28 -0
- data/lib/mod_spox/handlers/Join.rb +38 -0
- data/lib/mod_spox/handlers/Kick.rb +36 -0
- data/lib/mod_spox/handlers/LuserChannels.rb +19 -0
- data/lib/mod_spox/handlers/LuserClient.rb +18 -0
- data/lib/mod_spox/handlers/LuserMe.rb +16 -0
- data/lib/mod_spox/handlers/LuserOp.rb +19 -0
- data/lib/mod_spox/handlers/LuserUnknown.rb +19 -0
- data/lib/mod_spox/handlers/Mode.rb +62 -0
- data/lib/mod_spox/handlers/Motd.rb +38 -0
- data/lib/mod_spox/handlers/MyInfo.rb +24 -0
- data/lib/mod_spox/handlers/Names.rb +86 -0
- data/lib/mod_spox/handlers/Nick.rb +50 -0
- data/lib/mod_spox/handlers/NickInUse.rb +19 -0
- data/lib/mod_spox/handlers/Notice.rb +35 -0
- data/lib/mod_spox/handlers/Part.rb +39 -0
- data/lib/mod_spox/handlers/Ping.rb +25 -0
- data/lib/mod_spox/handlers/Pong.rb +23 -0
- data/lib/mod_spox/handlers/Privmsg.rb +39 -0
- data/lib/mod_spox/handlers/Quit.rb +29 -0
- data/lib/mod_spox/handlers/Topic.rb +38 -0
- data/lib/mod_spox/handlers/Welcome.rb +30 -0
- data/lib/mod_spox/handlers/Who.rb +83 -0
- data/lib/mod_spox/handlers/Whois.rb +117 -0
- data/lib/mod_spox/handlers/YourHost.rb +20 -0
- data/lib/mod_spox/messages/Messages.rb +6 -0
- data/lib/mod_spox/messages/incoming/BadNick.rb +16 -0
- data/lib/mod_spox/messages/incoming/Bounce.rb +18 -0
- data/lib/mod_spox/messages/incoming/Created.rb +15 -0
- data/lib/mod_spox/messages/incoming/Invite.rb +21 -0
- data/lib/mod_spox/messages/incoming/Join.rb +19 -0
- data/lib/mod_spox/messages/incoming/Kick.rb +26 -0
- data/lib/mod_spox/messages/incoming/LuserChannels.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserClient.rb +24 -0
- data/lib/mod_spox/messages/incoming/LuserMe.rb +18 -0
- data/lib/mod_spox/messages/incoming/LuserOp.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserUnknown.rb +15 -0
- data/lib/mod_spox/messages/incoming/Message.rb +22 -0
- data/lib/mod_spox/messages/incoming/Mode.rb +42 -0
- data/lib/mod_spox/messages/incoming/Motd.rb +18 -0
- data/lib/mod_spox/messages/incoming/MyInfo.rb +24 -0
- data/lib/mod_spox/messages/incoming/Names.rb +24 -0
- data/lib/mod_spox/messages/incoming/Nick.rb +26 -0
- data/lib/mod_spox/messages/incoming/NickInUse.rb +15 -0
- data/lib/mod_spox/messages/incoming/Notice.rb +9 -0
- data/lib/mod_spox/messages/incoming/Part.rb +21 -0
- data/lib/mod_spox/messages/incoming/Ping.rb +18 -0
- data/lib/mod_spox/messages/incoming/Pong.rb +9 -0
- data/lib/mod_spox/messages/incoming/Privmsg.rb +90 -0
- data/lib/mod_spox/messages/incoming/Quit.rb +18 -0
- data/lib/mod_spox/messages/incoming/Topic.rb +21 -0
- data/lib/mod_spox/messages/incoming/TopicInfo.rb +21 -0
- data/lib/mod_spox/messages/incoming/Welcome.rb +27 -0
- data/lib/mod_spox/messages/incoming/Who.rb +18 -0
- data/lib/mod_spox/messages/incoming/Whois.rb +49 -0
- data/lib/mod_spox/messages/incoming/YourHost.rb +18 -0
- data/lib/mod_spox/messages/internal/BotInitialized.rb +11 -0
- data/lib/mod_spox/messages/internal/ChangeNick.rb +15 -0
- data/lib/mod_spox/messages/internal/Connected.rb +20 -0
- data/lib/mod_spox/messages/internal/ConnectionFailed.rb +23 -0
- data/lib/mod_spox/messages/internal/DCCListener.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCRequest.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCSocket.rb +19 -0
- data/lib/mod_spox/messages/internal/Disconnected.rb +8 -0
- data/lib/mod_spox/messages/internal/Disconnecting.rb +8 -0
- data/lib/mod_spox/messages/internal/EstablishConnection.rb +22 -0
- data/lib/mod_spox/messages/internal/HaltBot.rb +8 -0
- data/lib/mod_spox/messages/internal/NickRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/NickResponse.rb +15 -0
- data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +17 -0
- data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +14 -0
- data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginReload.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginRequest.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginResponse.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginsReady.rb +10 -0
- data/lib/mod_spox/messages/internal/QueueSocket.rb +8 -0
- data/lib/mod_spox/messages/internal/Reconnect.rb +8 -0
- data/lib/mod_spox/messages/internal/Request.rb +15 -0
- data/lib/mod_spox/messages/internal/Response.rb +15 -0
- data/lib/mod_spox/messages/internal/Shutdown.rb +8 -0
- data/lib/mod_spox/messages/internal/SignaturesUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/StatusRequest.rb +10 -0
- data/lib/mod_spox/messages/internal/StatusResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/TimerAdd.rb +36 -0
- data/lib/mod_spox/messages/internal/TimerClear.rb +16 -0
- data/lib/mod_spox/messages/internal/TimerRemove.rb +23 -0
- data/lib/mod_spox/messages/internal/TimerResponse.rb +34 -0
- data/lib/mod_spox/messages/internal/TriggersUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/UnqueueSocket.rb +8 -0
- data/lib/mod_spox/messages/outgoing/Admin.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Away.rb +11 -0
- data/lib/mod_spox/messages/outgoing/ChannelMode.rb +25 -0
- data/lib/mod_spox/messages/outgoing/Connect.rb +24 -0
- data/lib/mod_spox/messages/outgoing/Die.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Info.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Invite.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Ison.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Join.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Kick.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Kill.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Links.rb +19 -0
- data/lib/mod_spox/messages/outgoing/List.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Lusers.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Motd.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Names.rb +20 -0
- data/lib/mod_spox/messages/outgoing/Nick.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Notice.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Oper.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Part.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Pass.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Ping.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Pong.rb +17 -0
- data/lib/mod_spox/messages/outgoing/Privmsg.rb +43 -0
- data/lib/mod_spox/messages/outgoing/Quit.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Rehash.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Restart.rb +9 -0
- data/lib/mod_spox/messages/outgoing/ServList.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Simple.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Squery.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Squit.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Stats.rb +18 -0
- data/lib/mod_spox/messages/outgoing/Summon.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Time.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Topic.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Trace.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Unaway.rb +9 -0
- data/lib/mod_spox/messages/outgoing/User.rb +23 -0
- data/lib/mod_spox/messages/outgoing/UserHost.rb +15 -0
- data/lib/mod_spox/messages/outgoing/UserMode.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Users.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Version.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Who.rb +23 -0
- data/lib/mod_spox/messages/outgoing/WhoWas.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Whois.rb +19 -0
- data/lib/mod_spox/migrations/001_initialize_models.rb +115 -0
- data/lib/mod_spox/migrations/002_persistent_sigs.rb +14 -0
- data/lib/mod_spox/migrations/003_auth_restructure.rb +31 -0
- data/lib/mod_spox/migrations/004_mode_index_fix.rb +18 -0
- data/lib/mod_spox/migrations/005_nick_mode_nopark.rb +18 -0
- data/lib/mod_spox/models/Auth.rb +65 -0
- data/lib/mod_spox/models/AuthMask.rb +13 -0
- data/lib/mod_spox/models/Channel.rb +89 -0
- data/lib/mod_spox/models/Config.rb +30 -0
- data/lib/mod_spox/models/Group.rb +30 -0
- data/lib/mod_spox/models/Models.rb +4 -0
- data/lib/mod_spox/models/Nick.rb +195 -0
- data/lib/mod_spox/models/NickMode.rb +32 -0
- data/lib/mod_spox/models/Server.rb +27 -0
- data/lib/mod_spox/models/Setting.rb +52 -0
- data/lib/mod_spox/models/Signature.rb +52 -0
- data/lib/mod_spox/models/Trigger.rb +9 -0
- data/lib/mod_spox/rfc2812.rb +49 -0
- data/populate_gemspec.rb +15 -0
- data/tests/BotHolder.rb +24 -0
- data/tests/handlers/tc_BadNick.rb +21 -0
- data/tests/handlers/tc_Created.rb +24 -0
- data/tests/handlers/tc_Invite.rb +50 -0
- data/tests/handlers/tc_Join.rb +33 -0
- data/tests/handlers/tc_Kick.rb +32 -0
- data/tests/handlers/tc_Mode.rb +85 -0
- data/tests/handlers/tc_Names.rb +35 -0
- data/tests/handlers/tc_Nick.rb +55 -0
- data/tests/handlers/tc_Part.rb +44 -0
- data/tests/handlers/tc_Ping.rb +40 -0
- data/tests/handlers/tc_Pong.rb +28 -0
- data/tests/handlers/tc_Privmsg.rb +85 -0
- data/tests/handlers/tc_Quit.rb +40 -0
- data/tests/handlers/tc_Who.rb +50 -0
- data/tests/handlers/tc_Whois.rb +61 -0
- data/tests/models/tc_Auth.rb +39 -0
- data/tests/models/tc_Channel.rb +52 -0
- data/tests/models/tc_Config.rb +19 -0
- data/tests/models/tc_Nick.rb +144 -0
- data/tests/models/tc_NickMode.rb +40 -0
- data/tests/models/tc_Setting.rb +21 -0
- data/tests/models/tc_Signature.rb +14 -0
- data/tests/run_tests.rb +6 -0
- metadata +362 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Kick'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Kick < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:KICK] = self
|
8
|
+
end
|
9
|
+
# :spax!~spox@host KICK #m spox :foo
|
10
|
+
def process(string)
|
11
|
+
orig = string.dup
|
12
|
+
string = string.dup
|
13
|
+
begin
|
14
|
+
string.slice!(0)
|
15
|
+
source = string.slice!(0..string.index(' ')-1)
|
16
|
+
2.times{string.slice!(0..string.index(' '))}
|
17
|
+
channel = string.slice!(0..string.index(' ')-1)
|
18
|
+
string.slice!(0)
|
19
|
+
kickee = string.slice!(0..string.index(' ')-1)
|
20
|
+
string.slice!(0..string.index(':'))
|
21
|
+
kicker = find_model(source[0..source.index('!')-1])
|
22
|
+
channel = find_model(channel)
|
23
|
+
kickee = find_model(kickee)
|
24
|
+
channel.remove_nick(kickee)
|
25
|
+
kickee.visible = false if kickee.channels.empty?
|
26
|
+
kickee.save_changes
|
27
|
+
channel.save_changes
|
28
|
+
return Messages::Incoming::Kick.new(orig, channel, kicker, kickee, string)
|
29
|
+
rescue Object => boom
|
30
|
+
Logger.warn("Failed to parse KICK message: #{orig}")
|
31
|
+
raise Exceptions::GeneralException.new(boom)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/LuserChannels'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class LuserChannels < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_LUSERCHANNELS][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
if(string =~ /(\d+)\s:channels/)
|
11
|
+
return Messages::Incoming::LuserChannels.new(string, $1.to_i)
|
12
|
+
else
|
13
|
+
Logger.warn('Failed to match RPL_LUSERCHANNELS message')
|
14
|
+
return nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/LuserClient'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class LuserClient < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_LUSERCLIENT][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
users = string =~ /(\d+) users/ ? $1 : 0
|
11
|
+
invis = string =~ /(\d+) invisible/ ? $1 : 0
|
12
|
+
servs = string =~ /(\d+) servers/ ? $1 : 0
|
13
|
+
services = string =~ /(\d+) services/ ? $1 : 0
|
14
|
+
return Messages::Incoming::LuserClient.new(string, users, invis, servs, services)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/LuserMe'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class LuserMe < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_LUSERME][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
clients = string =~ /(\d+) clients/ ? $1.to_i : 0
|
11
|
+
servers = string =~ /(\d+) server/ ? $1.to_i : 0
|
12
|
+
return Messages::Incoming::LuserMe.new(string, clients, servers)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/LuserOp'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class LuserOp < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_LUSEROP][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
if(string =~ /(\d+) :.*?\s*[oO]perators/)
|
11
|
+
return Messages::Incoming::LuserOp.new(string, $1.to_i)
|
12
|
+
else
|
13
|
+
Logger.warn('Failed to match RPL_LUSEROP message')
|
14
|
+
return nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/LuserUnknown'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class LuserUnknown < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_LUSERUNKNOWN][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
if(string =~ /(\d+) :.*[Uu]nknown/)
|
11
|
+
return Messages::Incoming::LuserUnknown.new(string, $1.to_i)
|
12
|
+
else
|
13
|
+
Logger.warn('Failed to match RPL_LUSERUNKNOWN message')
|
14
|
+
return nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Mode'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Mode < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:MODE] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
# :spax!~spox@host MODE #m +o spax
|
11
|
+
# :spax MODE spax :+iw
|
12
|
+
def process(string)
|
13
|
+
orig = string.dup
|
14
|
+
string = string.dup
|
15
|
+
begin
|
16
|
+
string.slice!(0)
|
17
|
+
if(string.index('!').nil?) # looks like self mode
|
18
|
+
source = find_model(string.slice!(0..string.index(' ')-1))
|
19
|
+
2.times{string.slice!(0..string.index(' '))}
|
20
|
+
target = find_model(string.slice!(0..string.index(' ')-1))
|
21
|
+
string.slice!(0..string.index(':'))
|
22
|
+
action = string.slice!(0)
|
23
|
+
action == '+' ? target.set_mode(string) : target.unset_mode(string)
|
24
|
+
return Messages::Incoming::Mode.new(orig, "#{action}#{string}", source, target, nil)
|
25
|
+
else
|
26
|
+
source = find_model(string.slice!(0..string.index('!')-1))
|
27
|
+
2.times{string.slice!(0..string.index(' '))}
|
28
|
+
channel = find_model(string.slice!(0..string.index(' ')-1))
|
29
|
+
string.slice!(0)
|
30
|
+
modes = string.index(' ').nil? ? string.dup : string.slice!(0..string.index(' ')-1)
|
31
|
+
string[0] == ' ' ? string.slice!(0) : string = ''
|
32
|
+
action = modes.slice!(0)
|
33
|
+
if(string.size > 0) #nick modes
|
34
|
+
nicks = []
|
35
|
+
string.split.each do |n|
|
36
|
+
ni = find_model(n)
|
37
|
+
ni.add_channel(channel)
|
38
|
+
nicks << ni
|
39
|
+
end
|
40
|
+
i = 0
|
41
|
+
modes.each_char do |m|
|
42
|
+
nm = Models::NickMode.find_or_create(:channel_id => channel.pk, :nick_id => nicks[i].pk)
|
43
|
+
action == '+' ? nm.set_mode(m) : nm.unset_mode(m)
|
44
|
+
i += 1
|
45
|
+
end
|
46
|
+
nicks = nicks[0] if nicks.size == 1
|
47
|
+
return Messages::Incoming::Mode.new(orig, "#{action}#{modes}", source, nicks, channel)
|
48
|
+
else #channel modes
|
49
|
+
modes.each_char do |m|
|
50
|
+
action == '+' ? channel.set_mode(m) : channel.unset_mode(c)
|
51
|
+
end
|
52
|
+
return Messages::Incoming::Mode.new(orig, "#{action}#{modes}", source, nil, channel)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
rescue Object => boom
|
56
|
+
Logger.warn("Failed to parse MODE message: #{orig}")
|
57
|
+
raise Exceptions::GeneralException.new(boom)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Motd'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Motd < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_MOTDSTART][:value]] = self
|
8
|
+
handlers[RFC[:RPL_MOTD][:value]] = self
|
9
|
+
handlers[RFC[:RPL_ENDOFMOTD][:value]] = self
|
10
|
+
@motds = Hash.new
|
11
|
+
@raw = Hash.new
|
12
|
+
end
|
13
|
+
def process(string)
|
14
|
+
if(string =~ /^:(\S+) #{RFC[:RPL_MOTDSTART][:value]}.*?:-\s?(\S+)/)
|
15
|
+
@motds[$1] = Array.new
|
16
|
+
@raw[$1] = [string]
|
17
|
+
return nil
|
18
|
+
elsif(string =~ /^:(\S+) #{RFC[:RPL_MOTD][:value]}.*?:-\s?(.+)$/)
|
19
|
+
@motds[$1] ||= []
|
20
|
+
@raw[$1] ||= []
|
21
|
+
@motds[$1] << $2
|
22
|
+
@raw[$1] << string
|
23
|
+
return nil
|
24
|
+
elsif(string =~ /^:(\S+) #{RFC[:RPL_ENDOFMOTD][:value]}/)
|
25
|
+
@raw[$1] ||= []
|
26
|
+
@motds[$1] ||= []
|
27
|
+
@raw[$1] << string
|
28
|
+
message = Messages::Incoming::Motd.new(@raw[$1].join("\n"), @motds[$1].join("\n"), $1)
|
29
|
+
@motds.delete($1)
|
30
|
+
@raw.delete($1)
|
31
|
+
return message
|
32
|
+
else
|
33
|
+
return nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/MyInfo'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class MyInfo < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_MYINFO][:value]] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
def process(string)
|
11
|
+
if(string =~ /^:\S+ \S+ \S+ (\S+) (\S+) (\S+) (\S+)/)
|
12
|
+
servername = $1
|
13
|
+
version = $2
|
14
|
+
usermodes = $3
|
15
|
+
channelmodes = $4
|
16
|
+
return Messages::Incoming::MyInfo.new(string, servername, version, usermodes, channelmodes)
|
17
|
+
else
|
18
|
+
Logger.warn('Failed to match My Info message')
|
19
|
+
return nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Names'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Names < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:RPL_NAMREPLY][:value]] = self
|
8
|
+
handlers[RFC[:RPL_ENDOFNAMES][:value]] = self
|
9
|
+
@names = Hash.new
|
10
|
+
@raw = Hash.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(string)
|
14
|
+
orig = string.dup
|
15
|
+
string = string.dup
|
16
|
+
begin
|
17
|
+
string.slice!(0..string.index(' '))
|
18
|
+
type = string.slice!(0..string.index(' ')-1)
|
19
|
+
if(type == RFC[:RPL_NAMREPLY][:value])
|
20
|
+
3.times{ string.slice!(0..string.index(' ')) }
|
21
|
+
chan = string.slice!(0..string.index(' ')-1)
|
22
|
+
string.slice!(0..string.index(':'))
|
23
|
+
@names[chan] = Array.new unless @names[chan]
|
24
|
+
@raw[chan] = Array.new unless @raw[chan]
|
25
|
+
@raw[chan] << orig
|
26
|
+
@names[chan] += string.split
|
27
|
+
return nil
|
28
|
+
else
|
29
|
+
2.times{ string.slice!(0..string.index(' ')) }
|
30
|
+
chan = string.slice!(0..string.index(' ')-1)
|
31
|
+
channel = find_model(chan)
|
32
|
+
@raw[chan] << orig if @raw[chan]
|
33
|
+
nicks = Array.new
|
34
|
+
ops = Array.new
|
35
|
+
voice = Array.new
|
36
|
+
raw = @raw[chan].dup if @raw[chan]
|
37
|
+
@names[chan] = [] unless @names[chan].is_a?(Array)
|
38
|
+
@names[chan].each do |n|
|
39
|
+
nick = Models::Nick.find_or_create(:nick => n.gsub(/^[@+]/, ''))
|
40
|
+
nick.visible = true
|
41
|
+
nicks << nick
|
42
|
+
if(n[0] == '@')
|
43
|
+
ops << nick
|
44
|
+
m = Models::NickMode.find_or_create(:nick_id => nick.pk, :channel_id => channel.pk)
|
45
|
+
m.set_mode('o')
|
46
|
+
elsif(n[0] == '+')
|
47
|
+
voice << nick
|
48
|
+
m = Models::NickMode.find_or_create(:nick_id => nick.pk, :channel_id => channel.pk)
|
49
|
+
m.set_mode('v')
|
50
|
+
else
|
51
|
+
m = Models::NickMode.find_or_create(:nick_id => nick.pk, :channel_id => channel.pk)
|
52
|
+
m.clear_modes
|
53
|
+
end
|
54
|
+
nick.add_channel(channel)
|
55
|
+
nick.refresh
|
56
|
+
channel.refresh
|
57
|
+
end
|
58
|
+
check_visibility(nicks, channel)
|
59
|
+
@names.delete(chan)
|
60
|
+
@raw.delete(chan)
|
61
|
+
return Messages::Incoming::Names.new(raw, channel, nicks, ops, voice)
|
62
|
+
end
|
63
|
+
rescue Object => boom
|
64
|
+
Logger.error("Failed to parse NAMES message: #{orig}")
|
65
|
+
raise Exceptions::GeneralException.new(boom)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# nicks:: list of nicks in channel
|
70
|
+
# channel:: channel nicks are in
|
71
|
+
# Remove visibility from any nicks that aren't really
|
72
|
+
# in the channel
|
73
|
+
def check_visibility(nicks, channel)
|
74
|
+
channel.nicks.each do |nick|
|
75
|
+
unless(nicks.include?(nick))
|
76
|
+
channel.remove_nick(nick)
|
77
|
+
unless(nick.botnick)
|
78
|
+
nick.refresh
|
79
|
+
nick.update(:visible => false) if (Models::Nick.filter(:botnick => true).first.channels & nick.channels).empty?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Nick'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Nick < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:NICK] = self
|
8
|
+
end
|
9
|
+
# :spox!~spox@some.random.host NICK :flock_of_deer
|
10
|
+
def process(string)
|
11
|
+
orig = string.dup
|
12
|
+
string = string.dup
|
13
|
+
begin
|
14
|
+
string.slice!(0)
|
15
|
+
old_nick = find_model(string.slice!(0..string.index('!')-1))
|
16
|
+
string.slice!(0..string.index(':'))
|
17
|
+
new_nick = find_model(string)
|
18
|
+
old_nick.channels.each do |channel|
|
19
|
+
channel.remove_nick(old_nick)
|
20
|
+
channel.add_nick(new_nick)
|
21
|
+
m = Models::NickMode.filter(:nick_id => old_nick.pk, :channel_id => channel.pk).first
|
22
|
+
if(m)
|
23
|
+
m.nick_id = new_nick.pk
|
24
|
+
m.save
|
25
|
+
end
|
26
|
+
end
|
27
|
+
new_nick.username = old_nick.username
|
28
|
+
new_nick.address = old_nick.address
|
29
|
+
new_nick.real_name = old_nick.real_name
|
30
|
+
new_nick.connected_to = old_nick.connected_to
|
31
|
+
new_nick.away = old_nick.away
|
32
|
+
new_nick.visible = true
|
33
|
+
new_nick.save_changes
|
34
|
+
old_nick.visible = false
|
35
|
+
old_nick.remove_all_channels
|
36
|
+
if(old_nick.botnick == true)
|
37
|
+
old_nick.botnick = false
|
38
|
+
new_nick.botnick = true
|
39
|
+
end
|
40
|
+
new_nick.save
|
41
|
+
old_nick.save
|
42
|
+
return Messages::Incoming::Nick.new(orig, old_nick, new_nick)
|
43
|
+
rescue Object => boom
|
44
|
+
Logger.error("Failed to parse NICK message: #{orig}")
|
45
|
+
raise Exceptions::GeneralException.new(boom)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/NickInUse'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class NickInUse < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[RFC[:ERR_NICKNAMEINUSE][:value]] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
if(string =~ /#{RFC[:ERR_NICKNAMEINUSE][:value]}\s\S+\s(\S+)\s:/)
|
11
|
+
return Messages::Incoming::NickInUse.new(string, $1)
|
12
|
+
else
|
13
|
+
Logger.warn('Failed to parse ERR_NICKNAMEINUSE message')
|
14
|
+
return nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Notice'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Notice < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:NOTICE] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
def process(string)
|
11
|
+
if(string =~ /:(\S+)\sNOTICE\s(\S+)\s:(.+)$/)
|
12
|
+
base_source = $1
|
13
|
+
target = $2
|
14
|
+
message = $3
|
15
|
+
if(base_source =~ /\!/)
|
16
|
+
source = find_model(base_source.gsub(/!.+$/, ''))
|
17
|
+
if(base_source =~ /!(.+)@(.+)$/)
|
18
|
+
source.username == $1
|
19
|
+
source.address = $2
|
20
|
+
source.source = base_source
|
21
|
+
source.save_changes
|
22
|
+
end
|
23
|
+
target = find_model(target)
|
24
|
+
else
|
25
|
+
source = base_source
|
26
|
+
end
|
27
|
+
return Messages::Incoming::Notice.new(string, source, target, message)
|
28
|
+
else
|
29
|
+
Logger.warn('Failed to match NOTICE message')
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Part'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Part < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:PART] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
# :mod_spox!~mod_spox@host PART #m :
|
11
|
+
# :guy2net!~guy2net@92-239-14-145.cable.ubr15.haye.blueyonder.co.uk PART #php
|
12
|
+
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
begin
|
17
|
+
string.slice!(0)
|
18
|
+
nick = find_model(string.slice!(0..string.index('!')-1))
|
19
|
+
2.times{ string.slice!(0..string.index(' ')) }
|
20
|
+
unless(string.index(' ').nil?)
|
21
|
+
channel = find_model(string.slice!(0..string.index(' ')-1))
|
22
|
+
string.slice!(0..string.index(':'))
|
23
|
+
else
|
24
|
+
channel = find_model(string)
|
25
|
+
string = ''
|
26
|
+
end
|
27
|
+
channel.remove_nick(nick)
|
28
|
+
nick.visible = false if nick.channels.empty?
|
29
|
+
nick.save_changes
|
30
|
+
channel.save_changes
|
31
|
+
return Messages::Incoming::Part.new(orig, channel, nick, string)
|
32
|
+
rescue Object => boom
|
33
|
+
Logger.error("Failed to parse PART message: #{orig}")
|
34
|
+
raise Exceptions::GeneralException.new(boom)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Ping'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Ping < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:PING] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
orig = string.dup
|
11
|
+
string = string.dup
|
12
|
+
begin
|
13
|
+
string.slice!(0) if string[0] == ':'
|
14
|
+
server = string[0..string.index(' ')-1]
|
15
|
+
message = string[string.index(':')+1..string.size]
|
16
|
+
server = message.dup if server == 'PING'
|
17
|
+
return Messages::Incoming::Ping.new(orig, server, message)
|
18
|
+
rescue Object => boom
|
19
|
+
Logger.error("Failed to parse PING message: #{string}")
|
20
|
+
raise Exceptions::GeneralException.new(boom)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Pong'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Pong < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:PONG] = self
|
8
|
+
end
|
9
|
+
def process(string)
|
10
|
+
orig = string.dup
|
11
|
+
string = string.dup
|
12
|
+
begin
|
13
|
+
a = string.slice!(string.rindex(':')+1, string.size)
|
14
|
+
string.slice!(-2..string.size)
|
15
|
+
return Messages::Incoming::Pong.new(orig, string.slice(string.rindex(' ')+1..string.size), a)
|
16
|
+
rescue Object => boom
|
17
|
+
Logger.error("Failed to parse PONG message: #{orig}")
|
18
|
+
raise Exceptions::GeneralException.new(boom)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Privmsg'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Privmsg < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:PRIVMSG] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
# :spox!~spox@host PRIVMSG #m :foobar
|
11
|
+
def process(string)
|
12
|
+
orig = string.dup
|
13
|
+
string = string.dup
|
14
|
+
begin
|
15
|
+
string.slice!(0)
|
16
|
+
base_source = string.slice!(0..string.index(' ')-1)
|
17
|
+
orig_source = base_source.dup
|
18
|
+
string.slice!(0..string.index(' ',3))
|
19
|
+
target = find_model(string.slice!(0..string.index(' ')-1))
|
20
|
+
string.slice!(0..string.index(':'))
|
21
|
+
string.strip!
|
22
|
+
source = find_model(base_source.slice!(0..base_source.index('!')-1))
|
23
|
+
base_source.slice!(0)
|
24
|
+
source.username = base_source.slice!(0..base_source.index('@')-1)
|
25
|
+
base_source.slice!(0)
|
26
|
+
source.address = base_source.strip
|
27
|
+
source.source = orig_source
|
28
|
+
source.save_changes
|
29
|
+
source.add_channel(target) if target.is_a?(Models::Channel)
|
30
|
+
return Messages::Incoming::Privmsg.new(orig, source, target, string)
|
31
|
+
rescue Object => boom
|
32
|
+
Logger.warn("Failed to parse PRIVMSG message: #{orig}")
|
33
|
+
Logger.warn("Reason for PRIVMSG failure: #{boom}")
|
34
|
+
raise Exceptions::GeneralException.new(boom)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Quit'
|
3
|
+
module ModSpox
|
4
|
+
module Handlers
|
5
|
+
class Quit < Handler
|
6
|
+
def initialize(handlers)
|
7
|
+
handlers[:QUIT] = self
|
8
|
+
end
|
9
|
+
|
10
|
+
#:spox!~spox@host QUIT :Ping timeout
|
11
|
+
def process(string)
|
12
|
+
orig = string.dup
|
13
|
+
string = string.dup
|
14
|
+
begin
|
15
|
+
string.slice!(0)
|
16
|
+
nick = find_model(string.slice!(0..string.index('!')-1))
|
17
|
+
string.slice!(0..string.index(':'))
|
18
|
+
nick.remove_all_channels
|
19
|
+
nick.visible = false
|
20
|
+
nick.save
|
21
|
+
return Messages::Incoming::Quit.new(orig, nick, string)
|
22
|
+
rescue Object => boom
|
23
|
+
Logger.error("Failed to parse QUIT message: #{orig}")
|
24
|
+
raise Exceptions::GeneralException.new(boom)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mod_spox/handlers/Handler'
|
2
|
+
require 'mod_spox/messages/incoming/Topic'
|
3
|
+
require 'mod_spox/messages/incoming/TopicInfo'
|
4
|
+
module ModSpox
|
5
|
+
module Handlers
|
6
|
+
class Topic < Handler
|
7
|
+
def initialize(handlers)
|
8
|
+
handlers[RFC[:RPL_TOPIC][:value]] = self
|
9
|
+
handlers[RFC[:RPL_NOTOPIC][:value]] = self
|
10
|
+
handlers[RFC[:RPL_TOPICINFO][:value]] = self
|
11
|
+
@topics = Hash.new
|
12
|
+
end
|
13
|
+
|
14
|
+
#:irc.host 332 spox #mod_spox : the topic is here
|
15
|
+
#:irc.host 333 spox #mod_spox spox 1232126516
|
16
|
+
|
17
|
+
def process(string)
|
18
|
+
if(string =~ /#{RFC[:RPL_TOPIC][:value]}.+?(\S+)\s:(.+)$/)
|
19
|
+
channel = find_model($1)
|
20
|
+
channel.update(:topic => $2)
|
21
|
+
return Messages::Incoming::Topic.new(string, channel, $2)
|
22
|
+
elsif(string =~ /#{RFC[:RPL_NOTOPIC][:value]}.+?(\S+)\s:/)
|
23
|
+
channel = find_model($1)
|
24
|
+
return Messages::Incoming::Topic.new(string, channel, nil)
|
25
|
+
elsif(string =~ /#{RFC[:RPL_TOPICINFO][:value]}\s\S+\s(\S+)\s(\S+)\s(.+)$/)
|
26
|
+
channel = find_model($1)
|
27
|
+
nick = find_model($1)
|
28
|
+
time = Time.at($3.to_i)
|
29
|
+
return Messages::Incoming::TopicInfo.new(string, channel, nick, time)
|
30
|
+
else
|
31
|
+
Logger.warn('Failed to parse TOPIC type string')
|
32
|
+
return nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|