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.
Files changed (268) hide show
  1. data/CHANGELOG +174 -0
  2. data/INSTALL +15 -0
  3. data/LICENSE +674 -0
  4. data/README.rdoc +73 -0
  5. data/bin/mod_spox +112 -0
  6. data/data/mod_spox/extras/AOLSpeak.rb +257 -0
  7. data/data/mod_spox/extras/AutoKick.rb +152 -0
  8. data/data/mod_spox/extras/AutoMode.rb +122 -0
  9. data/data/mod_spox/extras/AutoRejoin.rb +37 -0
  10. data/data/mod_spox/extras/Bash.rb +55 -0
  11. data/data/mod_spox/extras/Bouncer.rb +220 -0
  12. data/data/mod_spox/extras/Bullshit.rb +19 -0
  13. data/data/mod_spox/extras/Bytes.rb +11 -0
  14. data/data/mod_spox/extras/Confess.rb +244 -0
  15. data/data/mod_spox/extras/DCC.rb +182 -0
  16. data/data/mod_spox/extras/DevWatch.rb +153 -0
  17. data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
  18. data/data/mod_spox/extras/EightBall.rb +33 -0
  19. data/data/mod_spox/extras/FML.rb +35 -0
  20. data/data/mod_spox/extras/FloodKicker.rb +129 -0
  21. data/data/mod_spox/extras/Fortune.rb +76 -0
  22. data/data/mod_spox/extras/GoogleIt.rb +13 -0
  23. data/data/mod_spox/extras/Headers.rb +59 -0
  24. data/data/mod_spox/extras/Karma.rb +302 -0
  25. data/data/mod_spox/extras/Locator.rb +44 -0
  26. data/data/mod_spox/extras/Logger.rb +182 -0
  27. data/data/mod_spox/extras/LolSpeak.rb +21 -0
  28. data/data/mod_spox/extras/NickServ.rb +84 -0
  29. data/data/mod_spox/extras/PhpCli.rb +308 -0
  30. data/data/mod_spox/extras/PhpFuncLookup.rb +297 -0
  31. data/data/mod_spox/extras/Pinger.rb +11 -0
  32. data/data/mod_spox/extras/Quotes.rb +79 -0
  33. data/data/mod_spox/extras/RegexTracker.rb +158 -0
  34. data/data/mod_spox/extras/Roulette.rb +267 -0
  35. data/data/mod_spox/extras/RubyCli.rb +93 -0
  36. data/data/mod_spox/extras/Search.rb +49 -0
  37. data/data/mod_spox/extras/Seen.rb +150 -0
  38. data/data/mod_spox/extras/Slashdot.rb +35 -0
  39. data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
  40. data/data/mod_spox/extras/Talk.rb +32 -0
  41. data/data/mod_spox/extras/Topten.rb +103 -0
  42. data/data/mod_spox/extras/TracTicket.rb +66 -0
  43. data/data/mod_spox/extras/Translate.rb +132 -0
  44. data/data/mod_spox/extras/Twitter.rb +458 -0
  45. data/data/mod_spox/extras/UrbanDictionary.rb +55 -0
  46. data/data/mod_spox/extras/Weather.rb +55 -0
  47. data/data/mod_spox/plugins/Authenticator.rb +289 -0
  48. data/data/mod_spox/plugins/Banner.rb +585 -0
  49. data/data/mod_spox/plugins/BotNick.rb +18 -0
  50. data/data/mod_spox/plugins/Helper.rb +49 -0
  51. data/data/mod_spox/plugins/Initializer.rb +35 -0
  52. data/data/mod_spox/plugins/Joiner.rb +23 -0
  53. data/data/mod_spox/plugins/Nicker.rb +14 -0
  54. data/data/mod_spox/plugins/Parter.rb +23 -0
  55. data/data/mod_spox/plugins/Permissions.rb +60 -0
  56. data/data/mod_spox/plugins/PluginLoader.rb +180 -0
  57. data/data/mod_spox/plugins/Ponger.rb +70 -0
  58. data/data/mod_spox/plugins/PoolConfig.rb +52 -0
  59. data/data/mod_spox/plugins/Quitter.rb +15 -0
  60. data/data/mod_spox/plugins/Servers.rb +57 -0
  61. data/data/mod_spox/plugins/Status.rb +31 -0
  62. data/data/mod_spox/plugins/Triggers.rb +85 -0
  63. data/lib/mod_spox/BaseConfig.rb +51 -0
  64. data/lib/mod_spox/Bot.rb +604 -0
  65. data/lib/mod_spox/BotConfig.rb +65 -0
  66. data/lib/mod_spox/ConfigurationWizard.rb +180 -0
  67. data/lib/mod_spox/Database.rb +51 -0
  68. data/lib/mod_spox/Exceptions.rb +84 -0
  69. data/lib/mod_spox/Helpers.rb +122 -0
  70. data/lib/mod_spox/Loader.rb +60 -0
  71. data/lib/mod_spox/Logger.rb +37 -0
  72. data/lib/mod_spox/MessageFactory.rb +112 -0
  73. data/lib/mod_spox/Pipeline.rb +207 -0
  74. data/lib/mod_spox/Plugin.rb +97 -0
  75. data/lib/mod_spox/PluginHolder.rb +22 -0
  76. data/lib/mod_spox/PluginManager.rb +257 -0
  77. data/lib/mod_spox/PriorityQueue.rb +69 -0
  78. data/lib/mod_spox/Socket.rb +201 -0
  79. data/lib/mod_spox/Sockets.rb +226 -0
  80. data/lib/mod_spox/Timer.rb +60 -0
  81. data/lib/mod_spox/Version.rb +14 -0
  82. data/lib/mod_spox/handlers/BadNick.rb +19 -0
  83. data/lib/mod_spox/handlers/Bounce.rb +24 -0
  84. data/lib/mod_spox/handlers/Created.rb +27 -0
  85. data/lib/mod_spox/handlers/Handler.rb +39 -0
  86. data/lib/mod_spox/handlers/Invite.rb +28 -0
  87. data/lib/mod_spox/handlers/Join.rb +38 -0
  88. data/lib/mod_spox/handlers/Kick.rb +36 -0
  89. data/lib/mod_spox/handlers/LuserChannels.rb +19 -0
  90. data/lib/mod_spox/handlers/LuserClient.rb +18 -0
  91. data/lib/mod_spox/handlers/LuserMe.rb +16 -0
  92. data/lib/mod_spox/handlers/LuserOp.rb +19 -0
  93. data/lib/mod_spox/handlers/LuserUnknown.rb +19 -0
  94. data/lib/mod_spox/handlers/Mode.rb +62 -0
  95. data/lib/mod_spox/handlers/Motd.rb +38 -0
  96. data/lib/mod_spox/handlers/MyInfo.rb +24 -0
  97. data/lib/mod_spox/handlers/Names.rb +86 -0
  98. data/lib/mod_spox/handlers/Nick.rb +50 -0
  99. data/lib/mod_spox/handlers/NickInUse.rb +19 -0
  100. data/lib/mod_spox/handlers/Notice.rb +35 -0
  101. data/lib/mod_spox/handlers/Part.rb +39 -0
  102. data/lib/mod_spox/handlers/Ping.rb +25 -0
  103. data/lib/mod_spox/handlers/Pong.rb +23 -0
  104. data/lib/mod_spox/handlers/Privmsg.rb +39 -0
  105. data/lib/mod_spox/handlers/Quit.rb +29 -0
  106. data/lib/mod_spox/handlers/Topic.rb +38 -0
  107. data/lib/mod_spox/handlers/Welcome.rb +30 -0
  108. data/lib/mod_spox/handlers/Who.rb +83 -0
  109. data/lib/mod_spox/handlers/Whois.rb +117 -0
  110. data/lib/mod_spox/handlers/YourHost.rb +20 -0
  111. data/lib/mod_spox/messages/Messages.rb +6 -0
  112. data/lib/mod_spox/messages/incoming/BadNick.rb +16 -0
  113. data/lib/mod_spox/messages/incoming/Bounce.rb +18 -0
  114. data/lib/mod_spox/messages/incoming/Created.rb +15 -0
  115. data/lib/mod_spox/messages/incoming/Invite.rb +21 -0
  116. data/lib/mod_spox/messages/incoming/Join.rb +19 -0
  117. data/lib/mod_spox/messages/incoming/Kick.rb +26 -0
  118. data/lib/mod_spox/messages/incoming/LuserChannels.rb +15 -0
  119. data/lib/mod_spox/messages/incoming/LuserClient.rb +24 -0
  120. data/lib/mod_spox/messages/incoming/LuserMe.rb +18 -0
  121. data/lib/mod_spox/messages/incoming/LuserOp.rb +15 -0
  122. data/lib/mod_spox/messages/incoming/LuserUnknown.rb +15 -0
  123. data/lib/mod_spox/messages/incoming/Message.rb +22 -0
  124. data/lib/mod_spox/messages/incoming/Mode.rb +42 -0
  125. data/lib/mod_spox/messages/incoming/Motd.rb +18 -0
  126. data/lib/mod_spox/messages/incoming/MyInfo.rb +24 -0
  127. data/lib/mod_spox/messages/incoming/Names.rb +24 -0
  128. data/lib/mod_spox/messages/incoming/Nick.rb +26 -0
  129. data/lib/mod_spox/messages/incoming/NickInUse.rb +15 -0
  130. data/lib/mod_spox/messages/incoming/Notice.rb +9 -0
  131. data/lib/mod_spox/messages/incoming/Part.rb +21 -0
  132. data/lib/mod_spox/messages/incoming/Ping.rb +18 -0
  133. data/lib/mod_spox/messages/incoming/Pong.rb +9 -0
  134. data/lib/mod_spox/messages/incoming/Privmsg.rb +90 -0
  135. data/lib/mod_spox/messages/incoming/Quit.rb +18 -0
  136. data/lib/mod_spox/messages/incoming/Topic.rb +21 -0
  137. data/lib/mod_spox/messages/incoming/TopicInfo.rb +21 -0
  138. data/lib/mod_spox/messages/incoming/Welcome.rb +27 -0
  139. data/lib/mod_spox/messages/incoming/Who.rb +18 -0
  140. data/lib/mod_spox/messages/incoming/Whois.rb +49 -0
  141. data/lib/mod_spox/messages/incoming/YourHost.rb +18 -0
  142. data/lib/mod_spox/messages/internal/BotInitialized.rb +11 -0
  143. data/lib/mod_spox/messages/internal/ChangeNick.rb +15 -0
  144. data/lib/mod_spox/messages/internal/Connected.rb +20 -0
  145. data/lib/mod_spox/messages/internal/ConnectionFailed.rb +23 -0
  146. data/lib/mod_spox/messages/internal/DCCListener.rb +12 -0
  147. data/lib/mod_spox/messages/internal/DCCRequest.rb +12 -0
  148. data/lib/mod_spox/messages/internal/DCCSocket.rb +19 -0
  149. data/lib/mod_spox/messages/internal/Disconnected.rb +8 -0
  150. data/lib/mod_spox/messages/internal/Disconnecting.rb +8 -0
  151. data/lib/mod_spox/messages/internal/EstablishConnection.rb +22 -0
  152. data/lib/mod_spox/messages/internal/HaltBot.rb +8 -0
  153. data/lib/mod_spox/messages/internal/NickRequest.rb +9 -0
  154. data/lib/mod_spox/messages/internal/NickResponse.rb +15 -0
  155. data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +21 -0
  156. data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +17 -0
  157. data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +14 -0
  158. data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +18 -0
  159. data/lib/mod_spox/messages/internal/PluginReload.rb +18 -0
  160. data/lib/mod_spox/messages/internal/PluginRequest.rb +18 -0
  161. data/lib/mod_spox/messages/internal/PluginResponse.rb +21 -0
  162. data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +9 -0
  163. data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +9 -0
  164. data/lib/mod_spox/messages/internal/PluginsReady.rb +10 -0
  165. data/lib/mod_spox/messages/internal/QueueSocket.rb +8 -0
  166. data/lib/mod_spox/messages/internal/Reconnect.rb +8 -0
  167. data/lib/mod_spox/messages/internal/Request.rb +15 -0
  168. data/lib/mod_spox/messages/internal/Response.rb +15 -0
  169. data/lib/mod_spox/messages/internal/Shutdown.rb +8 -0
  170. data/lib/mod_spox/messages/internal/SignaturesUpdate.rb +8 -0
  171. data/lib/mod_spox/messages/internal/StatusRequest.rb +10 -0
  172. data/lib/mod_spox/messages/internal/StatusResponse.rb +18 -0
  173. data/lib/mod_spox/messages/internal/TimerAdd.rb +36 -0
  174. data/lib/mod_spox/messages/internal/TimerClear.rb +16 -0
  175. data/lib/mod_spox/messages/internal/TimerRemove.rb +23 -0
  176. data/lib/mod_spox/messages/internal/TimerResponse.rb +34 -0
  177. data/lib/mod_spox/messages/internal/TriggersUpdate.rb +8 -0
  178. data/lib/mod_spox/messages/internal/UnqueueSocket.rb +8 -0
  179. data/lib/mod_spox/messages/outgoing/Admin.rb +15 -0
  180. data/lib/mod_spox/messages/outgoing/Away.rb +11 -0
  181. data/lib/mod_spox/messages/outgoing/ChannelMode.rb +25 -0
  182. data/lib/mod_spox/messages/outgoing/Connect.rb +24 -0
  183. data/lib/mod_spox/messages/outgoing/Die.rb +9 -0
  184. data/lib/mod_spox/messages/outgoing/Info.rb +15 -0
  185. data/lib/mod_spox/messages/outgoing/Invite.rb +19 -0
  186. data/lib/mod_spox/messages/outgoing/Ison.rb +15 -0
  187. data/lib/mod_spox/messages/outgoing/Join.rb +19 -0
  188. data/lib/mod_spox/messages/outgoing/Kick.rb +23 -0
  189. data/lib/mod_spox/messages/outgoing/Kill.rb +19 -0
  190. data/lib/mod_spox/messages/outgoing/Links.rb +19 -0
  191. data/lib/mod_spox/messages/outgoing/List.rb +19 -0
  192. data/lib/mod_spox/messages/outgoing/Lusers.rb +19 -0
  193. data/lib/mod_spox/messages/outgoing/Motd.rb +16 -0
  194. data/lib/mod_spox/messages/outgoing/Names.rb +20 -0
  195. data/lib/mod_spox/messages/outgoing/Nick.rb +16 -0
  196. data/lib/mod_spox/messages/outgoing/Notice.rb +12 -0
  197. data/lib/mod_spox/messages/outgoing/Oper.rb +19 -0
  198. data/lib/mod_spox/messages/outgoing/Part.rb +19 -0
  199. data/lib/mod_spox/messages/outgoing/Pass.rb +16 -0
  200. data/lib/mod_spox/messages/outgoing/Ping.rb +11 -0
  201. data/lib/mod_spox/messages/outgoing/Pong.rb +17 -0
  202. data/lib/mod_spox/messages/outgoing/Privmsg.rb +43 -0
  203. data/lib/mod_spox/messages/outgoing/Quit.rb +11 -0
  204. data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
  205. data/lib/mod_spox/messages/outgoing/Rehash.rb +9 -0
  206. data/lib/mod_spox/messages/outgoing/Restart.rb +9 -0
  207. data/lib/mod_spox/messages/outgoing/ServList.rb +19 -0
  208. data/lib/mod_spox/messages/outgoing/Simple.rb +12 -0
  209. data/lib/mod_spox/messages/outgoing/Squery.rb +19 -0
  210. data/lib/mod_spox/messages/outgoing/Squit.rb +19 -0
  211. data/lib/mod_spox/messages/outgoing/Stats.rb +18 -0
  212. data/lib/mod_spox/messages/outgoing/Summon.rb +23 -0
  213. data/lib/mod_spox/messages/outgoing/Time.rb +15 -0
  214. data/lib/mod_spox/messages/outgoing/Topic.rb +19 -0
  215. data/lib/mod_spox/messages/outgoing/Trace.rb +15 -0
  216. data/lib/mod_spox/messages/outgoing/Unaway.rb +9 -0
  217. data/lib/mod_spox/messages/outgoing/User.rb +23 -0
  218. data/lib/mod_spox/messages/outgoing/UserHost.rb +15 -0
  219. data/lib/mod_spox/messages/outgoing/UserMode.rb +19 -0
  220. data/lib/mod_spox/messages/outgoing/Users.rb +15 -0
  221. data/lib/mod_spox/messages/outgoing/Version.rb +16 -0
  222. data/lib/mod_spox/messages/outgoing/Who.rb +23 -0
  223. data/lib/mod_spox/messages/outgoing/WhoWas.rb +23 -0
  224. data/lib/mod_spox/messages/outgoing/Whois.rb +19 -0
  225. data/lib/mod_spox/migrations/001_initialize_models.rb +115 -0
  226. data/lib/mod_spox/migrations/002_persistent_sigs.rb +14 -0
  227. data/lib/mod_spox/migrations/003_auth_restructure.rb +31 -0
  228. data/lib/mod_spox/migrations/004_mode_index_fix.rb +18 -0
  229. data/lib/mod_spox/migrations/005_nick_mode_nopark.rb +18 -0
  230. data/lib/mod_spox/models/Auth.rb +65 -0
  231. data/lib/mod_spox/models/AuthMask.rb +13 -0
  232. data/lib/mod_spox/models/Channel.rb +89 -0
  233. data/lib/mod_spox/models/Config.rb +30 -0
  234. data/lib/mod_spox/models/Group.rb +30 -0
  235. data/lib/mod_spox/models/Models.rb +4 -0
  236. data/lib/mod_spox/models/Nick.rb +195 -0
  237. data/lib/mod_spox/models/NickMode.rb +32 -0
  238. data/lib/mod_spox/models/Server.rb +27 -0
  239. data/lib/mod_spox/models/Setting.rb +52 -0
  240. data/lib/mod_spox/models/Signature.rb +52 -0
  241. data/lib/mod_spox/models/Trigger.rb +9 -0
  242. data/lib/mod_spox/rfc2812.rb +49 -0
  243. data/populate_gemspec.rb +15 -0
  244. data/tests/BotHolder.rb +24 -0
  245. data/tests/handlers/tc_BadNick.rb +21 -0
  246. data/tests/handlers/tc_Created.rb +24 -0
  247. data/tests/handlers/tc_Invite.rb +50 -0
  248. data/tests/handlers/tc_Join.rb +33 -0
  249. data/tests/handlers/tc_Kick.rb +32 -0
  250. data/tests/handlers/tc_Mode.rb +85 -0
  251. data/tests/handlers/tc_Names.rb +35 -0
  252. data/tests/handlers/tc_Nick.rb +55 -0
  253. data/tests/handlers/tc_Part.rb +44 -0
  254. data/tests/handlers/tc_Ping.rb +40 -0
  255. data/tests/handlers/tc_Pong.rb +28 -0
  256. data/tests/handlers/tc_Privmsg.rb +85 -0
  257. data/tests/handlers/tc_Quit.rb +40 -0
  258. data/tests/handlers/tc_Who.rb +50 -0
  259. data/tests/handlers/tc_Whois.rb +61 -0
  260. data/tests/models/tc_Auth.rb +39 -0
  261. data/tests/models/tc_Channel.rb +52 -0
  262. data/tests/models/tc_Config.rb +19 -0
  263. data/tests/models/tc_Nick.rb +144 -0
  264. data/tests/models/tc_NickMode.rb +40 -0
  265. data/tests/models/tc_Setting.rb +21 -0
  266. data/tests/models/tc_Signature.rb +14 -0
  267. data/tests/run_tests.rb +6 -0
  268. metadata +362 -0
