rbot 0.9.14 → 0.9.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. data/AUTHORS +6 -2
  2. data/REQUIREMENTS +7 -1
  3. data/Rakefile +10 -32
  4. data/bin/rbot +6 -1
  5. data/bin/svnwatch-postcommit-hook +68 -0
  6. data/data/rbot/contrib/plugins/stats.rb +3 -3
  7. data/data/rbot/contrib/plugins/vandale.rb +1 -1
  8. data/data/rbot/filters/rss.rb +72 -0
  9. data/data/rbot/languages/finnish.lang +50 -0
  10. data/data/rbot/plugins/alias.rb +6 -6
  11. data/data/rbot/plugins/autorejoin.rb +41 -2
  12. data/data/rbot/plugins/bans.rb +100 -6
  13. data/data/rbot/plugins/bash.rb +9 -4
  14. data/data/rbot/plugins/cal.rb +1 -1
  15. data/data/rbot/plugins/chucknorris.rb +6 -6
  16. data/data/rbot/plugins/debugger.rb +7 -3
  17. data/data/rbot/plugins/deepthoughts.rb +1 -1
  18. data/data/rbot/plugins/delicious.rb +6 -2
  19. data/data/rbot/plugins/dice.rb +7 -7
  20. data/data/rbot/plugins/dict.rb +4 -3
  21. data/data/rbot/plugins/dictclient.rb +17 -13
  22. data/data/rbot/plugins/digg.rb +3 -3
  23. data/data/rbot/plugins/eightball.rb +1 -1
  24. data/data/rbot/plugins/factoids.rb +13 -4
  25. data/data/rbot/plugins/figlet.rb +4 -4
  26. data/data/rbot/plugins/forecast.rb +3 -3
  27. data/data/rbot/plugins/fortune.rb +14 -8
  28. data/data/rbot/plugins/freshmeat.rb +2 -2
  29. data/data/rbot/plugins/games/azgame.rb +72 -19
  30. data/data/rbot/plugins/games/hangman.rb +499 -0
  31. data/data/rbot/plugins/games/quiz.rb +15 -13
  32. data/data/rbot/plugins/games/roshambo.rb +1 -1
  33. data/data/rbot/plugins/games/roulette.rb +4 -4
  34. data/data/rbot/plugins/games/shiritori.rb +31 -31
  35. data/data/rbot/plugins/games/uno.rb +28 -6
  36. data/data/rbot/plugins/games/wheelfortune.rb +1 -3
  37. data/data/rbot/plugins/geoip.rb +83 -28
  38. data/data/rbot/plugins/googlefight.rb +64 -0
  39. data/data/rbot/plugins/greet.rb +45 -0
  40. data/data/rbot/plugins/grouphug.rb +40 -12
  41. data/data/rbot/plugins/imdb.rb +4 -4
  42. data/data/rbot/plugins/insult.rb +2 -2
  43. data/data/rbot/plugins/karma.rb +6 -5
  44. data/data/rbot/plugins/keywords.rb +26 -22
  45. data/data/rbot/plugins/lart.rb +5 -6
  46. data/data/rbot/plugins/lastfm.rb +488 -125
  47. data/data/rbot/plugins/lib_spotify.rb +84 -0
  48. data/data/rbot/plugins/linkbot.rb +1 -1
  49. data/data/rbot/plugins/markov.rb +567 -78
  50. data/data/rbot/plugins/math.rb +3 -3
  51. data/data/rbot/plugins/modes.rb +1 -1
  52. data/data/rbot/plugins/nickrecover.rb +1 -1
  53. data/data/rbot/plugins/nickserv.rb +7 -7
  54. data/data/rbot/plugins/note.rb +55 -0
  55. data/data/rbot/plugins/nslookup.rb +2 -2
  56. data/data/rbot/plugins/quakeauth.rb +4 -4
  57. data/data/rbot/plugins/quotes.rb +53 -19
  58. data/data/rbot/plugins/reaction.rb +76 -19
  59. data/data/rbot/plugins/remind.rb +3 -96
  60. data/data/rbot/plugins/ri.rb +1 -1
  61. data/data/rbot/plugins/rot13.rb +1 -1
  62. data/data/rbot/plugins/rss.rb +296 -190
  63. data/data/rbot/plugins/salut.rb +8 -8
  64. data/data/rbot/plugins/script.rb +48 -11
  65. data/data/rbot/plugins/search.rb +124 -28
  66. data/data/rbot/plugins/seen.rb +162 -31
  67. data/data/rbot/plugins/shortenurls.rb +1 -1
  68. data/data/rbot/plugins/slashdot.rb +19 -6
  69. data/data/rbot/plugins/spotify.rb +78 -0
  70. data/data/rbot/plugins/theyfightcrime.rb +10 -10
  71. data/data/rbot/plugins/time.rb +2 -2
  72. data/data/rbot/plugins/translator.rb +161 -85
  73. data/data/rbot/plugins/tube.rb +2 -2
  74. data/data/rbot/plugins/tumblr.rb +143 -0
  75. data/data/rbot/plugins/twitter.rb +25 -6
  76. data/data/rbot/plugins/urban.rb +6 -4
  77. data/data/rbot/plugins/url.rb +49 -10
  78. data/data/rbot/plugins/weather.rb +6 -6
  79. data/data/rbot/plugins/wserver.rb +5 -5
  80. data/data/rbot/plugins/youtube.rb +12 -12
  81. data/data/rbot/templates/lart/larts-italian +1 -1
  82. data/launch_here.rb +68 -0
  83. data/lib/rbot/botuser.rb +1 -1
  84. data/lib/rbot/compat19.rb +70 -0
  85. data/lib/rbot/config.rb +8 -6
  86. data/lib/rbot/core/auth.rb +37 -21
  87. data/lib/rbot/core/basics.rb +33 -2
  88. data/lib/rbot/core/config.rb +24 -17
  89. data/lib/rbot/core/filters_ui.rb +2 -2
  90. data/lib/rbot/core/irclog.rb +20 -11
  91. data/lib/rbot/core/remote.rb +9 -9
  92. data/lib/rbot/core/unicode.rb +4 -0
  93. data/lib/rbot/core/userdata.rb +16 -1
  94. data/lib/rbot/core/utils/extends.rb +76 -0
  95. data/lib/rbot/core/utils/filters.rb +47 -0
  96. data/lib/rbot/core/utils/httputil.rb +36 -26
  97. data/lib/rbot/core/utils/parse_time.rb +193 -0
  98. data/lib/rbot/core/utils/utils.rb +81 -56
  99. data/lib/rbot/core/utils/wordlist.rb +66 -0
  100. data/lib/rbot/core/wordlist_ui.rb +27 -0
  101. data/lib/rbot/irc.rb +59 -19
  102. data/lib/rbot/ircbot.rb +190 -58
  103. data/lib/rbot/ircsocket.rb +14 -8
  104. data/lib/rbot/language.rb +4 -3
  105. data/lib/rbot/load-gettext.rb +22 -9
  106. data/lib/rbot/message.rb +89 -18
  107. data/lib/rbot/messagemapper.rb +71 -19
  108. data/lib/rbot/plugins.rb +112 -44
  109. data/lib/rbot/{registry.rb → registry/bdb.rb} +226 -22
  110. data/lib/rbot/registry/tc.rb +531 -0
  111. data/lib/rbot/rfc2812.rb +33 -8
  112. data/lib/rbot/timer.rb +12 -20
  113. data/po/en_US/rbot-autorejoin.po +3 -0
  114. data/po/en_US/rbot-azgame.po +51 -43
  115. data/po/en_US/rbot-bash.po +15 -0
  116. data/po/en_US/rbot-dictclient.po +20 -20
  117. data/po/en_US/rbot-factoids.po +9 -9
  118. data/po/en_US/rbot-geoip.po +0 -0
  119. data/po/en_US/rbot-googlefight.po +24 -0
  120. data/po/en_US/rbot-grouphug.po +4 -4
  121. data/po/en_US/rbot-hangman.po +114 -0
  122. data/po/en_US/rbot-keywords.po +3 -3
  123. data/po/en_US/rbot-lastfm.po +268 -70
  124. data/po/en_US/rbot-markov.po +73 -2
  125. data/po/en_US/rbot-quotes.po +21 -21
  126. data/po/en_US/rbot-rss.po +6 -2
  127. data/po/en_US/rbot-script.po +3 -0
  128. data/po/en_US/rbot-seen.po +72 -0
  129. data/po/en_US/rbot-spell.po +2 -2
  130. data/po/en_US/rbot-translator.po +13 -13
  131. data/po/en_US/rbot-twitter.po +3 -3
  132. data/po/en_US/rbot-uno.po +131 -114
  133. data/po/en_US/rbot-wall.po +12 -13
  134. data/po/en_US/rbot-wheelfortune.po +41 -41
  135. data/po/en_US/rbot.po +254 -194
  136. data/po/fi/rbot-alias.po +82 -0
  137. data/po/fi/rbot-autoop.po +0 -0
  138. data/po/fi/rbot-autorejoin.po +20 -0
  139. data/po/fi/rbot-azgame.po +194 -0
  140. data/po/fi/rbot-bans.po +0 -0
  141. data/po/fi/rbot-bash.po +32 -0
  142. data/po/fi/rbot-botsnack.po +0 -0
  143. data/po/fi/rbot-cal.po +20 -0
  144. data/po/fi/rbot-chanserv.po +0 -0
  145. data/po/fi/rbot-chucknorris.po +0 -0
  146. data/po/fi/rbot-debugger.po +0 -0
  147. data/po/fi/rbot-deepthoughts.po +0 -0
  148. data/po/fi/rbot-delicious.po +0 -0
  149. data/po/fi/rbot-dice.po +0 -0
  150. data/po/fi/rbot-dict.po +0 -0
  151. data/po/fi/rbot-dictclient.po +111 -0
  152. data/po/fi/rbot-digg.po +0 -0
  153. data/po/fi/rbot-eightball.po +0 -0
  154. data/po/fi/rbot-excuse.po +0 -0
  155. data/po/fi/rbot-factoids.po +107 -0
  156. data/po/fi/rbot-figlet.po +36 -0
  157. data/po/fi/rbot-fish.po +0 -0
  158. data/po/fi/rbot-forecast.po +0 -0
  159. data/po/fi/rbot-fortune.po +0 -0
  160. data/po/fi/rbot-freshmeat.po +0 -0
  161. data/po/fi/rbot-geoip.po +0 -0
  162. data/po/fi/rbot-googlefight.po +24 -0
  163. data/po/fi/rbot-grouphug.po +35 -0
  164. data/po/fi/rbot-hangman.po +121 -0
  165. data/po/fi/rbot-hl2.po +0 -0
  166. data/po/fi/rbot-host.po +20 -0
  167. data/po/fi/rbot-imdb.po +0 -0
  168. data/po/fi/rbot-insult.po +0 -0
  169. data/po/fi/rbot-iplookup.po +0 -0
  170. data/po/fi/rbot-karma.po +0 -0
  171. data/po/fi/rbot-keywords.po +24 -0
  172. data/po/fi/rbot-lart.po +0 -0
  173. data/po/fi/rbot-lastfm.po +377 -0
  174. data/po/fi/rbot-linkbot.po +0 -0
  175. data/po/fi/rbot-markov.po +91 -0
  176. data/po/fi/rbot-math.po +0 -0
  177. data/po/fi/rbot-modes.po +0 -0
  178. data/po/fi/rbot-nickrecover.po +36 -0
  179. data/po/fi/rbot-nickserv.po +104 -0
  180. data/po/fi/rbot-nslookup.po +0 -0
  181. data/po/fi/rbot-quakeauth.po +0 -0
  182. data/po/fi/rbot-quiz.po +0 -0
  183. data/po/fi/rbot-quotes.po +108 -0
  184. data/po/fi/rbot-reaction.po +0 -0
  185. data/po/fi/rbot-remind.po +0 -0
  186. data/po/fi/rbot-remotectl.po +0 -0
  187. data/po/fi/rbot-ri.po +0 -0
  188. data/po/fi/rbot-roshambo.po +0 -0
  189. data/po/fi/rbot-rot13.po +0 -0
  190. data/po/fi/rbot-roulette.po +0 -0
  191. data/po/fi/rbot-rss.po +24 -0
  192. data/po/fi/rbot-salut.po +0 -0
  193. data/po/fi/rbot-script.po +20 -0
  194. data/po/fi/rbot-search.po +0 -0
  195. data/po/fi/rbot-seen.po +92 -0
  196. data/po/fi/rbot-shiritori.po +102 -0
  197. data/po/fi/rbot-shortenurls.po +0 -0
  198. data/po/fi/rbot-slashdot.po +0 -0
  199. data/po/fi/rbot-spell.po +54 -0
  200. data/po/fi/rbot-theyfightcrime.po +0 -0
  201. data/po/fi/rbot-threat.po +0 -0
  202. data/po/fi/rbot-time.po +0 -0
  203. data/po/fi/rbot-topic.po +0 -0
  204. data/po/fi/rbot-translator.po +77 -0
  205. data/po/fi/rbot-tube.po +0 -0
  206. data/po/fi/rbot-twitter.po +24 -0
  207. data/po/fi/rbot-uno.po +529 -0
  208. data/po/fi/rbot-urban.po +0 -0
  209. data/po/fi/rbot-url.po +0 -0
  210. data/po/fi/rbot-usermodes.po +0 -0
  211. data/po/fi/rbot-wall.po +32 -0
  212. data/po/fi/rbot-weather.po +0 -0
  213. data/po/fi/rbot-wheelfortune.po +205 -0
  214. data/po/fi/rbot-wow.po +0 -0
  215. data/po/fi/rbot-wserver.po +0 -0
  216. data/po/fi/rbot-youtube.po +58 -0
  217. data/po/fi/rbot.po +1152 -0
  218. data/po/fr/rbot-autorejoin.po +3 -0
  219. data/po/fr/rbot-azgame.po +51 -43
  220. data/po/fr/rbot-bash.po +15 -0
  221. data/po/fr/rbot-dictclient.po +20 -20
  222. data/po/fr/rbot-factoids.po +9 -9
  223. data/po/fr/rbot-geoip.po +0 -0
  224. data/po/fr/rbot-googlefight.po +24 -0
  225. data/po/fr/rbot-grouphug.po +4 -4
  226. data/po/fr/rbot-hangman.po +114 -0
  227. data/po/fr/rbot-keywords.po +3 -3
  228. data/po/fr/rbot-lastfm.po +268 -70
  229. data/po/fr/rbot-markov.po +74 -2
  230. data/po/fr/rbot-quotes.po +21 -21
  231. data/po/fr/rbot-rss.po +6 -2
  232. data/po/fr/rbot-script.po +3 -0
  233. data/po/fr/rbot-seen.po +72 -0
  234. data/po/fr/rbot-spell.po +2 -2
  235. data/po/fr/rbot-translator.po +13 -13
  236. data/po/fr/rbot-twitter.po +3 -3
  237. data/po/fr/rbot-uno.po +132 -114
  238. data/po/fr/rbot-wall.po +8 -9
  239. data/po/fr/rbot-wheelfortune.po +41 -41
  240. data/po/fr/rbot.po +268 -197
  241. data/po/it/rbot-autorejoin.po +3 -0
  242. data/po/it/rbot-azgame.po +50 -42
  243. data/po/it/rbot-bash.po +15 -0
  244. data/po/it/rbot-dictclient.po +20 -20
  245. data/po/it/rbot-factoids.po +9 -9
  246. data/po/it/rbot-geoip.po +0 -0
  247. data/po/it/rbot-googlefight.po +24 -0
  248. data/po/it/rbot-grouphug.po +4 -4
  249. data/po/it/rbot-hangman.po +114 -0
  250. data/po/it/rbot-keywords.po +3 -3
  251. data/po/it/rbot-lastfm.po +268 -70
  252. data/po/it/rbot-markov.po +75 -3
  253. data/po/it/rbot-quotes.po +21 -21
  254. data/po/it/rbot-rss.po +7 -3
  255. data/po/it/rbot-script.po +19 -0
  256. data/po/it/rbot-seen.po +72 -0
  257. data/po/it/rbot-spell.po +2 -2
  258. data/po/it/rbot-translator.po +13 -13
  259. data/po/it/rbot-twitter.po +3 -3
  260. data/po/it/rbot-uno.po +137 -116
  261. data/po/it/rbot-wall.po +8 -9
  262. data/po/it/rbot-wheelfortune.po +41 -41
  263. data/po/it/rbot.po +265 -208
  264. data/po/ja/rbot-autorejoin.po +3 -0
  265. data/po/ja/rbot-azgame.po +51 -43
  266. data/po/ja/rbot-bash.po +15 -0
  267. data/po/ja/rbot-dictclient.po +20 -20
  268. data/po/ja/rbot-factoids.po +9 -9
  269. data/po/ja/rbot-geoip.po +0 -0
  270. data/po/ja/rbot-googlefight.po +24 -0
  271. data/po/ja/rbot-grouphug.po +4 -4
  272. data/po/ja/rbot-hangman.po +114 -0
  273. data/po/ja/rbot-keywords.po +3 -3
  274. data/po/ja/rbot-lastfm.po +268 -70
  275. data/po/ja/rbot-markov.po +73 -2
  276. data/po/ja/rbot-quotes.po +21 -21
  277. data/po/ja/rbot-rss.po +6 -2
  278. data/po/ja/rbot-script.po +3 -0
  279. data/po/ja/rbot-seen.po +72 -0
  280. data/po/ja/rbot-spell.po +2 -2
  281. data/po/ja/rbot-translator.po +13 -13
  282. data/po/ja/rbot-twitter.po +3 -3
  283. data/po/ja/rbot-uno.po +131 -114
  284. data/po/ja/rbot-wall.po +8 -9
  285. data/po/ja/rbot-wheelfortune.po +41 -41
  286. data/po/ja/rbot.po +248 -192
  287. data/po/rbot-alias.pot +2 -2
  288. data/po/rbot-autorejoin.pot +21 -0
  289. data/po/rbot-azgame.pot +51 -43
  290. data/po/rbot-bash.pot +33 -0
  291. data/po/rbot-cal.pot +2 -2
  292. data/po/rbot-dictclient.pot +21 -21
  293. data/po/rbot-factoids.pot +10 -10
  294. data/po/rbot-figlet.pot +2 -2
  295. data/po/rbot-geoip.pot +0 -0
  296. data/po/rbot-googlefight.pot +25 -0
  297. data/po/rbot-grouphug.pot +6 -6
  298. data/po/rbot-hangman.pot +115 -0
  299. data/po/rbot-host.pot +2 -2
  300. data/po/rbot-keywords.pot +4 -4
  301. data/po/rbot-lastfm.pot +270 -72
  302. data/po/rbot-markov.pot +74 -3
  303. data/po/rbot-nickrecover.pot +2 -2
  304. data/po/rbot-nickserv.pot +2 -2
  305. data/po/rbot-quotes.pot +22 -22
  306. data/po/rbot-rss.pot +7 -3
  307. data/po/rbot-script.pot +21 -0
  308. data/po/rbot-seen.pot +90 -0
  309. data/po/rbot-shiritori.pot +2 -2
  310. data/po/rbot-spell.pot +3 -3
  311. data/po/rbot-translator.pot +14 -14
  312. data/po/rbot-twitter.pot +4 -4
  313. data/po/rbot-uno.pot +132 -115
  314. data/po/rbot-wall.pot +2 -2
  315. data/po/rbot-wheelfortune.pot +42 -42
  316. data/po/rbot-youtube.pot +2 -2
  317. data/po/rbot.pot +249 -193
  318. data/po/zh_CN/rbot-autorejoin.po +3 -0
  319. data/po/zh_CN/rbot-azgame.po +50 -42
  320. data/po/zh_CN/rbot-bash.po +15 -0
  321. data/po/zh_CN/rbot-dictclient.po +20 -20
  322. data/po/zh_CN/rbot-factoids.po +9 -9
  323. data/po/zh_CN/rbot-geoip.po +0 -0
  324. data/po/zh_CN/rbot-googlefight.po +24 -0
  325. data/po/zh_CN/rbot-grouphug.po +4 -4
  326. data/po/zh_CN/rbot-hangman.po +114 -0
  327. data/po/zh_CN/rbot-keywords.po +3 -3
  328. data/po/zh_CN/rbot-lastfm.po +268 -70
  329. data/po/zh_CN/rbot-markov.po +73 -2
  330. data/po/zh_CN/rbot-quotes.po +21 -21
  331. data/po/zh_CN/rbot-rss.po +6 -2
  332. data/po/zh_CN/rbot-script.po +3 -0
  333. data/po/zh_CN/rbot-seen.po +72 -0
  334. data/po/zh_CN/rbot-spell.po +2 -2
  335. data/po/zh_CN/rbot-translator.po +13 -13
  336. data/po/zh_CN/rbot-twitter.po +3 -3
  337. data/po/zh_CN/rbot-uno.po +131 -114
  338. data/po/zh_CN/rbot-wall.po +7 -8
  339. data/po/zh_CN/rbot-wheelfortune.po +41 -41
  340. data/po/zh_CN/rbot.po +248 -192
  341. data/po/zh_TW/rbot-autorejoin.po +3 -0
  342. data/po/zh_TW/rbot-azgame.po +50 -42
  343. data/po/zh_TW/rbot-bash.po +15 -0
  344. data/po/zh_TW/rbot-dictclient.po +20 -20
  345. data/po/zh_TW/rbot-factoids.po +9 -9
  346. data/po/zh_TW/rbot-geoip.po +0 -0
  347. data/po/zh_TW/rbot-googlefight.po +24 -0
  348. data/po/zh_TW/rbot-grouphug.po +4 -4
  349. data/po/zh_TW/rbot-hangman.po +114 -0
  350. data/po/zh_TW/rbot-keywords.po +3 -3
  351. data/po/zh_TW/rbot-lastfm.po +268 -70
  352. data/po/zh_TW/rbot-markov.po +73 -2
  353. data/po/zh_TW/rbot-quotes.po +21 -21
  354. data/po/zh_TW/rbot-rss.po +6 -2
  355. data/po/zh_TW/rbot-script.po +3 -0
  356. data/po/zh_TW/rbot-seen.po +72 -0
  357. data/po/zh_TW/rbot-spell.po +2 -2
  358. data/po/zh_TW/rbot-translator.po +13 -13
  359. data/po/zh_TW/rbot-twitter.po +3 -3
  360. data/po/zh_TW/rbot-uno.po +131 -114
  361. data/po/zh_TW/rbot-wall.po +7 -8
  362. data/po/zh_TW/rbot-wheelfortune.po +41 -41
  363. data/po/zh_TW/rbot.po +253 -194
  364. data/setup.rb +4 -4
  365. metadata +127 -18
  366. data/README +0 -43
  367. data/data/rbot/plugins/fish.rb +0 -121
  368. data/lib/rbot/dbhash.rb +0 -199
