mod_spox 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. data/CHANGELOG +2 -0
  2. data/INSTALL +9 -0
  3. data/README +33 -0
  4. data/bin/mod_spox +60 -0
  5. data/data/mod_spox/extras/Tester.rb +14 -0
  6. data/data/mod_spox/plugins/Authenticator.rb +245 -0
  7. data/data/mod_spox/plugins/BotNick.rb +18 -0
  8. data/data/mod_spox/plugins/Initializer.rb +41 -0
  9. data/data/mod_spox/plugins/Joiner.rb +13 -0
  10. data/data/mod_spox/plugins/Parter.rb +22 -0
  11. data/data/mod_spox/plugins/PluginLoader.rb +136 -0
  12. data/data/mod_spox/plugins/Ponger.rb +14 -0
  13. data/data/mod_spox/plugins/Quitter.rb +14 -0
  14. data/lib/mod_spox/Action.rb +73 -0
  15. data/lib/mod_spox/BaseConfig.rb +48 -0
  16. data/lib/mod_spox/Bot.rb +472 -0
  17. data/lib/mod_spox/BotConfig.rb +54 -0
  18. data/lib/mod_spox/ConfigurationWizard.rb +178 -0
  19. data/lib/mod_spox/Database.rb +25 -0
  20. data/lib/mod_spox/Exceptions.rb +35 -0
  21. data/lib/mod_spox/Helpers.rb +35 -0
  22. data/lib/mod_spox/Loader.rb +79 -0
  23. data/lib/mod_spox/Logger.rb +31 -0
  24. data/lib/mod_spox/MessageFactory.rb +73 -0
  25. data/lib/mod_spox/Monitors.rb +59 -0
  26. data/lib/mod_spox/Pipeline.rb +148 -0
  27. data/lib/mod_spox/Plugin.rb +18 -0
  28. data/lib/mod_spox/PluginManager.rb +105 -0
  29. data/lib/mod_spox/Pool.rb +50 -0
  30. data/lib/mod_spox/Socket.rb +171 -0
  31. data/lib/mod_spox/Timer.rb +138 -0
  32. data/lib/mod_spox/handlers/BadNick.rb +16 -0
  33. data/lib/mod_spox/handlers/Bounce.rb +15 -0
  34. data/lib/mod_spox/handlers/Created.rb +16 -0
  35. data/lib/mod_spox/handlers/Handler.rb +31 -0
  36. data/lib/mod_spox/handlers/Invite.rb +19 -0
  37. data/lib/mod_spox/handlers/Join.rb +30 -0
  38. data/lib/mod_spox/handlers/Kick.rb +24 -0
  39. data/lib/mod_spox/handlers/LuserChannels.rb +16 -0
  40. data/lib/mod_spox/handlers/LuserClient.rb +16 -0
  41. data/lib/mod_spox/handlers/LuserMe.rb +14 -0
  42. data/lib/mod_spox/handlers/LuserOp.rb +16 -0
  43. data/lib/mod_spox/handlers/LuserUnknown.rb +16 -0
  44. data/lib/mod_spox/handlers/Mode.rb +47 -0
  45. data/lib/mod_spox/handlers/Motd.rb +30 -0
  46. data/lib/mod_spox/handlers/MyInfo.rb +21 -0
  47. data/lib/mod_spox/handlers/Names.rb +54 -0
  48. data/lib/mod_spox/handlers/Nick.rb +24 -0
  49. data/lib/mod_spox/handlers/NickInUse.rb +16 -0
  50. data/lib/mod_spox/handlers/Notice.rb +32 -0
  51. data/lib/mod_spox/handlers/Part.rb +19 -0
  52. data/lib/mod_spox/handlers/Ping.rb +16 -0
  53. data/lib/mod_spox/handlers/Pong.rb +16 -0
  54. data/lib/mod_spox/handlers/Privmsg.rb +27 -0
  55. data/lib/mod_spox/handlers/Quit.rb +21 -0
  56. data/lib/mod_spox/handlers/Topic.rb +29 -0
  57. data/lib/mod_spox/handlers/Welcome.rb +34 -0
  58. data/lib/mod_spox/handlers/Who.rb +60 -0
  59. data/lib/mod_spox/handlers/Whois.rb +63 -0
  60. data/lib/mod_spox/handlers/YourHost.rb +17 -0
  61. data/lib/mod_spox/messages/incoming/BadNick.rb +15 -0
  62. data/lib/mod_spox/messages/incoming/Bounce.rb +17 -0
  63. data/lib/mod_spox/messages/incoming/Created.rb +14 -0
  64. data/lib/mod_spox/messages/incoming/Invite.rb +20 -0
  65. data/lib/mod_spox/messages/incoming/Join.rb +18 -0
  66. data/lib/mod_spox/messages/incoming/Kick.rb +25 -0
  67. data/lib/mod_spox/messages/incoming/LuserChannels.rb +14 -0
  68. data/lib/mod_spox/messages/incoming/LuserClient.rb +23 -0
  69. data/lib/mod_spox/messages/incoming/LuserMe.rb +17 -0
  70. data/lib/mod_spox/messages/incoming/LuserOp.rb +14 -0
  71. data/lib/mod_spox/messages/incoming/LuserUnknown.rb +14 -0
  72. data/lib/mod_spox/messages/incoming/Message.rb +22 -0
  73. data/lib/mod_spox/messages/incoming/Mode.rb +41 -0
  74. data/lib/mod_spox/messages/incoming/Motd.rb +17 -0
  75. data/lib/mod_spox/messages/incoming/MyInfo.rb +23 -0
  76. data/lib/mod_spox/messages/incoming/Names.rb +23 -0
  77. data/lib/mod_spox/messages/incoming/Nick.rb +25 -0
  78. data/lib/mod_spox/messages/incoming/NickInUse.rb +14 -0
  79. data/lib/mod_spox/messages/incoming/Notice.rb +8 -0
  80. data/lib/mod_spox/messages/incoming/Part.rb +20 -0
  81. data/lib/mod_spox/messages/incoming/Ping.rb +17 -0
  82. data/lib/mod_spox/messages/incoming/Pong.rb +8 -0
  83. data/lib/mod_spox/messages/incoming/Privmsg.rb +64 -0
  84. data/lib/mod_spox/messages/incoming/Quit.rb +17 -0
  85. data/lib/mod_spox/messages/incoming/Topic.rb +20 -0
  86. data/lib/mod_spox/messages/incoming/TopicInfo.rb +20 -0
  87. data/lib/mod_spox/messages/incoming/Welcome.rb +26 -0
  88. data/lib/mod_spox/messages/incoming/Who.rb +17 -0
  89. data/lib/mod_spox/messages/incoming/Whois.rb +47 -0
  90. data/lib/mod_spox/messages/incoming/YourHost.rb +17 -0
  91. data/lib/mod_spox/messages/internal/BotInitialized.rb +11 -0
  92. data/lib/mod_spox/messages/internal/ChangeNick.rb +15 -0
  93. data/lib/mod_spox/messages/internal/Connected.rb +20 -0
  94. data/lib/mod_spox/messages/internal/ConnectionFailed.rb +23 -0
  95. data/lib/mod_spox/messages/internal/Disconnected.rb +8 -0
  96. data/lib/mod_spox/messages/internal/Disconnecting.rb +8 -0
  97. data/lib/mod_spox/messages/internal/EstablishConnection.rb +22 -0
  98. data/lib/mod_spox/messages/internal/HaltBot.rb +8 -0
  99. data/lib/mod_spox/messages/internal/NickRequest.rb +8 -0
  100. data/lib/mod_spox/messages/internal/NickResponse.rb +14 -0
  101. data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +20 -0
  102. data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +16 -0
  103. data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +13 -0
  104. data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +17 -0
  105. data/lib/mod_spox/messages/internal/PluginReload.rb +8 -0
  106. data/lib/mod_spox/messages/internal/PluginRequest.rb +17 -0
  107. data/lib/mod_spox/messages/internal/PluginResponse.rb +20 -0
  108. data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +8 -0
  109. data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +8 -0
  110. data/lib/mod_spox/messages/internal/Request.rb +15 -0
  111. data/lib/mod_spox/messages/internal/Response.rb +15 -0
  112. data/lib/mod_spox/messages/internal/Shutdown.rb +8 -0
  113. data/lib/mod_spox/messages/internal/SignaturesUpdate.rb +8 -0
  114. data/lib/mod_spox/messages/internal/StatusRequest.rb +9 -0
  115. data/lib/mod_spox/messages/internal/StatusResponse.rb +17 -0
  116. data/lib/mod_spox/messages/internal/TimerAdd.rb +27 -0
  117. data/lib/mod_spox/messages/internal/TimerClear.rb +8 -0
  118. data/lib/mod_spox/messages/internal/TimerRemove.rb +15 -0
  119. data/lib/mod_spox/messages/internal/TimerResponse.rb +26 -0
  120. data/lib/mod_spox/messages/internal/TriggersUpdate.rb +8 -0
  121. data/lib/mod_spox/messages/outgoing/Admin.rb +15 -0
  122. data/lib/mod_spox/messages/outgoing/Away.rb +10 -0
  123. data/lib/mod_spox/messages/outgoing/ChannelMode.rb +25 -0
  124. data/lib/mod_spox/messages/outgoing/Connect.rb +24 -0
  125. data/lib/mod_spox/messages/outgoing/Die.rb +9 -0
  126. data/lib/mod_spox/messages/outgoing/Info.rb +15 -0
  127. data/lib/mod_spox/messages/outgoing/Invite.rb +19 -0
  128. data/lib/mod_spox/messages/outgoing/Ison.rb +15 -0
  129. data/lib/mod_spox/messages/outgoing/Join.rb +19 -0
  130. data/lib/mod_spox/messages/outgoing/Kick.rb +23 -0
  131. data/lib/mod_spox/messages/outgoing/Kill.rb +19 -0
  132. data/lib/mod_spox/messages/outgoing/Links.rb +19 -0
  133. data/lib/mod_spox/messages/outgoing/List.rb +19 -0
  134. data/lib/mod_spox/messages/outgoing/Lusers.rb +19 -0
  135. data/lib/mod_spox/messages/outgoing/Motd.rb +16 -0
  136. data/lib/mod_spox/messages/outgoing/Names.rb +20 -0
  137. data/lib/mod_spox/messages/outgoing/Nick.rb +16 -0
  138. data/lib/mod_spox/messages/outgoing/Notice.rb +11 -0
  139. data/lib/mod_spox/messages/outgoing/Oper.rb +19 -0
  140. data/lib/mod_spox/messages/outgoing/Part.rb +19 -0
  141. data/lib/mod_spox/messages/outgoing/Pass.rb +16 -0
  142. data/lib/mod_spox/messages/outgoing/Ping.rb +10 -0
  143. data/lib/mod_spox/messages/outgoing/Pong.rb +17 -0
  144. data/lib/mod_spox/messages/outgoing/Privmsg.rb +19 -0
  145. data/lib/mod_spox/messages/outgoing/Quit.rb +10 -0
  146. data/lib/mod_spox/messages/outgoing/Rehash.rb +9 -0
  147. data/lib/mod_spox/messages/outgoing/Restart.rb +9 -0
  148. data/lib/mod_spox/messages/outgoing/ServList.rb +19 -0
  149. data/lib/mod_spox/messages/outgoing/Simple.rb +12 -0
  150. data/lib/mod_spox/messages/outgoing/Squery.rb +19 -0
  151. data/lib/mod_spox/messages/outgoing/Squit.rb +19 -0
  152. data/lib/mod_spox/messages/outgoing/Stats.rb +18 -0
  153. data/lib/mod_spox/messages/outgoing/Summon.rb +23 -0
  154. data/lib/mod_spox/messages/outgoing/Time.rb +15 -0
  155. data/lib/mod_spox/messages/outgoing/Topic.rb +19 -0
  156. data/lib/mod_spox/messages/outgoing/Trace.rb +15 -0
  157. data/lib/mod_spox/messages/outgoing/Unaway.rb +9 -0
  158. data/lib/mod_spox/messages/outgoing/User.rb +23 -0
  159. data/lib/mod_spox/messages/outgoing/UserHost.rb +15 -0
  160. data/lib/mod_spox/messages/outgoing/UserMode.rb +19 -0
  161. data/lib/mod_spox/messages/outgoing/Users.rb +15 -0
  162. data/lib/mod_spox/messages/outgoing/Version.rb +16 -0
  163. data/lib/mod_spox/messages/outgoing/Who.rb +19 -0
  164. data/lib/mod_spox/messages/outgoing/WhoWas.rb +23 -0
  165. data/lib/mod_spox/messages/outgoing/Whois.rb +19 -0
  166. data/lib/mod_spox/migration/001_create_auths.rb +13 -0
  167. data/lib/mod_spox/migration/001_create_channel.rb +13 -0
  168. data/lib/mod_spox/migration/001_create_channel_modes.rb +13 -0
  169. data/lib/mod_spox/migration/001_create_config.rb +13 -0
  170. data/lib/mod_spox/migration/001_create_nick_channels.rb +13 -0
  171. data/lib/mod_spox/migration/001_create_nick_modes.rb +13 -0
  172. data/lib/mod_spox/migration/001_create_nicks.rb +13 -0
  173. data/lib/mod_spox/migration/001_create_servers.rb +13 -0
  174. data/lib/mod_spox/migration/001_create_settings.rb +13 -0
  175. data/lib/mod_spox/migration/001_create_signatures.rb +13 -0
  176. data/lib/mod_spox/migration/001_create_triggers.rb +13 -0
  177. data/lib/mod_spox/models/Auth.rb +79 -0
  178. data/lib/mod_spox/models/AuthGroup.rb +15 -0
  179. data/lib/mod_spox/models/Channel.rb +47 -0
  180. data/lib/mod_spox/models/ChannelMode.rb +14 -0
  181. data/lib/mod_spox/models/Config.rb +31 -0
  182. data/lib/mod_spox/models/Group.rb +13 -0
  183. data/lib/mod_spox/models/Nick.rb +110 -0
  184. data/lib/mod_spox/models/NickChannel.rb +43 -0
  185. data/lib/mod_spox/models/NickMode.rb +18 -0
  186. data/lib/mod_spox/models/Server.rb +12 -0
  187. data/lib/mod_spox/models/Setting.rb +40 -0
  188. data/lib/mod_spox/models/Signature.rb +30 -0
  189. data/lib/mod_spox/models/Trigger.rb +9 -0
  190. data/lib/mod_spox/rfc2812.rb +171 -0
  191. metadata +261 -0