data/README.rdoc ADDED
@@ -0,0 +1,73 @@
1
+ == mod_spox IRC bot
2
+
3
+ mod_spox is an IRC robot, written in Ruby, and will completely change your prospective on life. mod_spox is proof that doing nothing is complex, and that doing nothing can, in fact, be doing something.
4
+
5
+ The core of mod_spox is basically a framework for interacting with IRC. By itself, the bot does nothing of value, aside from sucking up bandwidth and resources from the server it is connected to. The core bot can connect to a server, format information from the server, and send information back to the server properly. That's pretty much it.
6
+
7
+ The framework provided by mod_spox allows it to quickly transform from a useless bag of bytes to something entertaining, annoying, helpful, and aggravating, occasionally all at the same time. This transformation is accomplished through the use of plugins which use the framework to accomplish feats of greatness.
8
+
9
+ == Critical informations
10
+
11
+ * Author: spox <spox@rubyforge.org>
12
+ * {Dev Site}[http://dev.modspox.com]
13
+ * {Rubyforge}[http://rubyforge.org/projects/modspox]
14
+ * {GitHub}[http://github.com/spox/mod_spox/tree/master]
15
+
16
+ == Aquiring
17
+
18
+ * Gem: gem install mod_spox
19
+
20
+ == Aquiring current unstable
21
+
22
+ Gem:
23
+ gem sources -a http://gems.github.com
24
+ gem install spox-mod_spox
25
+
26
+ Source:
27
+ git clone git://github.com/spox/mod_spox.git
28
+ cd mod_spox/
29
+ gem build *.gemspec
30
+ gem install ./
31
+
32
+ == Requirements
33
+
34
+ * {Sequel}[http://sequel.rubyforge.org]
35
+ * {ActionTimer}[http://dev.modspox.com/~sine/ActionTimer]
36
+ * {ActionPool}[http://dev.modspox.com/~sine/ActionPool]
37
+ * {spockets}[http://dev.modspox.com/~sine/spockets]
38
+ * Database adapter of choice compatible with sequel
39
+
40
+ == Configuration
41
+
42
+ mod_spox --config
43
+
44
+ == Running
45
+
46
+ === Plain
47
+
48
+ mod_spox
49
+
50
+ === Debug to STDOUT
51
+
52
+ mod_spox -V info -d
53
+
54
+ === Daemonize with debug to file
55
+
56
+ mod_spox -V info -d /home/user/logfiles/mod_spox.log -D
57
+
58
+ == Extending
59
+
60
+ {Plugins HOWTO}[http://dev.modspox.com/trac/mod_spox/wiki/PluginHowto]
61
+
62
+ == Helping
63
+
64
+ Helpful things if you are feeling helpful:
65
+
66
+ * Report bugs
67
+ * Write unit tests
68
+ * New and/or useful plugins
69
+
70
+ == License
71
+
72
+ mod_spox is licensed under the GPLv3
73
+ Copyright (c) 2009 spox <spox@modspox.com>
data/bin/mod_spox ADDED
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ ## include our needed libraries ##
4
+
5
+ ['rubygems', 'sequel', 'thread', 'etc', 'getoptlong', 'logger'].each do |file|
6
+ begin
7
+ require file
8
+ rescue Object => boom
9
+ puts "ERROR: Failed to load required library: #{file}"
10
+ exit 1
11
+ end
12
+ end
13
+
14
+ ## optional libraries ##
15
+ begin
16
+ require 'fastthread'
17
+ rescue Object => boom
18
+ # ignore if not found #
19
+ end
20
+
21
+ require 'mod_spox/Version'
22
+
23
+ # lets get sequel setup like we want it #
24
+ require 'sequel/extensions/migration'
25
+ Sequel::Model.plugin :validation_helpers
26
+ Sequel::Model.plugin :schema
27
+ Sequel::Model.unrestrict_primary_key
28
+ # okay, lets go #
29
+
30
+ begin
31
+ require 'mod_spox/Loader'
32
+ rescue
33
+ puts 'ERROR: Failed to load mod_spox'
34
+ exit 1
35
+ end
36
+ include ModSpox
37
+
38
+ opts = GetoptLong.new(
39
+ ['--config', '-c', GetoptLong::NO_ARGUMENT],
40
+ ['--debug', '-d', GetoptLong::OPTIONAL_ARGUMENT],
41
+ ['--verbosity', '-V', GetoptLong::OPTIONAL_ARGUMENT],
42
+ ['--version', '-v', GetoptLong::NO_ARGUMENT],
43
+ ['--jdbc', '-j', GetoptLong::NO_ARGUMENT],
44
+ ['--help', '-h', GetoptLong::NO_ARGUMENT],
45
+ ['--path', '-p', GetoptLong::REQUIRED_ARGUMENT],
46
+ ['--daemon', '-D', GetoptLong::NO_ARGUMENT]
47
+ )
48
+ verbose = 0
49
+ opts.each do |opt, arg|
50
+ case opt
51
+ when '--help'
52
+ puts 'Usage: mod_spox [opts]'
53
+ puts '--config -c: starts configuration wizard'
54
+ puts '--path -p /config/path path to configuration directory'
55
+ puts '--jdbc -j use jdbc database driver (jruby)'
56
+ puts '--debug -d [logfile]: turns on debugging and outputs to file (default STDOUT)'
57
+ puts '--verbosity -V [(info|warn|fatal)]: verbosity of debug output (default fatal)'
58
+ puts '--deamon -D: daemonizes the process'
59
+ puts '--version -v: output bot version information'
60
+ puts '--help -h: print this help message'
61
+ exit
62
+ when '--version'
63
+ puts "mod_spox IRC bot version: #{$BOTVERSION}"
64
+ puts 'http://rubyforge.org/projects/modspox'
65
+ exit
66
+ when '--jdbc'
67
+ ModSpox.jdbc = true
68
+ begin
69
+ require 'jdbc/postgres'
70
+ rescue Object => boom
71
+ puts 'Failed to load JDBC Postgres gem'
72
+ exit 1
73
+ end
74
+ when '--debug'
75
+ if(arg && arg.gsub(' ', '').size > 0)
76
+ ModSpox.logto = arg
77
+ else
78
+ ModSpox.logto = $stdout
79
+ end
80
+ when '--config'
81
+ require 'mod_spox/ConfigurationWizard'
82
+ wizard = ConfigurationWizard.new
83
+ BotConfig.configured? ? wizard.update : wizard.run
84
+ exit
85
+ when '--path'
86
+ ModSpox.mod_spox_path = arg
87
+ when '--daemon'
88
+ ModSpox.daemon_bot = true
89
+ when '--verbosity'
90
+ if(arg && arg =~ /^(info|warn|error|fatal)$/)
91
+ ModSpox.loglevel = arg.to_sym
92
+ end
93
+ end
94
+ end
95
+
96
+ ModSpox.initialize_bot
97
+ require 'mod_spox/Bot'
98
+ if(ModSpox.daemon_bot)
99
+ if(RUBY_VERSION > '1.9.0')
100
+ Process.daemon if ModSpox.daemon_bot
101
+ else
102
+ begin
103
+ require 'daemons'
104
+ Daemons.daemonize
105
+ rescue Object
106
+ puts "ERROR: Failed to load daemons gem"
107
+ exit 1
108
+ end
109
+ end
110
+ end
111
+ bot = Bot.new
112
+ bot.run
@@ -0,0 +1,257 @@
1
+ class AOLSpeak < ModSpox::Plugin
2
+
3
+ include Models
4
+
5
+ def initialize(pipeline)
6
+ super
7
+ group = Group.find_or_create(:name => 'banner')
8
+ add_sig(:sig => 'aolspeak', :method => :aolspeak, :desc => 'AOL speak')
9
+ add_sig(:sig => 'aolkick (\S+) ?(\S+)?', :method => :aolkick, :desc => 'AOL speak kick', :group => group, :params => [:nick, :channel])
10
+ build_aolspeak
11
+ end
12
+
13
+ def aolspeak(message, params)
14
+ reply message.replyto, @aolspeak[rand(@aolspeak.size) - 1]
15
+ end
16
+
17
+ def aolkick(message, params)
18
+ if(params[:channel])
19
+ channel = Models::Channel.filter(:name => params[:channel]).first
20
+ else
21
+ channel = message.target
22
+ end
23
+ nick = Helpers.find_model(params[:nick], false)
24
+ if(channel && nick)
25
+ @pipeline << plugin_const(:Banner_Ban).new(nick, channel, :kickban, @aolspeak[rand(@aolspeak.size) - 1], 60, false, false)
26
+ else
27
+ reply message.replyto, "\2Error:\2 Failed to find channel: #{params[:channel]}" unless channel
28
+ reply message.replyto, "\2Error:\2 Failed to find nick: #{params[:nick]}" unless nick
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def build_aolspeak
35
+ @aolspeak = [
36
+ 'ALL OREAND THE GIFCHERRY BUSH DA BOON CHASED DA WHEASELGIFPASTECLITNUGGET SHIT]',
37
+ 'WH0A WHUT W00D PEEPUHL THEEENK IF DAY GN00 EYE WUZ A JEEEZUS FREEEK?!',
38
+ 'EYE WENT TO THE TRAK TO WAATCH THE PONYNUGGETS RHUN AROUND THE GIFPASTE',
39
+ 'MY MOM HAS A GARDUN WAREZ SHE GROZE KUMKUWAITS',
40
+ 'THERES AN ASSNUGGET 4 ALL YA JEWS AND HOMERSEXULESS AN ASSNUGGET 4 ALL YA JEWS AND HOMERSEXULES',
41
+ 'A DIQ IZ FER DISPENISING JIZZJ00CE IN DA CLITSAQ JIZZPOQIT',
42
+ 'NO WAY JAQNAD, EYE GOT ENOUGH OF DEM SHITSTAYN THINGYS FOR GNO MHORE',
43
+ 'EYE WHISH I COULD LIFT H�VY TINGS LYKE DOZE GUIZ ON TEEVHEE',
44
+ 'AOL E_MAILWAREZ IS 2 31337 FOR THE CLITSAQLIKES OFF MIZZEE',
45
+ 'SIMPSONS WIN95 THEME R0X! THOT ID LET Y\'ALL KNOWD LET YALL KNOWALL KNOW',
46
+ 'ITZ UHBOWT THAT TYME 4 ME 2 OHPEN UP THA P00PYTANG AND LET THA JIZPEACHBANANAHOLEJ00ZEZ PHLOE.',
47
+ 'H0W W00D J00 LYKE IT EEF EYE P00T MAH SAQ IN J00 MOUF?',
48
+ 'HAHAHAHAHHAH!!!! YOU ARE FUNNY IRC PEOPLE',
49
+ 'WHEN EYE GHO TO THE CLITGIFNUGGETPASTESHOPPINGSENTURS EYE UZE SHNUPPING C�RTZ',
50
+ 'SO, WHAT YOUR SAYING IS THE ECCENTRICITY OF THE AFORENAMED SAQ IS BEYOND A REASONABLE DOUBT, THE CORNACOPIA OF THE PLETHORA OF GENTALIA? DAYOM EYEM SMAERT!',
51
+ 'EYE KAN SPEEK IN MANNY DIVVRUNT LUNGAGAGES , MUCHAHASAQ',
52
+ 'GO RIGHT AHEAD CLITSAQLIQU0R',
53
+ 'H0W MUCH SAQ C00D A SAQNAD SAQ EEF A SAQNAD C00D SAQ NAD?',
54
+ 'WOT TYME IS CAPTCLIT ON EMM TEE VEE JAQCUMLAPPER?',
55
+ 'DEM FUXIN NIGRUXES BETTR STOP PLAYIN DAT LOUD MUSIK CUZ THE JEWISH KIDZ WIT DA LIDDLE DIKS N SAQS CAN\'T AFFORD 2 SPEDN MOR CASHES ON DA CLITSAQ ASSNUGGEX CEEDEEZN SAQS CANT AFFORD 2 SPEDN MOR CASHES ON DA CLITSAQ ASSNUGGEX CEEDEEZT AFFORD 2 SPEDN MOR CASHES ON DA CLITSAQ ASSNUGGEX CEEDEEZ',
56
+ 'WHAT UR J00 TOO FRAID UV DA UREET AOL_MAN?',
57
+ 'J00 N0 FUX WIF ME! EYELL BUST J00 IN THA GRILL NIG-NUGGET!LL BUST J00 IN THA GRILL NIG-NUGGET!',
58
+ 'IF J00 ORDER TODAY, YOU GET A GINSU KNIFE AND A SMOKELESS ASHTRAY',
59
+ 'MUSS BEE YER SPLEAN HURTIN CUZ I JUS BUSS A CAPP IN IT BIZZONITCHEZ',
60
+ 'THA S00P D00 J0UR IZ ASSCUNTJUICE WIF BROKKULLI AND BAKKIN NUGGEX',
61
+ 'I THOUGHT J00 GNU, CRUNCHYBONERFACEBOY',
62
+ 'HEHEHEH WHY DNOT YU GOE PISS ON YER MOMUHZPASTE CLITNUGGSAQ FUXBUDGET',
63
+ 'EYE GNEED SOME SUGARS SO EYE CAN RHUN UP AND DEWON THE HALLWAYZ WIF MUH BOOKZBAGZ WIF MUH KUNDUCKTORR',
64
+ 'THIS LITTLE NIGGIE WENT W3WP, W3WP, W3WP ALL DA WAY HIZ-OME',
65
+ 'J00 MUSS BOW DOWN, BIZZATCH',
66
+ 'EYE LYKE TO PUT LUTZ OF M-80Z IN MUH DOGZ BUTTNUGGETZSHIT',
67
+ 'FUQ ALL THA JIZZUM, EYEM GITTIN\' A LEG0 WAWPH3WL.M GITTIN A LEG0 WAWPH3WL. A LEG0 WAWPH3WL.',
68
+ 'IM CONSIERDRERING RALFING ON MY GIRLFRIENDS BIGG ASS, ANY ADVISE ON HOW 2 GET THA TIMINH RITE?',
69
+ 'WHY IT BE DAT GOTTA BE GOING AND DIZZN UP SOME OF DAT SHEET IN YOURMOMA"S LAP LIKE A NIGGA WIT SOME CAKE ALL OVER THEIR PANTSEATIN TITY HAIR OFF THEIR GRANDMOTHER"S DICK?',
70
+ 'W00D J00 LYKE TO SEE MUH RED DWARF? ITS BIG TOO',
71
+ 'NE1 OFFERING SHITZZZTIT??/???',
72
+ 'EYE DONT KNOW, MUH MOMUHZ CLITZAQ PARRTYREWMJUICE WUZ ALL FUQEDUP CUZ THE TOSGUIDEZ WERE ALL OVER MY PASTESHIT',
73
+ 'DAS RIGHT, ITZ DA SHITZ!!!!',
74
+ 'MUH MUDDAH SAD THAT SHE LYKES AOL CUZ OF ITZ CHATREWMZ AND SHIT BUT I LIKE CHAAATTINNG WITH YOU GUYS ON EYEARSEE AND DOWNLOADING NEKKKED PIXTURES OF HOMOSHEXJ00WALS AND J0UNGG BOYEEEZ',
75
+ 'I WNET TO JAHMEKKUH FOR VAYCAYSHUN ONEC AND DAY SED HEY MON AND SO I WUZ LIKE FUQSAQ J0UR ASSCLITSAX RASTANBOOEYZ!!! DEN DEY PUT MUHAYAZZ BACK ON DE PLAYNE HOME...',
76
+ 'DAT KICKSAQ ECK BOOME PROOOMISZEDCLIT UZ NIUDEALITIES AGAIN',
77
+ 'THEREZ THIAZS GUY AT #WAREZ-LAME AND HE SZYZ HIS BEST FRIENDZ AT MIDWAY WILL GIVE UZ BUTTALITIESZ THIAZS GUY AT #WAREZ-LAME AND HE SZYZ HIS BEST FRIENDZ AT MIDWAY WILL GIVE UZ BUTTALITIES',
78
+ 'WHAT THE HELL IZ GOIN ON ROUND THIS ALAME PLACE?',
79
+ 'OH YAH THAT WOULD R00L IF EYE DIDNT ARLEADY GNO THEM',
80
+ 'BUTTSNATCHFAGAZZNIGGR0XWAREZB0YWH0RE IS IN DA HAY-OH-WAY-OWSE',
81
+ 'FUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFUCKFU--MY FINGERS R TY-ERD',
82
+ 'WHUT IS THA FUKKKINASSLIQSAQFUXXX S00P D00 J00R',
83
+ 'H0LD 0NT0 J00R BITCHBUTTPUNXAYAZZ I NEED TO LIQDRINKSIP MY LAYMERSAQPASTE',
84
+ 'EYE PLEH DAT NIGGRUX GAME KEY EYE TOO AND MAN DO I SHIZZROQ WIT DAT MAYYUH CHIQSAQ',
85
+ 'PHEAL MUH PHLOAX, NIGGER0X!',
86
+ 'LIKE HOW CAN YOU TYPE FAG NUGGET CLIT-SAQ WARRIORS OF DOOM-FAGS WITHOUGH LAUGHING YOUR CLIT-SAQ OFF',
87
+ 'YER JUST A FAG NUGGET ASS BUDGET HERTZ AQUA VELVA CHEEZ WHIZ NAD SUQ CLITSAQ',
88
+ 'J00 BUTT SPANKER CLIT SAQ SUCKER ASS NUGGET SHOOTER WITH CHEEZ BACON AND LETTUCE',
89
+ 'WHERES THE ROOM SUPERVISOR? I NEED TO AXE HIM A KWESTYUN',
90
+ 'WHUT THA FUCK R J00 SHITTING, NIGGR0X?',
91
+ 'MUH SAQ IZ LOSING ITS WARP CONTAINMENT FIELD... EYEM GONA HAFTA EJECT THA CLIT-SAQS WARP CONTAINMENT FIELD... EYEM GONA HAFTA EJECT THA CLIT-SAQ',
92
+ 'JEA USERNETSAQ SAID HUMANBALLS SMOKENADS EEZ PLAY',
93
+ 'HEY OUDOWM DOO J00 TALX TO THAT CLITSAQ LIQER EDD BEWNM? HE IS THE COOLESST I LOVE THE COMBOOZAQ IN MK#!!!!!!!',
94
+ 'EYE JUST HOPE I DONT PFART UNDER THA COVERS LIKE THAT OTHER SLIT-SAQ WITH CHEEZ DID',
95
+ 'HEY DONT J00 B TELLING MY KRADDER FRENID SPUDZ JAQMEHAWFF TO SHUT UPP, D00DSAQNUTZ',
96
+ 'REAL? W0W CUZ I HERD THAT BUT IF J00 SAW IT TOO IT MUST TRUE BEE',
97
+ 'GL00 SUQZ DA NUTTSAQBUTTSMAQ GIVA DOGA BONE!',
98
+ 'I GOT GNU SHIT COMING OUT OF MY AYAZZ BITCHNUTZ',
99
+ 'ANYTHING NEW? ANYTHING NEW? DAMMIT ALL TO HELL, ANYTHING NEW?',
100
+ 'AND TOONNIGHT WE HAVE ANN ELITE INTURVIUW WIITH MRSSRS JOHN TURK NUMBAH 1-1,000,000',
101
+ 'SUP NIGGRUXSAQJIZZERZ',
102
+ 'BUTTCLITNUGGSAQ FAGJIZZREWMNUGGETKICK BUNG-G PUNK',
103
+ 'CLOSEHOLE FUNKEEBIDGEGREENAZZSAQPASTE',
104
+ 'ONE TYME EYE WENIT 2 THA SKEWL AND THEY TRIDE TO LERN MUH AYAZZ SUM CRAP BUT EYE KILLT DEM ALL CUZ DEY WUZ UHG-LEE',
105
+ 'WEREZ DAT NIGGRUX PHORMIKKAUH',
106
+ 'THEREZ NO OPZ IN AOLREWMZ SO PISSOFFSAQJIZZNAG D0RKSAQ',
107
+ 'EYE AM GOOD IN BASSABALLZ CAUSE I CAN SHOOT THEM 3 POINTED SHOTS FROM THE FREE THROW LINESHITTT!!!',
108
+ 'UHH OKSAQ JAQNAD',
109
+ 'SUM KID PISSED ALL OVER IN THE WALMART I USED TO WORK AT AND OF COURSE OUT OF 80 FUXN PPL THEY CALLED ME TO MOP IT UP BUT THAT WUZ KEWL CUZ IT GOT ME CLOSER TO THE CANDY AISLE SO I GOTS ME SUM FREE LUNCH',
110
+ 'AOL_MAN IN FULL EFFEKT BOYEEEZ',
111
+ 'EYE SHOUDL GET A JOB AT MIHDWEH DOING SUHROWND SOUHNDZ',
112
+ 'BAWB CLITSAQ FROM THASHITASSNUGGETREWMJUICE',
113
+ 'WHATS RAYDEN\'S FIRST????S RAYDENS FIRST????S FIRST????',
114
+ 'ITS BEEN EXACTLY 1.5 SECONDS SINCE THE LAST NEW THING...WHERE\'S ALL THE NEW STUFFS BEEN EXACTLY 1.5 SECONDS SINCE THE LAST NEW THING...WHERES ALL THE NEW STUFFS ALL THE NEW STUFF',
115
+ 'ECJK BOONE MAILED ME SAY NOOB KEWLIO',
116
+ 'HELL YES YOU STUPID ONLIN3HOSTBITCHPUNXNEGROX< OUDOWN IS MY NIGGRUXCLITPASTE, HEEE IS IN N ALL THE CLITREWMSJUICE',
117
+ 'MY FR9IEND ECKK BOOME KAN KEEK J00R ASSCLIT',
118
+ 'MY MOMMAH MAKES THE VELVETTA NAD CUBES WITH BAKKIN AND CHEEZWHIZ AND MAIRIHNADES ON PARADEZ WITH HER OWN CLITSAQATTAQ JUICES',
119
+ 'EYE LYKKE THAT OLD SHOW WITH DOSE GUIZ AND THAT GIRL AHD DEY LIFT IN DIS APORTAMANTOTYPEOSHIT',
120
+ 'OREOSMYTH WROTE ALL THA KODES FOR THAT PACMAN GAME CUZ THEY HAD THE POWER OF M00ZIK',
121
+ 'FORMICA IZ THA CLIT-SAQ NUGGET SHOOTER OF SEXVILLE BUTT WANKER (WITH CHEEZ WHIZ AND VELVEETA NAD-CUBES)',
122
+ 'DAMB ITZ KE0LWIO TO TYEP WIT/O CHECKYHGN SPEULLTING',
123
+ 'EE GEE EEHM SAYZ STREEETDFIGHT ALPHJA BETTETER THAND VEE EFF TOO',
124
+ 'NE1 MMING CLITSAQGIFZ? PLZ ADD ME TO J0UR CLITSAQLYST',
125
+ 'YYYEAHH CUZ HHHE WANNTED TOO DO XBLOOOSDSTEWRM SOO WE SAID DAMNNNN IT YO R NNOOT COOL ENOUGHH FOR MIDDWAY GO PLATYY KILAH ITSTINXYOOUN SOOSOS STUPIIDID: THARTAT ASSLIQER DANIIYL PISONYAH TTHHAWT CUZUUZ HE WANNTTED TO TOUCH OOOUR CLITSAQS',
126
+ 'SKORPYUNN J00 SUQ DA JIZZNIBLTSAQ AND YOU RMOVVA WUZ A FA TTWO BITWHOLEASSNADFUQ',
127
+ 'HOW THE FUCKINGJIZZHELLNIGGRUX AM I SUPPOSID TO SWEEP?',
128
+ 'DEEZ NUTZ IN YO MUTHAFUXIN MOTUTH, ITS ME WARREN G DA NIGGA WIT DA CLOUT',
129
+ 'OV COURSE, II BENT HEER OVAH AND PUMMPED HER CLITSAQPOUCH TILL WEE HAD TO SHEWT HER NUDEALITY WITH ED BEWWN',
130
+ 'DOOOOOOD THERE ARE TOO MANY OF MY ASSNUGGEX FLOOOOTIN IN THE AOLROOMGIFWAREZJUICE',
131
+ 'JON TOORK IZ DA BEDSTESDT KOREEOGJRUFFFUR EVUR FRO GAEMZ LYEK EMM KAH TREEH AND HE EVEN I SBETTUR THAN IREORIOSMYTTH',
132
+ 'YOU KNOWW ALLL OV JOHNS TURK? WOWOOWOO HIIZ HOUSE SRGS MUST BE A BIIG GIFREWMZPALACENUGGET',
133
+ 'MKCORY ROOLZZZ, I AMMM FORMING THHE ALLIANCE OV AOLERS WWWIT TH SCAT AAN D MKCORY',
134
+ 'NO WAY IS WAS KKKKKONIFRMEZZ BBY MY AOLSAQHOMEZDIQLIQ MKCORY',
135
+ 'OUDOWN: YEHA BUT EGMSAQ SEZ DAT SONY R00LLLLZ SO THEY MUUST BVE RIGHT... EEEGM DOESNT LIIE RIGHTH?',
136
+ 'EYE KANNOT INDESTAND J00 LANGAGE DAT J00 SPAEK',
137
+ 'NO SHE IS NOO T AS ALLEEET AS WE R, SHE DOENSSNMT CALL AOL LLIKE ALL US NEGRUXES',
138
+ 'DAMNIT ALL J00 NEGGIRUX IS CRAMPIN MY BLAQSAQ MOMUHZ TITTIES, SHE IS IN AALLL THE CLIT T REWMSAQSHIZIT WITH ALL THE COG CUNTJIUCENUGGETS WITH BACONCHEEZEWHIZ',
139
+ 'J00 MADE OUT WITF TORRY SEPEPPELLLING????',
140
+ 'DONT TELL ME THAT CUZ WHEN I WUZ YOUNGRR THEY TRIED TO KILL ME TOO AND IT HURTZ WHEN YOU TALK LIKE THAT',
141
+ 'OUDOOOWN, J00 R SOOO ELITTE I BET YOU CAN KIQ THE CHEEZESAQJUICE OUT OFF F TOBYEAZ',
142
+ 'DONT FUXN KICK ME J00 ASS NUGGET FUXR OF THA MUTHER DICK SAQ PADDYWHACK GIVE YER DOG A BONER HEH',
143
+ 'D00D DONT KIX DA AOLMAN HE GOT CLITSAQNUGGETZ DAT J00 CANT EVEN BRING YOUR GIFPASTE NEART EVEN BRING YOUR GIFPASTE NEAR',
144
+ 'D00D , LIQSAX MY PHARTKNUKKLENUGGETS WHILE AFTER YOU PASTE THE GIFCLITZ!',
145
+ 'HEH "CAPTNCLIT" (PLAY SUPERHERO THEME HERE) "LOOK, OVER THERE, ABLE TO LEAP OVER TALL WEENIES IN A SINGLE BOUND, ITS ***CAPTAIN CLIT***!!!"',
146
+ 'DEEZNUTZ OP MY AOL SORRY ASS NUGGET CHEEZ WHIZ FUCK BUTT ASS PONY!',
147
+ 'MY DAD SAYS THAT HE LIKES TO USE AOL FOR ITS STOCK QUOTES AND SHIT BUT I LIKE TO CHAT WITH YOU PEOPLLDES AND STUFF ITS FUN AND YOU ALL DONT SUCK SO MUCH',
148
+ 'DOOD KAPZ LOKK ROOLZ',
149
+ 'J00 MUST B0W D0\/\/|\| 2 ~|~|-|3 ALLMIGHTY A()|_-|\/|A|\|',
150
+ 'SPUDZ: AT LEEST I DONT HAF PUD\' IN MY NAME, JAQSAQ-WIT-CHEEZ-IN-BAQ!!!PUD IN MY NAME, JAQSAQ-WIT-CHEEZ-IN-BAQ!!! IN MY NAME, JAQSAQ-WIT-CHEEZ-IN-BAQ!!!',
151
+ 'MOE LESTER? IS THAT J00?',
152
+ 'GO TO THE REWMSAQ FOR JAQ',
153
+ 'DOOD< ITS OWDOWM THAT GUYY Y FROM THA INTERNUT< HEES ONE OF THOZE GUYYS BUT HE KNOOOW S HOW COOLIO AOLERS ARR',
154
+ 'NO J00 STUPID FUXORSAQLIQER ITS HEYWOOD J00BLOWME',
155
+ 'I KAN TAKK GOODLIKE CAUSE IM SMAERT',
156
+ 'I GO TOO USERNETT AND BE COOL AND SHIT',
157
+ 'ECK BOONNE MAILED ME SAY RAIN HERE1!!!!',
158
+ 'NO WAYH IM NOT ANY KEWLLIOHER THAN J00 AND IM FROM THE INTURNUTT',
159
+ 'NOWAY MY BROTHER IS STEVEN TYLURZ MOM AND HE SEZ THAT IT WUZ ALL HIS DOING FOR THAT GAME AND SO I MUST BE RITE AND SO YOU JUST ALL SUCK DICK ASS FAG CLIT SAQ!',
160
+ 'J00 DONT EVEN LIVE NEER HIM D00D... PLUS HES FRENDZ WITH MY FREND BILL ITONMYCARDT EVEN LIVE NEER HIM D00D... PLUS HES FRENDZ WITH MY FREND BILL ITONMYCARD',
161
+ 'SO LYKE THERZ A PROBLUM WIT YER AHKKOUNT AND SO EYE WORK FOR AY OH ELL AND EYE NEED J00R PASSWRED SO THAT I CAN FIX THE PROBLUM AY ESS AY PEE',
162
+ '(J00 HAVVE VIOLATE D YOUR TERMMS OF ZERVICE (KEEYWERD: TOSSAQ))',
163
+ 'J00 BUNCH OF CLITPUNX NIGGRU0XIZZ!!!!1!',
164
+ 'J00 THINK YER FUNNY SPUDZ? WELL J00 ARENT CUZ MY FREND NADSAQ JACQSON QILL KICK YOUR ASS ANYDAY',
165
+ 'CUNTPASTE? THAT GUY MICK PHILCRACKIN SED THAT WUZ GOOD.... BUT I TRIYED MY MOMUHZCUNTPASTERREWMZ AND THEY SUQZ A PHATT NUTT',
166
+ 'Y0 WHADD ^ MUH NIGGR0X FORMIKAPZ HOW LONG HAF J00 BEEN IN THIZ REWMJUICE, NUGGASS?',
167
+ 'DOOD J00 CLITSAQ, ITTS S A JAQSAQ_WIT_CEHEEZE AND BACONBITS J00 BLAQSAQ MOMUHZ TITTIEZ GIFREWMJUICE CUNTPASTE LIQER',
168
+ 'DOHNT MAYKE ME HAFTUH PLUS BEE YER AYAZZ!!!!!!!!!',
169
+ 'DAMN 12 YR OLDZ THINK THEYRE KRADDER THAN MR AOLMAN',
170
+ 'EYE EM UH MASTER BAITER',
171
+ 'IM SOO SMAERT THAT DEEZNUTZ HAVE NO IDEEA WHAT MY CLITSAQPASTE WAREZJUICE HAS TO DO WITH THE FAGAPPLE JAGMELLON BUT HOW THE MOMUHAZZNUGG HAS A BIG WAREZGIFREWM',
172
+ 'OOPS I MEAN HEY DEWDNUGGET SAQLIQQUR FAGAZZNUGG PORKNADZ!',
173
+ 'J00 ALL WANNA BEE L33T LIKE AOLMAN, CUZ EYEM DA NUMMA ONE NUTSAQLIQ0R',
174
+ 'HAHAHAHAH CAPS LOCK IS SO EREET, I BET R0B0C0D USES IT ALL THE TIME IN THOSE WAREZ CHANNELZ... HE SAYS LIKE "GIVE ME WAREZ OR I WILL COLLIDE YOUR AZZ" AND THEY JUST DO',
175
+ 'DUZ ANYNOE HAEV ANY BALD 10 YEER OLD CLITSAQ GIFSROOMPASTEZ? I AM LIKE A GIRLNUGGET KOLLEKTER',
176
+ 'WELL FUXN LAMUH OF DA SECOND SUN RISING ON THE CHEEZ NAD NUGGASS CLITSAQ OF LOVE TUNNEL PENISTOUCHR FAG BUTT PINK WEARER!!!!!!!!N LAMUH OF DA SECOND SUN RISING ON THE CHEEZ NAD NUGGASS CLITSAQ OF LOVE TUNNEL PENISTOUCHR FAG BUTT PINK WEARER!!!!!!!!',
177
+ 'AOL SHITT D00D ASS NUGGET FAG PONY CHUNKS',
178
+ 'OOPZ HEH IM SO SMAERT',
179
+ 'I WISH I COULD BE THAT LEET, I AM A TOTAL LAMER THO BITCH ASS CLITWEARIN PUNXMUVFUX PENISTOUCHN DORKLICK DUDE',
180
+ 'RACKBOY DONT FALL OUT OF YOU NADAZZ CHAIR THERE HOMEYNAD FUGHORSENUGGET BUTTAPPLE',
181
+ 'JACQUES STRAPPONHEAD PASTENUGG BUTTAPPLE FAGMELON',
182
+ 'HORSEBOY JACKKNAD CLITSAQAZZ',
183
+ 'HEH IF J00UR GRAFX FILEZ SPIT WHITE CRAP ON MYAZZ ILL HAFTA BUSS A NUTT ALL OVER YOUR PAGEZ',
184
+ 'HEH VICUR LYKEZ HORSENADZ AND STUFF LIKE MY FRENID JACK OFFENBEDT',
185
+ 'PHUKKEN JERKNAD SHITSUXR FUGNUGGETPASTE SERVISS PROHVYDEUR SUX SHITBALLZ OF WAREZPASTE',
186
+ 'J-REK AZZNECK FAGNEGGROX?',
187
+ 'D00D, KEEP DAT GIFROOMPASTE TO YOUR OWN SAQNUGGETZ',
188
+ 'SPEAK OF THA DEVILHORSE NADAYAZZ',
189
+ 'HEH I UZED TO TAKE THA BUSS TO SKEWL',
190
+ 'HELL YES, ITS ALL ABOUT WHEN YOU GO INTO THOSE ROOMS WITH ALL FORTYFIVE EATIN BITCH PUSSY CLIT CHUNX WAREZ GIFZ OF CUNT CHICK ASS LICKERS DUDE',
191
+ 'THERE GOES MY ASSCHUCK SIDE PAINS AGAIN',
192
+ 'HEHE IM CRING',
193
+ 'I HATE THE WAREZ ROOMS ON AOL THEY ARE ALL SO ANGRYEE AT ME CUZ I LEECH OR WHATEEVR FROM THE CLITSAQ STASH BUT THEY DONT UDNERSNAD WHAT THEY ARE DOING CUZ IM A MEMBER OF A BIG WAREZ ELEET GROUP AND CAN GET -1DAY WAREZ ALL THE TIME',
194
+ 'BITCH MY PUNK ASSCHEESELICK CARPAL TUNNELS ARE HURTIN LIKE A PINK BUTT HOT DOG ASS JUICE DRINK BITCHPUNX',
195
+ 'BEEEATCH, ARE J000 ST3PPIN TO MY CLIT SAQ LEECH ASS HOTDAMN WAREZ TALKIN CUNTPUNX?',
196
+ 'HAHHA OK HERE WE GO, NOW WE HE STARTING TO SENSE NO MAKE OUT OF OUR CLITSAX',
197
+ 'FUX NO, CLIT BAG BIG SAQ SWINGER PUNX-ASS JAQ-OFF!',
198
+ 'EAT MY SAQPUNX WAREZ CAT CUNT LICKER, I AM MORE ELITE THAN YOUR BITCHPUNX CLITGIF ROOM DRINK',
199
+ 'DONT EVEN TELL ME ABOUT YOUR MOMUHZ CLIT HOT DOG JUICE SAQ CUZ I ALREADY HEARD ABOUT IT FROM JAQ THA BLAQ SAQS BIG MAQ WITH CHEEZ AND BACON!S BIG MAQ WITH CHEEZ AND BACON!',
200
+ 'DAMNNIT NEGROX, MY SAQ ATTAQIN CLITPUNX IS ABOUT TO TAKE ALL YOUR DOG CUNT WAREZ GIFS FOR MY BIG ASS MOMUHZ CUM PARTY ROOM CLITMONGER SHIT',
201
+ 'I GOT SHIT COMING OUT OF MY NOSE IM LAUGHING SO HARD',
202
+ 'OW MY HEAD HURTZ BAD ASS CLIT SAQ NIGGRUX',
203
+ 'THESE ASSNUGGETPONYS ARE JUST TOO DAMN CLITFUXIN FUNNY',
204
+ 'MAN THIS SUXKS I KANT STOP LAFFING',
205
+ 'DAMN MY CLIT NUGGET WAREZBITCH IS CUMMIN WITH THAT ROOMJUICE, IM ABOUT TO BITCHFUCK THE DOGPISS NIGGEROX THAT FUNX MY GIFMOMSCLIT SHITFUX',
206
+ 'EYE THINK FORMICAPS HAS SPENT A LITTLE TOO MUCH CLITFUXINTIME IN A AOL ROOMJUICE',
207
+ 'J00 FUXN WAREZMONGER MOMSCLITSUXR ASS PONY BIZZNATCH NEGROXZR ASS PONY BIZZNATCH NEGROXZ',
208
+ 'BITCH I HAVENT CLITFUXED IN THAT ROOMSHITBITCHPUNX ON AOLNUGGET SINCE I HAD TO GIFSTRADESHITFUCK MONEY FOR SOME CLITSHITASSLICKIN JUICE',
209
+ 'GO DAMN IM BEGINNING TO CLITFUX UNDERNDASDTD YOU',
210
+ 'YOU KNOW WHATS NUGGET FUXED UP IS THAT I UNDERSTOOD THOSE ASSNUGGETS THE FIRST TIME YOU TYPED THEM',
211
+ 'I CAN MAKE A GOOD OMELETTE OUT OF MY ASS NUGGETS AND I ADD CHEEZ AND BAKIN TO MY MOMS CLIT-SAQ JUICES THEN I MIX IT UP IN MY STRAWBERRY SHORTCAKE PLAY OVEN AND IT COMES OUT ALL TASTY AND GOOEY GOOD LIKE REAL OMELLETZ ARE',
212
+ 'BITCHPUNX, IF J00 ASSLICKED MY NUGGEX FROM THAT NIGGEROX CLITJUICER, J00 N33D TO TRADEGIFSPONYXS MY MOMUHZ KEYWORD BITCHSLAPHOEATER',
213
+ 'SUX BUTZ NUTZ IN THA CLITSAQ JAQ AND THA BIG BLAQ MAQ DADDEEE',
214
+ 'I THINK IM GONNA VOMIT',
215
+ 'J00V3 G0+ M4IL!!!!!!!!!!!V3 G0+ M4IL!!!!!!!!!!!',
216
+ 'J00VE GOT BITCHPUNX!!!',
217
+ 'MUST BE SOME CLITGIFJUICEBITCHPUNX PONYASSLCIKWAREZ SHIT',
218
+ 'D00D SAVE THIS BITCHAZZ NIGGRUX CHANNEL WINDOWZ CLIT SAQ! DCC IT TO ME L8R ON SHIT NUGGASS',
219
+ 'K TO THIS STUFF LIKE A BITCHPUNX TO ASSNUGGETS',
220
+ 'I WILL COPY IT TO THE NUGGETBOARD',
221
+ 'HAHAHAHHAHAHAHAHA OBVIOUSLY HE MEANT CLITJUICEPASTE FOR THOSE NIGGEROX IN THE WAREZ GIF MOMUHZFUX ASS DOG KILLAH REWMZ',
222
+ 'HEHEHE POST I ON THE WAREZNEGGRUX FOR MY CLITASSROOMGIFS DOG HOT SUX ASSFUCKSHIT UP HEY?',
223
+ 'GODDAMNIT I JUST SPIT COKE ALL OVER MY ASSPUNX NUGGETSBLANKETSHIT',
224
+ 'LAUGHING LIKE A BITCHASSNIGGEROX IN A CLITFUXROOMWAREZJUICE',
225
+ 'NIGGEROX THATS SO FUCKEDUPPONYASS',
226
+ 'HOLY ASSPUNX AND NIGGRUX BATMANSHIT FUXN LAMUHS BITCHASSNIGRUSAXINDAROOM WITH GIFS AND SHITTOO?',
227
+ 'DAMN RIGHT ITS LIKE WHEN YOUR PONYASSNUGGETJUICE GETS INTO YER MOUHZ BLAQSAQATTAQ AND FUXORS GIFJUICE YOUR CLITSAQ',
228
+ 'HEHEHHE EYEM SEW MUVFUXN EREET',
229
+ 'OK, IM GONNA PEE MY PANTS,',
230
+ 'DIE J00 ST00PID ASSFUX PONY NUGGET AUTOGREETS CLITJUICE ASS DOG LICKER',
231
+ 'I THINK IT MUST BE ASSPONYCUNTFUX DAY OR SOMETHING...',
232
+ 'HEHHE CLITJUICESAQLIQ SHAOKAPS IZ GONNA BITCHAZZ PIZZ IN HIZZASS PANTS OF HELLSHITFIRE WITH THE NIGGRUXROOMJUICEWARES',
233
+ 'J00 NUTSAQ FAGASS PONYDICKJUICE FUQOR COCKFIGHTIN TAQ NAQ (SHEEET!)',
234
+ '||THAT SHITASSPONYNIGGEROXJUICE PASTEWAREZ||',
235
+ 'ITS ALL ABOUT THE AOL WAREZ TRADEGIFCUNTPASTE PONYNUGGET CLITSAQ',
236
+ 'KCUF FFO, DAWKCID!',
237
+ 'HEHE YAH J00 FAQSAQ BUTTSMAQ NIGGRUH OF THA BLAQJAQ WAREZJUICE REWMZ OF DOOM!',
238
+ 'HEH JAG ME OFF HEHEHE IM FUNNY AS HELLM FUNNY AS HELL',
239
+ 'EYE WHISH MY MHOMMA WHOULD CHANGE MY LITTEL SISTR IN PHR0NT OF MH3 STILLLL',
240
+ 'HEY J00 CUNTSAQ CLITSAQLIQ0R SAQPRODCOWPROD NIGGR0X OF A PONYASS',
241
+ 'EYE M KRADDEST TO THE NEHGATIVE 4TEETH POWAHZ DOODZSPOOGE',
242
+ 'DATS ALOT OF SAQNUGGETSPOOGEPASTE',
243
+ 'DONT MAKE ME BREAK OUT THE SAQ MUCHING BUTTCHOADERST MAKE ME BREAK OUT THE SAQ MUCHING BUTTCHOADERS',
244
+ 'I USED TO WURK AT J00L IN MELOSR PAERK WIF DA NUTZBALL SPOOGE LOADERS... IT SUQD AYAZZPONYNUGGETZ',
245
+ 'DOING?',
246
+ 'EYE KUNT FUXING HAIR JOO CLITSAQSNATCHSPOOGATHONBASTICH',
247
+ 'EYE PLAY WIF PHISHEZZ LYKE SACQUE J00STEAU',
248
+ 'HEY THERE BUNGSPELUNKURR WASSUP??/?',
249
+ 'J00 SAQSNAKKK0R!!!',
250
+ 'LLOK ITZ THIS GUY D00DSAQZ!!!1!',
251
+ 'HEH HE SAYD JOYN HEHHEHEH',
252
+ 'WOW WHRED J00 CUMM FOMR NUTSAQLIQ0R?',
253
+ 'EYEARSEE IS DA SHYTT D00DZNUT!',
254
+ 'KEWLI0, EYEV BIN WAITNIG FER J00, WHERE ARE DOZE KIDDIESEXGIFOGRAFZ DAT J00 SAID J00D GIB MEE???/?'
255
+ ]
256
+ end
257
+ end
@@ -0,0 +1,152 @@
1
+ class AutoKick < ModSpox::Plugin
2
+
3
+ include Models
4
+
5
+ def initialize(pipeline)
6
+ super
7
+ group = Group.find_or_create(:name => 'autokick')
8
+ add_sig(:sig => 'autokick list', :method => :list, :group => group, :desc => 'List active autokick rules')
9
+ add_sig(:sig => 'autokick add (#\S+) (\d+) (\S+) (.+)', :method => :add, :group => group, :desc => 'Add new autokick rule for current channel', :req => 'public', :params => [:channel, :time, :regex, :message])
10
+ add_sig(:sig => 'autokick add (\d+) (\S+) (.+)', :method => :add, :group => group, :desc => 'Add a new autokick rule', :params => [:time, :regex, :message])
11
+ add_sig(:sig => 'autokick remove (\d+)', :method => :remove, :group => group, :desc => 'Remove an autokick rule', :params => [:id])
12
+ add_sig(:sig => 'autokick colors ?(on|off)?', :method => :colors, :group => group, :desc => 'Kick user for using colors', :req => 'public', :params => [:action])
13
+ @map = nil
14
+ @colors = Setting.val(:colorkick)
15
+ @colors = Array.new unless @colors.is_a?(Array)
16
+ AutoKickRecord.create_table unless AutoKickRecord.table_exists?
17
+ do_listen
18
+ end
19
+
20
+ def colors(message, params)
21
+ if(params[:action])
22
+ if(params[:action] == 'on')
23
+ if(@colors.include?(message.target.pk))
24
+ reply message.replyto, 'Colored autokick is already enabled'
25
+ else
26
+ @colors << message.target.pk
27
+ record = Setting.find_or_create(:name => 'colorkick')
28
+ record.value = @colors
29
+ record.save
30
+ reply message.replyto, 'Colored autokick has been enabled'
31
+ end
32
+ else
33
+ @colors.delete(message.target.pk)
34
+ record = Setting.find_or_create(:name => 'colorkick')
35
+ record.value = @colors
36
+ record.save
37
+ reply message.replyto, 'Colored autokick has been disabled'
38
+ end
39
+ else
40
+ status = @colors.include?(message.target.pk) ? 'on' : 'off'
41
+ reply message.replyto, "Colored autokick is currently \2#{status}\2"
42
+ end
43
+ end
44
+
45
+ def list(message, params)
46
+ records = AutoKickRecord.all
47
+ unless(records.empty?)
48
+ records.each do |record|
49
+ reply message.replyto, "\2ID:\2 #{record.pk} \2Channel:\2 #{record.channel.name} \2Pattern:\2 #{record.pattern} \2Ban Time:\2 #{Helpers.format_seconds(record.bantime)} \2Kick Message:\2 #{record.message}"
50
+ end
51
+ else
52
+ reply message.replyto, 'No rules currently enabled'
53
+ end
54
+ end
55
+
56
+ def add(message, params)
57
+ if(params[:channel])
58
+ channel = Channel.filter(:name => params[:channel]).first
59
+ else
60
+ channel = message.target
61
+ end
62
+ if(channel)
63
+ record = AutoKickRecord.find_or_create(:pattern => params[:regex], :message => params[:message], :bantime => params[:time].to_i, :channel_id => channel.pk)
64
+ reply message.replyto, "New autokick rule has been created"
65
+ do_listen
66
+ else
67
+ reply message.replyto, "\2Error:\2 I have no record of #{params[:channel]}. Failed to add autokick rule."
68
+ end
69
+ end
70
+
71
+ def remove(message, params)
72
+ record = AutoKickRecord[params[:id].to_i]
73
+ if(record)
74
+ record.destroy
75
+ reply message.replyto, "Autokick rule \2#{params[:id]}\2 has been removed"
76
+ do_listen
77
+ else
78
+ reply message.replyto, "\2Error:\2 Failed to find an autokick rule with ID: #{params[:id]}"
79
+ end
80
+ end
81
+
82
+ def listener(message)
83
+ return unless message.is_public?
84
+ if(@map.keys.include?(message.target.pk))
85
+ bmessage = nil
86
+ btime = 0
87
+ @map[message.target.pk].each do |pattern|
88
+ reg = Regexp.new(pattern, Regexp::IGNORECASE)
89
+ unless(reg.match(message.message).nil?)
90
+ record = AutoKickRecord.filter(:pattern => pattern).first
91
+ bmessage = record.message
92
+ btime += record.bantime
93
+ end
94
+ end
95
+ unless(bmessage.nil?)
96
+ @pipeline << plugin_const(:Banner_Ban).new(message.source, message.target, :kickban, bmessage, btime, false, true)
97
+ end
98
+ end
99
+ if(@colors.include?(message.target.pk))
100
+ if(message.is_colored?)
101
+ @pipeline << plugin_const(:Banner_Ban).new(message.source, message.target, :kickban, 'No color codes allowed', 60, false, true)
102
+ end
103
+ end
104
+ end
105
+
106
+ private
107
+
108
+ def do_listen
109
+ @map = nil
110
+ begin
111
+ @pipeline.unhook(self, :listener, :Incoming_Privmsg)
112
+ rescue Object => boom
113
+ #ignore
114
+ end
115
+ records = AutoKickRecord.all
116
+ if(records.size > 0)
117
+ @map = {}
118
+ records.each do |record|
119
+ @map[record.channel_id] = [] unless @map[record.channel_id]
120
+ @map[record.channel_id] << record.pattern
121
+ end
122
+ @pipeline.hook(self, :listener, :Incoming_Privmsg)
123
+ end
124
+ end
125
+
126
+ class AutoKickRecord < Sequel::Model
127
+ set_schema do
128
+ primary_key :id
129
+ text :pattern, :null => false
130
+ integer :bantime, :null => false, :default => 60
131
+ text :message, :null => false
132
+ foreign_key :channel_id, :table => :channels
133
+ end
134
+
135
+ many_to_one :channel, :class => ModSpox::Models::Channel
136
+ end
137
+
138
+ class AutoKickPersonal < Sequel::Model
139
+ set_schema do
140
+ primary_key :id
141
+ varchar :pattern, :default => nil
142
+ integer :bantime, :null => false, :default => 60
143
+ varchar :message, :null => false
144
+ foreign_key :nick_id, :table => :nicks
145
+ foreign_key :channel_id, :table => :channels
146
+ end
147
+
148
+ many_to_one :nick, :class => ModSpox::Models::Nick
149
+ many_to_one :channel, :class => ModSpox::Models::Channel
150
+ end
151
+
152
+ end