data/AUTHORS CHANGED
@@ -1,10 +1,10 @@
1
1
  Original Author
2
2
  o Tom Gilbert (giblet) <tom@linuxbrit.co.uk>
3
3
 
4
- Ruthless Tyrant (yes, that means 'project lead')
4
+ Ruthless Tyrant (yes, that means 'project leader')
5
5
  o Giuseppe "Oblomov" Bilotta (tango_) <giuseppe.bilotta@gmail.com>
6
6
 
7
- Sanity keeper
7
+ Sanity keeper (aka 'my main role here is to bitch a lot about even the legitimate patches')
8
8
  o Dmitry Kim (jsn) <dmitry dot kim at gmail dot com>
9
9
 
10
10
  YAML & Multilingual expert, blame collector
@@ -13,6 +13,9 @@ o Yaohan Chen (hagabaka) <yaohan.chen@gmail.com>
13
13
  Insanity keeper
14
14
  o Mark Kretschmann (markey) <markey@web.de>
15
15
 
16
+ Pusher (aka 'my main role here is to bitch a lot about the delay in the releases')
17
+ o Raine Virta (rane_) <raine.virta@gmail.com>
18
+
16
19
  Chuck Norris trainer
17
20
  o Chris Gahan (epitron) <chris@ill-logic.com>