@@ -0,0 +1,63 @@
1
+ module ModSpox
2
+ module Handlers
3
+ class Whois < Handler
4
+ def initialize(handlers)
5
+ handlers[RPL_WHOISUSER] = self
6
+ handlers[RPL_WHOISSERVER] = self
7
+ handlers[RPL_WHOISOPERATOR] = self
8
+ handlers[RPL_WHOISIDLE] = self
9
+ handlers[RPL_WHOISCHANNELS] = self
10
+ handlers[RPL_WHOISIDENTIFIED] = self
11
+ handlers[RPL_ENDOFWHOIS] = self
12
+ @cache = Hash.new
13
+ @raw = Hash.new
14
+ end
15
+
16
+ def process(string)
17
+ if(string =~ /#{RPL_WHOISUSER}\s\S+\s(\S+)\s(\S+)\s(\S+)\s\*\s:(.+)$/)
18
+ nick = find_model($1)
19
+ nick.username = $2
20
+ nick.address = $3
21
+ nick.real_name = $4
22
+ @cache[$1] = Messages::Incoming::Whois.new(nick)
23
+ @cache[$1].raw_push(string)
24
+ elsif(string =~ /#{RPL_WHOISCHANNELS}\s\S+\s(\S+)\s:(.+)$/)
25
+ nick = $1
26
+ $2.split(/\s/).each{|chan|
27
+ channel = find_model(chan.gsub(/^[@\+]/, ''))
28
+ @cache[nick].channels_push(channel)
29
+ if(chan[0].chr == '@')
30
+ Models::NickMode.find_or_create(:nick_id => @cache[nick].pk, :mode => 'o', :channel_id => channel.pk)
31
+ elsif(chan[0].chr == '+')
32
+ Models::NickMode.find_or_create(:nick_id => @cache[nick].pk, :mode => 'v', :channel_id => channel.pk)
33
+ else
34
+ Models::NickMode.filter(:nick_id => @cache[nick].nick.pk, :channel_id => channel.pk).each{|m| m.destroy}
35
+ end
36
+ }
37
+ @cache[$1].raw_push(string)
38
+ elsif(string =~ /#{RPL_WHOISSERVER}\s\S+\s(\S+)\s(\S+)\s:(.+)$/)
39
+ @cache[$1].nick.connected_to = $2
40
+ @cache[$1].raw_push(string)
41
+ elsif(string =~ /#{RPL_WHOISIDENTIFIED}\s\S+\s(\S+)\s/)
42
+ @cache[$1].nick.auth.services_identified = true
43
+ @cache[$1].raw_push(string)
44
+ elsif(string =~ /#{RPL_WHOISIDLE}\s\S+\s(\S+)\s(\d+)\s(\d+)\s:(.+?),(.+?)/)
45
+ @cache[$1].nick.seconds_idle = $2.to_i
46
+ @cache[$1].nick.connected_at = Time.at($3.to_i)
47
+ @cache[$1].raw_push(string)
48
+ elsif(string =~ /#{RPL_WHOISOPERATOR}\s\S+\s(\S+)/)
49
+ @cache[$1].raw_push(string)
50
+ elsif(string =~ /#{RPL_ENDOFWHOIS}\s\S+\s(\S+)\s:/)
51
+ @cache[$1].raw_push(string)
52
+ message = @cache[$1]
53
+ message.lock
54
+ @cache[$1].nick.save
55
+ @cache.delete($1)
56
+ return message
57
+ else
58
+ Logger.log('Failed to parse WHOIS type reply')
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Handlers
3
+ class YourHost < Handler
4
+ def initialize(handlers)
5
+ handlers[RPL_YOURHOST] = self
6
+ end
7
+
8
+ def process(string)
9
+ if(string =~ /:Your host is (\S+), running version (.+)$/)
10
+ return Messages::Incoming::YourHost.new(string, $1, $2)
11
+ else
12
+ Logger.log('Failed to match Your Host message')
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class BadNick < Message
5
+ # nick that failed (string)
6
+ attr_reader :bad_nick
7
+ def initialize(raw, nick)
8
+ super(raw)
9
+ @bad_nick = nick
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Bounce < Message
5
+ # server to connect to
6
+ attr_reader :server
7
+ # port to connect to
8
+ attr_reader :port
9
+ def initialize(raw, server, port)
10
+ super(raw)
11
+ @server = server
12
+ @port = port
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Created < Message
5
+ # date server was created
6
+ attr_reader :date
7
+ def initialize(raw, date)
8
+ super(raw)
9
+ @date = date
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Invite < Message
5
+ # source nick of invite
6
+ attr_reader :source
7
+ # target nick of invite
8
+ attr_reader :target
9
+ # channel invited to
10
+ attr_reader :channel
11
+ def initialize(raw, source, target, channel)
12
+ super(raw)
13
+ @source = source
14
+ @target = target
15
+ @channel = channel
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Join < Message
5
+ # channel that nick joined
6
+ attr_reader :channel
7
+ # nick that joined channel
8
+ attr_reader :nick
9
+
10
+ def initialize(raw, channel, nick)
11
+ super(raw)
12
+ @channel = channel
13
+ @nick = nick
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Kick < Message
5
+ # channel user was kicked from
6
+ attr_reader :channel
7
+ # nick that performed the kick
8
+ attr_reader :kicker
9
+ # nick that was kicked
10
+ attr_reader :kickee
11
+ # reason for kick
12
+ attr_reader :reason
13
+
14
+ def initialize(raw, channel, kicker, kickee, reason)
15
+ super(raw)
16
+ @channel = channel
17
+ @kicker = kicker
18
+ @kickee = kickee
19
+ @reason = reason
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class LuserChannels < Message
5
+ # number of channels
6
+ attr_reader :channels
7
+ def initialize(raw, num)
8
+ super(raw)
9
+ @channels = num
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class LuserClient < Message
5
+ # number of visible users
6
+ attr_reader :users
7
+ # number of invisible users
8
+ attr_reader :invisible
9
+ # number of servers
10
+ attr_reader :servers
11
+ # number of services
12
+ attr_reader :services
13
+ def initialize(raw, user, invis, servers, services)
14
+ super(raw)
15
+ @users = user
16
+ @invisible = invis
17
+ @servers = servers
18
+ @services = services
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class LuserMe < Message
5
+ # number of clients on server
6
+ attr_reader :clients
7
+ # number of servers
8
+ attr_reader :servers
9
+ def initialize(raw, clients, servers)
10
+ super(raw)
11
+ @clients = clients
12
+ @servers = servers
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class LuserOp < Message
5
+ # number of operators visible
6
+ attr_reader :ops
7
+ def initialize(raw, num)
8
+ super(raw)
9
+ @ops = num
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class LuserUnknown < Message
5
+ # number of unknown users
6
+ attr_reader :unknown
7
+ def initialize(raw, num)
8
+ super(raw)
9
+ @unknown = num
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+
5
+ class Message
6
+
7
+ # raw string from server
8
+ attr_reader :raw_content
9
+
10
+ # time of message creation
11
+ attr_reader :time
12
+
13
+ def initialize(content)
14
+ @raw_content = content
15
+ @time = Time.now
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Mode < Message
5
+
6
+ # mode string (will be two or more characters matching: /^[+\-][A-Za-z]+$/)
7
+ attr_reader :mode
8
+
9
+ # mode channel (nil if target is nick (basically modes for the bot))
10
+ attr_reader :channel
11
+
12
+ # nick mode is applied to (nil if mode change is for channel only)
13
+ # if multiple modes are applied to multiple nicks, this will be
14
+ # an array holding the nicks in order the mode string was applied
15
+ attr_reader :target
16
+
17
+ # nick that applied the mode change
18
+ attr_reader :source
19
+
20
+ def initialize(raw, mode, source, target, channel)
21
+ super(raw)
22
+ @mode = mode
23
+ @channel = channel
24
+ @source = source
25
+ @target = target
26
+ end
27
+
28
+ # If mode is for a nick
29
+ def for_nick?
30
+ return @channel.nil?
31
+ end
32
+
33
+ # If mode is for a channel
34
+ def for_channel?
35
+ return @target.nil?
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Motd < Message
5
+ # Message of the day
6
+ attr_reader :motd
7
+ # Server message is from
8
+ attr_reader :server
9
+ def initialize(raw, motd, server)
10
+ super(raw)
11
+ @motd = motd
12
+ @server = server
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class MyInfo < Message
5
+ # name of server connected to
6
+ attr_reader :servername
7
+ # version of server connected to
8
+ attr_reader :version
9
+ # user modes supported by server
10
+ attr_reader :user_modes
11
+ # channel modes supported by server
12
+ attr_reader :channel_modes
13
+ def initialize(raw, server, version, umodes, cmodes)
14
+ super(raw)
15
+ @servername = server
16
+ @version = version
17
+ @user_modes = umodes
18
+ @channel_modes = cmodes
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Names < Message
5
+ # channel names are from
6
+ attr_reader :channel
7
+ # nicks in the channel
8
+ attr_reader :nicks
9
+ # ops in the channel
10
+ attr_reader :ops
11
+ # voiced nicks in channel
12
+ attr_reader :voiced
13
+ def initialize(raw, channel, nicks, ops, voiced)
14
+ super(raw)
15
+ @channel = channel
16
+ @nicks = nicks
17
+ @ops = ops
18
+ @voiced = voiced
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Nick < Message
5
+
6
+ # previous nick
7
+ attr_reader :original_nick
8
+ # new nick
9
+ attr_reader :new_nick
10
+
11
+ ## make sure old_nick is the source here
12
+ ## in the processor breaking the raw message
13
+
14
+ # old_nick:: this should be the source
15
+ # new_nick:: this should be the target
16
+ def initialize(raw, old_nick, new_nick)
17
+ super(raw)
18
+ @original_nick = @source_nick
19
+ @new_nick = @target
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class NickInUse < Message
5
+ # nick that is in use (string)
6
+ attr_reader :nick
7
+ def initialize(raw, nick)
8
+ super(raw)
9
+ @nick = nick
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Notice < Privmsg
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Part < Message
5
+ # channel user parted from
6
+ attr_reader :channel
7
+ # nick that parted from channel
8
+ attr_reader :nick
9
+ # reason for parting
10
+ attr_reader :reason
11
+ def initialize(raw, channel, nick, reason)
12
+ super(raw)
13
+ @channel = channel
14
+ @nick = nick
15
+ @reason = reason
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Ping < Message
5
+ # server of origin
6
+ attr_reader :server
7
+ # string
8
+ attr_reader :string
9
+ def initialize(raw, server, string)
10
+ super(raw)
11
+ @server = server
12
+ @string = string
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Pong < Ping
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Privmsg < Message
5
+
6
+ # source of the message
7
+ attr_reader :source
8
+ # target of the message
9
+ attr_reader :target
10
+ # the message sent
11
+ attr_reader :message
12
+ def initialize(raw, source, target, message)
13
+ super(raw)
14
+ @source = source
15
+ @target = target
16
+ if(message =~ /^\001ACTION\s(.+)\001/)
17
+ @message = $1
18
+ @action = true
19
+ else
20
+ @message = message
21
+ @action = false
22
+ end
23
+ botnick = Models::Nick.filter(:botnick => true).first
24
+ if(botnick)
25
+ @addressed = @message =~ /^#{botnick.nick}/i
26
+ else
27
+ @addressed = false
28
+ end
29
+ end
30
+
31
+ # Is message addressing the bot
32
+ def addressed?
33
+ return @addressed || is_private?
34
+ end
35
+
36
+ # Is this is private message
37
+ def is_private?
38
+ return @target.is_a?(Models::Nick)
39
+ end
40
+
41
+ # Is this a public message
42
+ def is_public?
43
+ return @target.is_a?(Model::Channel)
44
+ end
45
+
46
+ # Does the message contain colors
47
+ def is_colored?
48
+ return @message =~ /\cC\d\d?(?:,\d\d?)?/
49
+ end
50
+
51
+ # Message with coloring stripped
52
+ def message_nocolor
53
+ return @message.gsub(/\cC\d\d?(?:,\d\d?)?/, '')
54
+ end
55
+
56
+ # Is this message an action message
57
+ def is_action?
58
+ @action
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,17 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Quit < Message
5
+ # nick that quit
6
+ attr_reader :nick
7
+ # quit message
8
+ attr_reader :message
9
+ def initialize(raw, nick, message)
10
+ super(raw)
11
+ @nick = nick
12
+ @message = message
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Topic < Message
5
+
6
+ # channel topic was set
7
+ attr_reader :channel
8
+ # topic messages
9
+ attr_reader :topic
10
+
11
+ def initialize(raw, channel, topic)
12
+ super(raw)
13
+ @channel = @channel
14
+ @topic = @topic
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class TopicInfo < Message
5
+ # channel topic info is for
6
+ attr_reader :channel
7
+ # last nick to set topic
8
+ attr_reader :nick
9
+ # time topic was set
10
+ attr_reader :time
11
+ def initialize(raw, channel, nick, time)
12
+ super(raw)
13
+ @channel = channel
14
+ @nick = nick
15
+ @time = time
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ module ModSpox
2
+ module Messages
3
+ module Incoming
4
+ class Welcome < Message
5
+ # server bot is connected to
6
+ attr_reader :server
7
+ # welcome message from server
8
+ attr_reader :message
9
+ # nick of the bot
10
+ attr_reader :nick
11
+ # username of the bot
12
+ attr_reader :username
13
+ # hostname of the bot
14
+ attr_reader :hostname
15
+ def initialize(raw, server, message, nick, username, hostname)
16
+ super(raw)
17
+ @server = server
18
+ @message = message
19
+ @nick = nick
20
+ @username = username
21
+ @hostname = hostname
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end