mod_spox 0.0.4 → 0.0.5

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 (122) hide show
  1. data/CHANGELOG +16 -0
  2. data/INSTALL +4 -1
  3. data/bin/mod_spox +3 -1
  4. data/data/mod_spox/extras/AOLSpeak.rb +2 -2
  5. data/data/mod_spox/extras/AutoKick.rb +3 -8
  6. data/data/mod_spox/extras/AutoMode.rb +135 -0
  7. data/data/mod_spox/extras/EightBall.rb +1 -0
  8. data/data/mod_spox/extras/Headers.rb +4 -3
  9. data/data/mod_spox/extras/PhpFuncLookup.rb +14 -11
  10. data/data/mod_spox/extras/Roulette.rb +3 -3
  11. data/data/mod_spox/extras/Search.rb +3 -2
  12. data/data/mod_spox/extras/Talk.rb +1 -9
  13. data/data/mod_spox/extras/Translate.rb +3 -3
  14. data/data/mod_spox/extras/UrbanDictionary.rb +5 -3
  15. data/data/mod_spox/extras/Weather.rb +5 -4
  16. data/data/mod_spox/plugins/Authenticator.rb +2 -2
  17. data/data/mod_spox/plugins/Banner.rb +207 -2
  18. data/data/mod_spox/plugins/Helper.rb +1 -1
  19. data/data/mod_spox/plugins/PluginLoader.rb +22 -6
  20. data/data/mod_spox/plugins/Triggers.rb +6 -4
  21. data/lib/mod_spox/Action.rb +2 -0
  22. data/lib/mod_spox/BaseConfig.rb +2 -0
  23. data/lib/mod_spox/Bot.rb +32 -6
  24. data/lib/mod_spox/BotConfig.rb +3 -0
  25. data/lib/mod_spox/Cache.rb +57 -0
  26. data/lib/mod_spox/ConfigurationWizard.rb +6 -2
  27. data/lib/mod_spox/Helpers.rb +36 -18
  28. data/lib/mod_spox/Loader.rb +5 -54
  29. data/lib/mod_spox/Logger.rb +49 -3
  30. data/lib/mod_spox/MessageFactory.rb +5 -0
  31. data/lib/mod_spox/Monitors.rb +14 -12
  32. data/lib/mod_spox/Pipeline.rb +38 -6
  33. data/lib/mod_spox/Plugin.rb +3 -0
  34. data/lib/mod_spox/PluginHolder.rb +22 -0
  35. data/lib/mod_spox/PluginManager.rb +123 -25
  36. data/lib/mod_spox/Pool.rb +52 -23
  37. data/lib/mod_spox/Socket.rb +21 -10
  38. data/lib/mod_spox/Timer.rb +32 -6
  39. data/lib/mod_spox/handlers/BadNick.rb +2 -0
  40. data/lib/mod_spox/handlers/Bounce.rb +3 -0
  41. data/lib/mod_spox/handlers/Created.rb +2 -0
  42. data/lib/mod_spox/handlers/Handler.rb +5 -0
  43. data/lib/mod_spox/handlers/Invite.rb +2 -0
  44. data/lib/mod_spox/handlers/Join.rb +21 -5
  45. data/lib/mod_spox/handlers/Kick.rb +2 -0
  46. data/lib/mod_spox/handlers/LuserChannels.rb +2 -0
  47. data/lib/mod_spox/handlers/LuserClient.rb +1 -0
  48. data/lib/mod_spox/handlers/LuserMe.rb +1 -0
  49. data/lib/mod_spox/handlers/LuserOp.rb +2 -0
  50. data/lib/mod_spox/handlers/LuserUnknown.rb +2 -0
  51. data/lib/mod_spox/handlers/Mode.rb +2 -0
  52. data/lib/mod_spox/handlers/Motd.rb +5 -2
  53. data/lib/mod_spox/handlers/MyInfo.rb +2 -0
  54. data/lib/mod_spox/handlers/Names.rb +5 -1
  55. data/lib/mod_spox/handlers/Nick.rb +2 -0
  56. data/lib/mod_spox/handlers/NickInUse.rb +2 -0
  57. data/lib/mod_spox/handlers/Notice.rb +16 -4
  58. data/lib/mod_spox/handlers/Part.rb +2 -0
  59. data/lib/mod_spox/handlers/Ping.rb +2 -0
  60. data/lib/mod_spox/handlers/Pong.rb +2 -0
  61. data/lib/mod_spox/handlers/Privmsg.rb +16 -4
  62. data/lib/mod_spox/handlers/Quit.rb +2 -0
  63. data/lib/mod_spox/handlers/Topic.rb +2 -0
  64. data/lib/mod_spox/handlers/Welcome.rb +3 -0
  65. data/lib/mod_spox/handlers/Who.rb +3 -1
  66. data/lib/mod_spox/handlers/Whois.rb +8 -0
  67. data/lib/mod_spox/handlers/YourHost.rb +2 -0
  68. data/lib/mod_spox/messages/Messages.rb +6 -0
  69. data/lib/mod_spox/messages/incoming/BadNick.rb +1 -0
  70. data/lib/mod_spox/messages/incoming/Bounce.rb +1 -0
  71. data/lib/mod_spox/messages/incoming/Created.rb +1 -0
  72. data/lib/mod_spox/messages/incoming/Invite.rb +1 -0
  73. data/lib/mod_spox/messages/incoming/Join.rb +1 -0
  74. data/lib/mod_spox/messages/incoming/Kick.rb +1 -0
  75. data/lib/mod_spox/messages/incoming/LuserChannels.rb +1 -0
  76. data/lib/mod_spox/messages/incoming/LuserClient.rb +1 -0
  77. data/lib/mod_spox/messages/incoming/LuserMe.rb +1 -0
  78. data/lib/mod_spox/messages/incoming/LuserOp.rb +1 -0
  79. data/lib/mod_spox/messages/incoming/LuserUnknown.rb +1 -0
  80. data/lib/mod_spox/messages/incoming/Mode.rb +1 -0
  81. data/lib/mod_spox/messages/incoming/Motd.rb +1 -0
  82. data/lib/mod_spox/messages/incoming/MyInfo.rb +1 -0
  83. data/lib/mod_spox/messages/incoming/Names.rb +1 -0
  84. data/lib/mod_spox/messages/incoming/Nick.rb +1 -0
  85. data/lib/mod_spox/messages/incoming/NickInUse.rb +1 -0
  86. data/lib/mod_spox/messages/incoming/Notice.rb +1 -0
  87. data/lib/mod_spox/messages/incoming/Part.rb +1 -0
  88. data/lib/mod_spox/messages/incoming/Ping.rb +1 -0
  89. data/lib/mod_spox/messages/incoming/Pong.rb +1 -0
  90. data/lib/mod_spox/messages/incoming/Privmsg.rb +1 -0
  91. data/lib/mod_spox/messages/incoming/Quit.rb +1 -0
  92. data/lib/mod_spox/messages/incoming/Topic.rb +1 -0
  93. data/lib/mod_spox/messages/incoming/TopicInfo.rb +1 -0
  94. data/lib/mod_spox/messages/incoming/Welcome.rb +1 -0
  95. data/lib/mod_spox/messages/incoming/Who.rb +1 -0
  96. data/lib/mod_spox/messages/incoming/Whois.rb +1 -0
  97. data/lib/mod_spox/messages/incoming/YourHost.rb +1 -0
  98. data/lib/mod_spox/messages/internal/NickRequest.rb +1 -0
  99. data/lib/mod_spox/messages/internal/NickResponse.rb +1 -0
  100. data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +1 -0
  101. data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +1 -0
  102. data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +1 -0
  103. data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +1 -0
  104. data/lib/mod_spox/messages/internal/PluginReload.rb +10 -0
  105. data/lib/mod_spox/messages/internal/PluginRequest.rb +1 -0
  106. data/lib/mod_spox/messages/internal/PluginResponse.rb +1 -0
  107. data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +1 -0
  108. data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +1 -0
  109. data/lib/mod_spox/messages/internal/StatusResponse.rb +1 -0
  110. data/lib/mod_spox/messages/internal/TimerAdd.rb +1 -0
  111. data/lib/mod_spox/messages/internal/TimerClear.rb +8 -0
  112. data/lib/mod_spox/messages/internal/TimerResponse.rb +1 -0
  113. data/lib/mod_spox/messages/outgoing/Away.rb +1 -0
  114. data/lib/mod_spox/messages/outgoing/Notice.rb +1 -0
  115. data/lib/mod_spox/messages/outgoing/Ping.rb +1 -0
  116. data/lib/mod_spox/messages/outgoing/Quit.rb +1 -0
  117. data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
  118. data/lib/mod_spox/models/Models.rb +4 -0
  119. data/lib/mod_spox/models/Nick.rb +9 -0
  120. data/lib/mod_spox/models/Setting.rb +3 -5
  121. data/lib/mod_spox/models/Signature.rb +2 -3
  122. metadata +8 -2