18
21
 
@@ -28,6 +31,7 @@ o Jesse Keys (jessekeys) <jesse@teranetworks.de>
28
31
  o Jan Wikholm (unfo-) <jw@jw.fi>
29
32
  o Moritz Augsburger (moemoe) <rbot@moritz.augsburger.name>
30
33
  o Alexander Beisig <alexander.beisig@gmx.de>
34
+ o Casey Link (Ramblurr) <unnamedrambler@gmail.com>
31
35
 
32
36
  Module contributors
33
37
  o dice.rb - David Dorward (Dorward) <david@david.us-lot.org>
@@ -2,7 +2,12 @@ Ruby modules needed for rbot
2
2
  ============================
3
3
 
4
4
  Core requirements
5
- bdb (berkley db) http://raa.ruby-lang.org/project/bdb/
5
+ tokyocabinet for "tc" DB adaptor
6
+ http://1978th.net/tokyocabinet/
7
+ you can install Ruby bindings via "gem install tokyocabinet",
8
+ but this still requires libtokyocabinet to be installed system-wide
9
+ bdb (berkeley db) for "bdb" DB adaptor or converting from it
10
+ http://raa.ruby-lang.org/project/bdb/
6
11
  (which requires libdb4.x or better, formerly from
7
12
  www.sleepycat.com, now at
8
13
  http://www.oracle.com/technology/products/berkeley-db/index.html)
@@ -11,6 +16,7 @@ Core requirements
11
16
  have a libdb-ruby packaged (or similar).
12
17
  For Windows instructions, check at the bottom
13
18
  of this file.
19
+
14
20
  net/http 1.2+
15
21
  net/https (for debian, this will also need libopenssl-ruby)
16
22
  socket
data/Rakefile CHANGED
@@ -4,38 +4,16 @@ require 'rake/gempackagetask'
4
4
 
5
5
  task :default => [:buildext]
6
6
 
7
- spec = Gem::Specification.new do |s|
8
- s.name = 'rbot'
9
- s.version = '0.9.14'
10
- s.summary = <<-EOF
11
- A modular ruby IRC bot.
12
- EOF
13
- s.description = <<-EOF
14
- A modular ruby IRC bot specifically designed for ease of extension via plugins.
15
- EOF
16
- s.requirements << 'Ruby, version 1.8.0 (or newer)'
17
-
18
- # s.files = Dir.glob("**/*").delete_if { |item| item.include?(".svn") }
19
- s.files = FileList['lib/**/*.rb', 'bin/*', 'data/rbot/**/*', 'AUTHORS', 'COPYING', 'README', 'REQUIREMENTS', 'TODO', 'ChangeLog', 'INSTALL', 'Usage_en.txt', 'setup.rb', 'po/*.pot', 'po/**/*.po'].to_a.delete_if {|item| item == ".svn"}
20
- s.bindir = 'bin'
21
- s.executables = ['rbot', 'rbot-remote']
22
- s.default_executable = 'rbot'
23
- s.extensions = 'Rakefile'
24
-
25
- # s.autorequire = 'rbot/ircbot'
26
- s.has_rdoc = true
27
- s.rdoc_options = ['--exclude', 'post-install.rb',
28
- '--title', 'rbot API Documentation', '--main', 'README', 'README']
29
-
30
- s.author = 'Tom Gilbert'
31
- s.email = 'tom@linuxbrit.co.uk'
32
- s.homepage = 'http://ruby-rbot.org'
33
- s.rubyforge_project = 'rbot'
34
- end
35
-
36
- Rake::GemPackageTask.new(spec) do |pkg|
37
- pkg.need_zip = true
38
- pkg.need_tar = true
7
+ SPECFILE = 'rbot.gemspec'
8
+ # The Rakefile is also used after installing the gem, to build
9
+ # the .mo files. Since in this case the SPECFILE is not available,
10
+ # we must (and can) skip defining the gem packaging tasks.
11
+ if File.exist? SPECFILE
12
+ spec = eval(File.read(SPECFILE), nil, SPECFILE)
13
+ Rake::GemPackageTask.new(spec) do |pkg|
14
+ pkg.need_zip = true
15
+ pkg.need_tar = true
16
+ end
39
17
  end
40
18
 
41
19
  # normalize a po/pot file
data/bin/rbot CHANGED
@@ -47,7 +47,7 @@ require 'etc'
47
47
  require 'getoptlong'
48
48
  require 'fileutils'
49
49
 
50
- $version ||= '0.9.14'
50
+ $version ||= '0.9.15'
51
51
  $version_timestamp ||= 0
52
52
  $opts = Hash.new
53
53
 
@@ -98,6 +98,11 @@ rescue LoadError => e
98
98
  exit 2
99
99
  end
100
100
 
101
+ # ruby 1.9 specific fixes
102
+ unless RUBY_VERSION < '1.9'
103
+ require 'rbot/compat19'
104
+ end
105
+
101
106
  if ($opts["version"])
102
107
  puts "rbot #{$version}"
103
108
  exit 0
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+ # post-commit - a hook to talk to the svnwatch rbot plugin
3
+ # author(s): Robby Russell and Ben Bleything of the PDX.rb
4
+ # slightly modified to handle multiple repositorys by Daniel Hedberg
5
+ # This file should be placed in the repository's hooks directory
6
+
7
+ require 'drb'
8
+
9
+ # Configuration Options
10
+ chan = '#channel' #IRC channel that you want rbot to send notices to
11
+
12
+ @conf = {
13
+ :port => '7666', # 7666 (you will need this to be the same in post-commit)
14
+ :host => '192.168.130.5', # localhost, don't set to remote ip unless you know what you are doing
15
+ }
16
+
17
+ chan = '#svn-hardware'
18
+
19
+
20
+ # Okay. So we get two args from svn.
21
+ #
22
+ # [1] - repo path
23
+ # [2] - revision number
24
+ #
25
+ # We then use this information to gather relevant data about the commit
26
+ # and do with it as we please.
27
+
28
+ path = ARGV[0]
29
+ rev = ARGV[1]
30
+
31
+ if (path.nil? || rev.nil?)
32
+ puts "Usage: post-commit <repo path> <rev number>"
33
+ exit
34
+ end
35
+
36
+ path = File.expand_path(path)
37
+
38
+ DRb.start_service
39
+ bot = DRbObject.new(nil, "druby://#{@conf[:host]}:#{@conf[:port]}")
40
+
41
+ # The array contains this data:
42
+ # [0]: committer
43
+ # [1]: timestamp of commit
44
+ # [2]: Size of log entry, in bytes
45
+ # [3]: Log message
46
+ info_array = `svnlook info --revision #{rev} #{path}`.strip.split(/\n/, 4)
47
+
48
+ log = `svn log -v -r #{rev} file://#{path}`
49
+
50
+ # dumb idea, it would wrap too many lines if multiple files...
51
+ #changed = `svnlook changed -r #{rev} #{path}`.strip
52
+
53
+ # guess what the repository name is
54
+ repos = path.split(/\//).last
55
+
56
+ commit_info = { :author => info_array[0],
57
+ :revision => rev,
58
+ :repository => repos,
59
+ :log => log,
60
+ :chan => chan,
61
+ }
62
+
63
+ begin
64
+ bot.svn_commit commit_info
65
+ rescue
66
+
67
+ end
68
+ exit 0
@@ -19,10 +19,10 @@
19
19
 
20
20
  class StatsPlugin < Plugin
21
21
 
22
- @@commands = {
22
+ @@commands = {
23
23
  "stats" => "handle_stats",
24
24
  "track" => "handle_track",
25
- "untrack" => "handle_untrack",
25
+ "untrack" => "handle_untrack",
26
26
  "listtokens" => "handle_listtokens",
27
27
  "rmabuser" => "handle_rmabuser"
28
28
  }
@@ -61,7 +61,7 @@ class StatsPlugin < Plugin
61
61
  m.reply "What a crazy fool! Did you mean |help stats?"
62
62
  return
63
63
  end
64
-
64
+
65
65
  meth = self.method(@@commands[m.plugin])
66
66
  meth.call(m)
67
67
  end
@@ -16,7 +16,7 @@ class VanDalePlugin < Plugin
16
16
  ret = Array.new
17
17
  Utils.safe_exec("/usr/local/bin/gnuvd", m.params).each{|line| if line.length > 5 then ret << line end}
18
18
  m.reply ret.delete_at(0)
19
- while ret[0] =~ /^[[:alpha:]_]*[0-9]/
19
+ while ret[0] =~ /^[[:alpha:]_]*[0-9]/
20
20
  m.reply ret.delete_at(0)
21
21
  end
22
22
  while ret[0] =~ /^[0-9]/
@@ -0,0 +1,72 @@
1
+ #-- vim:sw=2:et
2
+ #++
3
+
4
+ rss_type :blog do |s|
5
+ author = s[:author] ? (s[:author] + " ") : ""
6
+ abt = s[:category] ? "about #{s[:category]} " : ""
7
+ line1 = "%{handle}%{date}%{author}blogged %{abt}at %{link}"
8
+ line2 = "%{handle}%{title} - %{desc}"
9
+ make_stream(line1, line2, s, :author => author, :abt => abt)
10
+ end
11
+
12
+ rss_type :forum do |s|
13
+ author = s[:author] ? (s[:author] + " ") : ""
14
+ abt = s[:category] ? "on #{s[:category]} " : ""
15
+ line1 = "%{handle}%{date}%{author}posted %{abt}at %{link}"
16
+ line2 = "%{handle}%{title} - %{desc}"
17
+ make_stream(line1, line2, s, :author => author, :abt => abt)
18
+ end
19
+
20
+ rss_type :git do |s|
21
+ author = s[:author].sub(/@\S+?\s*>/, "@...>") + " " if s[:author]
22
+ line1 = "%{handle}%{date}%{author}committed %{title}%{at}%{link}"
23
+ make_stream(line1, nil, s, :author => author)
24
+ end
25
+
26
+ rss_type :gmane do |s|
27
+ line1 = "%{handle}%{date}Message %{title} sent by %{author}. %{desc}"
28
+ make_stream(line1, nil, s)
29
+ end
30
+
31
+ rss_type :headlines do |s|
32
+ line1 = (s[:handle].empty? ? "%{date}" : "%{handle}") << "%{title}"
33
+ make_stream(line1, nil, s)
34
+ end
35
+
36
+ rss_type :news do |s|
37
+ line1 = "%{handle}%{date}%{title}%{at}%{link}" % s
38
+ line2 = "%{handle}%{date}%{desc}" % s
39
+ make_stream(line1, line2, s)
40
+ end
41
+
42
+ rss_type :photoblog do |s|
43
+ author = s[:author] ? (s[:author] + " ") : ""
44
+ abt = s[:category] ? "under #{s[:category]} " : ""
45
+ line1 = "%{handle}%{date}%{author}added an image %{abt}at %{link}"
46
+ line2 = "%{handle}%{title} - %{desc}"
47
+ make_stream(line1, line2, s, :author => author, :abt => abt)
48
+ end
49
+
50
+ rss_type :trac do |s|
51
+ author = s[:author].sub(/@\S+?\s*>/, "@...>") + ": " if s[:author]
52
+ line1 = "%{handle}%{date}%{author}%{title}%{at}%{link}"
53
+ line2 = nil
54
+ unless s[:item].title =~ /^(?:Changeset \[(?:[\da-f]+)\]|\(git commit\))/
55
+ line2 = "%{handle}%{date}%{desc}"
56
+ end
57
+ make_stream(line1, line2, s, :author => author)
58
+ end
59
+
60
+ rss_type :wiki do |s|
61
+ line1 = "%{handle}%{date}%{title}%{at}%{link}"
62
+ line1 << "has been edited by %{author}. %{desc}"
63
+ make_stream(line1, nil, s)
64
+ end
65
+
66
+ rss_type :"/." do |s|
67
+ dept = "(from the #{s[:item].slash_department} dept) " rescue nil
68
+ sec = " in section #{s[:item].slash_section}" rescue nil
69
+ line1 = "%{handle}%{date}%{dept}%{title}%{at}%{link} "
70
+ line1 << "(posted by %{author}%{sec})"
71
+ make_stream(line1, nil, s, :dept => dept, :sec => sec)
72
+ end
@@ -0,0 +1,50 @@
1
+ okay:
2
+ okei
3
+ selvä :)
4
+ ok!
5
+ tehty
6
+ toki
7
+ valmis
8
+ dunno:
9
+ mitäh?
10
+ en tiedä
11
+ emt
12
+ ei hajuakaan
13
+ ei tietoa
14
+ hä?
15
+ häh?
16
+ älä multa kysy
17
+ dunno_about_X:
18
+ en tiedä mikä %s on
19
+ mikä on %s?
20
+ %s? mikä se on?
21
+ insult:
22
+ %s: :(
23
+ %s: vihaan sua :(
24
+ %s: kuole senkin paska!
25
+ %s: nyt loukkasit minua :'(
26
+ hello:
27
+ moi :)
28
+ terve
29
+ hei
30
+ päivää
31
+ hello_X:
32
+ terve %s :)
33
+ %s: terve
34
+ %s: moi :)
35
+ %s: hei
36
+ moi %s
37
+ %s: mitä kuuluu?
38
+ welcome:
39
+ ole hyvä :)
40
+ thanks:
41
+ kiitti
42
+ kiitos :)
43
+ tänks
44
+ thanks_X:
45
+ %s: kiitos
46
+ %s: kiitti :)
47
+ quit:
48
+ moikka
49
+ hyvästi
50
+ näkemiin
@@ -38,8 +38,8 @@ class AliasPlugin < Plugin
38
38
 
