mod_spox 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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