@@ -1,3 +1,10 @@
1
+ ['mod_spox/Logger',
2
+ 'mod_spox/Pipeline',
3
+ 'mod_spox/Pool',
4
+ 'mod_spox/Action',
5
+ 'mod_spox/Exceptions',
6
+ 'mod_spox/Monitors'].each{|f|require f}
7
+
1
8
  module ModSpox
2
9
 
3
10
  class Timer < Pool
@@ -12,10 +19,13 @@ module ModSpox
12
19
  @monitor = Monitors::Timer.new
13
20
  @thread = nil
14
21
  @stop_timer = false
22
+ @owners = {}
23
+ @owners_lock = Mutex.new
15
24
  {:Internal_TimerAdd => :add_message,
16
- :Internal_TimerRemove => :remove_message}.each_pair{|type,method|
25
+ :Internal_TimerRemove => :remove_message,
26
+ :Internal_TimerClear => :clear}.each_pair do |type,method|
17
27
  @pipeline.hook(self, method, type)
18
- }
28
+ end
19
29
  start_pool
20
30
  end
21
31
 
@@ -29,7 +39,12 @@ module ModSpox
29
39
  # Add a recurring code block
30
40
  def add_message(message)
31
41
  Logger.log("New block is being added to the timer", 15)
32
- action = add(message.period, message.once, message.data, &message.block)
42
+ action = nil
43
+ @owners_lock.synchronize do
44
+ action = add(message.period, message.once, message.data, &message.block)
45
+ @owners[message.requester.name.to_sym] = [] unless @owners.has_key?(message.requester.name.to_sym)
46
+ @owners[message.requester.name.to_sym] << action
47
+ end
33
48
  begin