39
39
  def initialize
40
40
  super
41
- @data_path = "#{@bot.botclass}/alias/"
42
- @data_file = "#{@data_path}/aliases.yaml"
41
+ @data_path = datafile
42
+ @data_file = File.join(@data_path, 'aliases.yaml')
43
43
  # hash of alias => command entries
44
44
  data = nil
45
45
  aliases = if File.exist?(@data_file) &&
@@ -58,10 +58,10 @@ class AliasPlugin < Plugin
58
58
  warning _("Invalid alias entry %{alias} : %{command} in %{filename}: %{reason}") %
59
59
  {:alias => a, :command => c, :filename => @data_file, :reason => $1}
60
60
  end
61
- end
62
- end
61
+ end
62
+ end
63
63
 
64
- def save
64
+ def save
65
65
  FileUtils.mkdir_p(@data_path)
66
66
  Utils.safe_save(@data_file) {|f| f.write @aliases.to_yaml}
67
67
  end
@@ -110,7 +110,7 @@ class AliasPlugin < Plugin
110
110
  command.scan(/<(\w+)>/).flatten.to_set ==
111
111
  text.split.grep(/\A[:*](\w+)\Z/) {$1}.to_set or
112
112
  raise AliasDefinitionError.new(_('The arguments in alias must match the substitutions in command, and vice versa'))
113
-
113
+
114
114
  begin
115
115
  map text, :action => :"alias_handle<#{text}>", :auth_path => 'run'
116
116
  rescue
@@ -1,26 +1,65 @@
1
+ #-- vim:sw=2:et
2
+ #++
3
+ #
4
+ # :title: Autorejoin
5
+
1
6
  class AutoRejoinPlugin < Plugin
2
7
  Config.register Config::BooleanValue.new('rejoin.insult',
3
8
  :default => true,
4
9
  :desc => "Determines if the bot will insult whoever kicked it, after rejoin")
10
+ Config.register Config::BooleanValue.new('rejoin.kick',
11
+ :default => false,
12
+ :desc => "Determines if the bot will kick whoever kicked it, after rejoin")
13
+ Config.register Config::ArrayValue.new('rejoin.no_kick_list',
14
+ :default => ["owner"],
15
+ :desc => "List of botusers that can kick the bot without being kicked")
16
+
17
+
18
+ def initialize
19
+ super
20
+ @should_kick = Hash.new
21
+ end
5
22
 
6
23
  def help(plugin, topic="")
7
24
  "performs an automatic rejoin if the bot is kicked from a channel"
8
25
  end
9
26
 
10
27
  def kick(m)
28
+ password = m.channel.mode[:k].value
29
+
11
30
  if m.address?