34
49
  @pipeline << Messages::Internal::TimerResponse.new(message.requester, action, true, message.id)
35
50
  Logger.log("New block was successfully added to the timer", 15)
@@ -102,9 +117,20 @@ module ModSpox
102
117
  end
103
118
 
104
119
  # Clears all actions in the timer's queue
105
- def clear
106
- @queue.clear
107
- @timers.clear
120
+ def clear(message=nil)
121
+ if(message.nil? || message.plugin.nil?)
122
+ @queue.clear
123
+ @timers.clear
124
+ @owners.clear
125
+ else
126
+ @owners_lock.synchronize do
127
+ if(@owners.has_key?(message.plugin))
128
+ @owners[message.plugin].each do |action|
129
+ remove(action)
130
+ end
131
+ end
132
+ end
133
+ end
108
134
  end
109
135
 
110
136
  private
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class BadNick < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::BadNick.new(string, $1)
10
11
  else
11
12
  Logger.log('Failed to process RPL_ERRORONEOUSNICK message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Bounce < Handler
@@ -8,6 +9,8 @@ module ModSpox
8
9
  def process(string)
9
10
  if(string =~ /:Try server (\S+), port (.+)$/)
10
11
  return Messages::Incoming::Bounce.new(string, $1, $2)
12
+ else
13
+ return nil
11
14
  end
12
15
  end
13
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Created < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::Created.new(string, $1)
10
11
  else
11
12
  Logger.log('Failed to parse RPL_CREATED message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/rfc2812'
1
2
  module ModSpox
2
3
  module Handlers
3
4
 
@@ -16,4 +17,8 @@ module ModSpox
16
17
  end
17
18
 
18
19
  end
20
+ end
21
+
22
+ Dir.new(File.dirname(__FILE__)).each do |file|
23
+ require File.dirname(__FILE__) + '/' + file if file =~ /\.rb$/
19
24
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Invite < Handler
@@ -12,6 +13,7 @@ module ModSpox
12
13
  return Messages::Incoming::Invite.new(string, source, target, channel)
13
14
  else
14
15
  Logger.log('Failed to parse INVITE message')
16
+ return nil
15
17
  end
16
18
  end
17
19
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Join < Handler
@@ -9,20 +10,35 @@ module ModSpox
9
10
  source = $1
10
11
  chan = $2
11
12
  if(source =~ /^(.+?)!(.+?)@(.+)$/)
13
+ do_save = false
12
14
  nick = find_model($1)
13
- nick.username = $2
14
- nick.address = $3
15
- nick.source = source
16
- nick.visible = true
17
- nick.save
15
+ unless(nick.username == $2)
16
+ nick.username == $2
17
+ do_save = true
18
+ end
19
+ unless(nick.address == $3)
20
+ nick.address = $3
21
+ do_save = true
22
+ end
23
+ unless(nick.source == source)
24
+ nick.source = source
25
+ do_save = true
26
+ end
27
+ unless(nick.visible == true)
28
+ nick.visible = true
29
+ do_save = true
30
+ end
31
+ nick.save if do_save
18
32
  channel = find_model(chan)
19
33
  channel.nick_add(nick)
20
34
  return Messages::Incoming::Join.new(string, channel, nick)
21
35
  else
22
36
  Logger.log('Failed to parse source on JOIN message')
37
+ return nil
23
38
  end
24
39
  else
25
40
  Logger.log('Failed to parse JOIN message')
41
+ return nil
26
42
  end
27
43
  end
28
44
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Kick < Handler
@@ -17,6 +18,7 @@ module ModSpox
17
18
  return Messages::Incoming::Kick.new(string, channel, kicker, kickee, reason)
18
19
  else
19
20
  Logger.log('Failed to process KICK message')
21
+ return nil
20
22
  end
21
23
  end
22
24
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class LuserChannels < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::LuserChannels.new(string, $1.to_i)
10
11
  else
11
12
  Logger.log('Failed to match RPL_LUSERCHANNELS message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class LuserClient < Handler
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class LuserMe < Handler
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class LuserOp < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::LuserOp.new(string, $1.to_i)
10
11
  else
11
12
  Logger.log('Failed to match RPL_LUSEROP message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class LuserUnknown < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::LuserUnknown.new(string, $1.to_i)
10
11
  else
11
12
  Logger.log('Failed to match RPL_LUSERUNKNOWN message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Mode < Handler
@@ -47,6 +48,7 @@ module ModSpox
47
48
  rescue Object => boom
48
49
  Logger.log("Failed to process MODE message. Reason: #{boom}")
49
50
  end
51
+ return nil
50
52
  end
51
53
  end
52
54
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Motd < Handler
@@ -12,17 +13,19 @@ module ModSpox
12
13
  if(string =~ /^:(\S+) #{RPL_MOTDSTART.to_s}.*?:-\s?(\S+)/)
13
14
  @motds[$1] = Array.new
14
15
  @raw[$1] = [string]
15
- return
16
+ return nil
16
17
  elsif(string =~ /^:(\S+) #{RPL_MOTD.to_s}.*?:-\s?(.+)$/)
17
18
  @motds[$1] << $2
18
19
  @raw[$1] << string
19
- return
20
+ return nil
20
21
  elsif(string =~ /^:(\S+) #{RPL_ENDOFMOTD.to_s}/)
21
22
  @raw[$1] << string
22
23
  message = Messages::Incoming::Motd.new(@raw[$1].join("\n"), @motds[$1].join("\n"), $1)
23
24
  @motds.delete($1)
24
25
  @raw.delete($1)
25
26
  return message
27
+ else
28
+ return nil
26
29
  end
27
30
  end
28
31
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class MyInfo < Handler
@@ -14,6 +15,7 @@ module ModSpox
14
15
  return Messages::Incoming::MyInfo.new(string, servername, version, usermodes, channelmodes)
15
16
  else
16
17
  Logger.log('Failed to match My Info message')
18
+ return nil
17
19
  end
18
20
  end
19
21
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Names < Handler
@@ -13,6 +14,7 @@ module ModSpox
13
14
  chan = $1
14
15
  nicks = $2
15
16
  @names[chan] = Array.new unless @names[chan]
17
+ @raw[chan] = Array.new unless @raw[chan]
16
18
  if(@raw[chan])
17
19
  @raw[chan] << string
18
20
  else
@@ -22,7 +24,7 @@ module ModSpox
22
24
  return nil
23
25
  elsif(string =~ /#{RPL_ENDOFNAMES}.*?(\S+) :/)
24
26
  chan = $1
25
- @raw[chan] << string
27
+ @raw[chan] << string if @raw.has_key?(chan)
26
28
  channel = find_model(chan)
27
29
  nicks = Array.new
28
30
  ops = Array.new
@@ -47,6 +49,8 @@ module ModSpox
47
49
  @names.delete(chan)
48
50
  @raw.delete(chan)
49
51
  return Messages::Incoming::Names.new(raw, channel, nicks, ops, voice)
52
+ else
53
+ return nil
50
54
  end
51
55
  end
52
56
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Nick < Handler
@@ -17,6 +18,7 @@ module ModSpox
17
18
  return Messages::Incoming::Nick.new(string, old_nick, new_nick)
18
19
  else
19
20
  Logger.log('Failed to parse NICK message')
21
+ return nil
20
22
  end
21
23
  end
22
24
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class NickInUse < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::NickInUse.new(string, $1)
10
11
  else
11
12
  Logger.log('Failed to parse RPL_NICKNAMEINUSE message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Notice < Handler
@@ -13,10 +14,20 @@ module ModSpox
13
14
  if(base_source =~ /\!/)
14
15
  source = find_model(base_source.gsub(/!.+$/, ''))
15
16
  if(base_source =~ /!(.+)@(.+)$/)
16
- source.username = $1
17
- source.address = $2
18
- source.source = base_source
19
- source.save
17
+ do_save = false
18
+ unless(source.username == $1)
19
+ source.username == $1
20
+ do_save = true
21
+ end
22
+ unless(source.address == $2)
23
+ source.address = $2
24
+ do_save = true
25
+ end
26
+ unless(source.source == base_source)
27
+ source.source = base_source
28
+ do_save = true
29
+ end
30
+ source.save if do_save
20
31
  end
21
32
  target = find_model(target)
22
33
  else
@@ -25,6 +36,7 @@ module ModSpox
25
36
  return Messages::Incoming::Notice.new(string, source, target, message)
26
37
  else
27
38
  Logger.log('Failed to match NOTICE message')
39
+ return nil
28
40
  end
29
41
  end
30
42
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Part < Handler
@@ -12,6 +13,7 @@ module ModSpox
12
13
  return Messages::Incoming::Part.new(string, channel, nick, $3)
13
14
  else
14
15
  Logger.log('Failed to parse PART message')
16
+ return nil
15
17
  end
16
18
  end
17
19
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Ping < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::Ping.new(string, $1, nil)
10
11
  else
11
12
  Logger.log('Failed to match PING message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Pong < Handler
@@ -9,6 +10,7 @@ module ModSpox
9
10
  return Messages::Incoming::Pong.new(string, $1, $2)
10
11
  else
11
12
  Logger.log('Failed to parse PONG message')
13
+ return nil
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Privmsg < Handler
@@ -12,15 +13,26 @@ module ModSpox
12
13
  base_source = $1
13
14
  source = find_model(base_source.gsub(/!.+$/, ''))
14
15
  if(base_source =~ /!(.+)@(.+)$/)
15
- source.username = $1
16
- source.address = $2
17
- source.source = base_source
18
- source.save
16
+ do_save = false
17
+ unless(source.username == $1)
18
+ source.username == $1
19
+ do_save = true
20
+ end
21
+ unless(source.address == $2)
22
+ source.address = $2
23
+ do_save = true
24
+ end
25
+ unless(source.source == base_source)
26
+ source.source = base_source
27
+ do_save = true
28
+ end
29
+ source.save if do_save
19
30
  end
20
31
  Models::NickChannel.find_or_create(:channel_id => target.pk, :nick_id => source.pk) if target.is_a?(ModSpox::Models::Channel)
21
32
  return Messages::Incoming::Privmsg.new(string, source, target, message)
22
33
  else
23
34
  Logger.log('Failed to match PRIVMSG message')
35
+ return nil
24
36
  end
25
37
  end
26
38
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Quit < Handler
@@ -14,6 +15,7 @@ module ModSpox
14
15
  return Messages::Incoming::Quit.new(string, nick, reason)
15
16
  else
16
17
  Logger.log('Failed to parse KICK message')
18
+ return nil
17
19
  end
18
20
  end
19
21
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Topic < Handler
@@ -21,6 +22,7 @@ module ModSpox
21
22
  return Messages::Incoming::TopicInfo.new(string, channel, nick, time)
22
23
  else
23
24
  Logger.log('Failed to parse TOPIC type string')
25
+ return nil
24
26
  end
25
27
  end
26
28
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Welcome < Handler
@@ -24,9 +25,11 @@ module ModSpox
24
25
  return Messages::Incoming::Welcome.new(string, server, message, nick, username, hostname)
25
26
  else
26
27
  Logger.log('Failed to match user string in welcome message')
28
+ return nil
27
29
  end
28
30
  else
29
31
  Logger.log('Failed to match welcome message')
32
+ return nil
30
33
  end
31
34
  end
32
35
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Who < Handler
@@ -44,6 +45,7 @@ module ModSpox
44
45
  Models::NickMode.filter(:channel_id => channel.pk, :nick_id => nick.pk).each{|m| m.destroy}
45
46
  end
46
47
  end
48
+ return nil
47
49
  elsif(string =~ /#{RPL_ENDOFWHO}\s\S+\s(\S+)\s/)
48
50
  location = $1
49
51
  loc = find_model(location)
@@ -54,8 +56,8 @@ module ModSpox
54
56
  return message
55
57
  else
56
58
  Logger.log('Failed to match RPL_WHO type message')
59
+ return nil
57
60
  end
58
- return nil
59
61
  end
60
62
  end
61
63
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class Whois < Handler
@@ -21,6 +22,7 @@ module ModSpox
21
22
  nick.real_name = $4
22
23
  @cache[$1] = Messages::Incoming::Whois.new(nick)
23
24
  @cache[$1].raw_push(string)
25
+ return nil
24
26
  elsif(string =~ /#{RPL_WHOISCHANNELS}\s\S+\s(\S+)\s:(.+)$/)
25
27
  nick = $1
26
28
  $2.split(/\s/).each{|chan|
@@ -35,18 +37,23 @@ module ModSpox
35
37
  end
36
38
  }
37
39
  @cache[$1].raw_push(string)
40
+ return nil
38
41
  elsif(string =~ /#{RPL_WHOISSERVER}\s\S+\s(\S+)\s(\S+)\s:(.+)$/)
39
42
  @cache[$1].nick.connected_to = $2
40
43
  @cache[$1].raw_push(string)
44
+ return nil
41
45
  elsif(string =~ /#{RPL_WHOISIDENTIFIED}\s\S+\s(\S+)\s/)
42
46
  @cache[$1].nick.auth.services_identified = true
43
47
  @cache[$1].raw_push(string)
48
+ return nil
44
49
  elsif(string =~ /#{RPL_WHOISIDLE}\s\S+\s(\S+)\s(\d+)\s(\d+)\s:(.+?),(.+?)/)
45
50
  @cache[$1].nick.seconds_idle = $2.to_i
46
51
  @cache[$1].nick.connected_at = Time.at($3.to_i)
47
52
  @cache[$1].raw_push(string)
53
+ return nil
48
54
  elsif(string =~ /#{RPL_WHOISOPERATOR}\s\S+\s(\S+)/)
49
55
  @cache[$1].raw_push(string)
56
+ return nil
50
57
  elsif(string =~ /#{RPL_ENDOFWHOIS}\s\S+\s(\S+)\s:/)
51
58
  @cache[$1].raw_push(string)
52
59
  message = @cache[$1]
@@ -56,6 +63,7 @@ module ModSpox
56
63
  return message
57
64
  else
58
65
  Logger.log('Failed to parse WHOIS type reply')
66
+ return nil
59
67
  end
60
68
  end
61
69
  end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/handlers/Handler'
1
2
  module ModSpox
2
3
  module Handlers
3
4
  class YourHost < Handler
@@ -10,6 +11,7 @@ module ModSpox
10
11
  return Messages::Incoming::YourHost.new(string, $1, $2)
11
12
  else
12
13
  Logger.log('Failed to match Your Host message')
14
+ return nil
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,6 @@
1
+ # Lazy loader for messages
2
+ ['incoming', 'outgoing', 'internal'].each do |dir|
3
+ Dir.new(File.dirname(__FILE__) + '/' + dir).each do |file|
4
+ require File.dirname(__FILE__) + '/' + dir + '/' + file if file =~ /\.rb$/
5
+ end
6
+ end
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming
@@ -1,3 +1,4 @@
1
+ require 'mod_spox/messages/incoming/Message'
1
2
  module ModSpox
2
3
  module Messages
3
4
  module Incoming