31
+ if @bot.config['rejoin.kick'] and not @bot.config['rejoin.no_kick_list'].include? m.source.botuser.username
32
+ @should_kick[m.channel.downcase] = m.sourcenick
33
+ end
12
34
  r = rand(10)
13
35
  if r > 0
14
36
  @bot.timer.add_once(r) {
15
- @bot.join m.channel
37
+ @bot.join m.channel, password
16
38
  @bot.say(m.channel, @bot.lang.get("insult") % m.sourcenick) if @bot.config['rejoin.insult']
17
39
  }
18
40
  else
19
- @bot.join m.channel
41
+ @bot.join m.channel, password
20
42
  @bot.say(m.channel, @bot.lang.get("insult") % m.sourcenick) if @bot.config['rejoin.insult']
21
43
  end
22
44
  end
23
45
  end
46
+
47
+ def modechange(m)
48
+ # if we got opped on a channel we want to kick somebody from,
49
+ # do the kicking
50
+
51
+ # getting opped on a channel is a channel mode change, so bail out if this
52
+ # is not a channel mode change
53
+ return unless m.target.kind_of? Channel
54
+ # bail out if we are not op, too
55
+ return unless @bot.myself.is_op?(m.target)
56
+ # bail out if there's nobody to kick
57
+ to_kick = @should_kick.delete(m.target.downcase)
58
+ return unless to_kick
59
+ # kick the evil user that kicked us
60
+ @bot.kick m.target, to_kick, _("for kicking me out earlier")
61
+ end
62
+
24
63
  end
25
64
 
26
65
  plugin = AutoRejoinPlugin.new