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
@@ -967,6 +967,9 @@ module Irc
967
967
  # This is used by some messages to build lists of users that
968
968
  # will be delegated when the ENDOF... message is received
969
969
  @tmpusers = []
970
+
971
+ # Same as above, just for bans
972
+ @tmpbans = []
970
973
  end
971
974
 
972
975
  # Clear the server and reset the user
@@ -1180,6 +1183,17 @@ module Irc
1180
1183
  data[:users] = @tmpusers
1181
1184
  handle(:names, data)
1182
1185
  @tmpusers = Array.new
1186
+ when RPL_BANLIST
1187
+ data[:channel] = @server.channel(argv[1])
1188
+ data[:mask] = argv[2]
1189
+ data[:by] = argv[3]
1190
+ data[:at] = argv[4]
1191
+ @tmpbans << data
1192
+ when RPL_ENDOFBANLIST
1193
+ data[:channel] = @server.channel(argv[1])
1194
+ data[:bans] = @tmpbans
1195
+ handle(:banlist, data)
1196
+ @tmpbans = Array.new
1183
1197
  when RPL_LUSERCLIENT
1184
1198
  # ":There are <integer> users and <integer>
1185
1199
  # services on <integer> servers"
@@ -1317,7 +1331,7 @@ module Irc
1317
1331
  when RPL_WHOISCHANNELS
1318
1332
  @whois ||= Hash.new
1319
1333
  @whois[:nick] = argv[1]
1320
- @whois[:channels] = []
1334
+ @whois[:channels] ||= []
1321
1335
  user = @server.user(@whois[:nick])
1322
1336
  argv[-1].split.each do |prechan|
1323
1337
  pfx = prechan.scan(/[#{@server.supports[:prefix][:prefixes].join}]/)
@@ -1344,17 +1358,19 @@ module Irc
1344
1358
  data[:channel].url=data[:url].dup
1345
1359
  handle(:channel_url, data)
1346
1360
  when ERR_NOSUCHNICK
1347
- data[:nick] = argv[1]
1348
- if user = @server.get_user(data[:nick])
1361
+ data[:target] = argv[1]
1362
+ data[:message] = argv[2]
1363
+ handle(:nosuchtarget, data)
1364
+ if user = @server.get_user(data[:target])
1349
1365
  @server.delete_user(user)
1350
1366
  end
1351
- handle(:nosuchnick, data)
1352
1367
  when ERR_NOSUCHCHANNEL
1353
- data[:channel] = argv[1]
1354
- if channel = @server.get_channel(data[:channel])
1368
+ data[:target] = argv[1]
1369
+ data[:message] = argv[2]
1370
+ handle(:nosuchtarget, data)
1371
+ if channel = @server.get_channel(data[:target])
1355
1372
  @server.delete_channel(channel)
1356
1373
  end
1357
- handle(:nosuchchannel, data)
1358
1374
  else
1359
1375
  warning "Unknown message #{serverstring.inspect}"
1360
1376
  handle(:unknown, data)
@@ -1474,6 +1490,9 @@ module Irc
1474
1490
  when :MODE
1475
1491
  parse_mode(serverstring, argv, data)
1476
1492
  handle(:mode, data)
1493
+ when :ERROR
1494
+ data[:message] = argv[1]
1495
+ handle(:error, data)
1477
1496
  else
1478
1497
  warning "Unknown message #{serverstring.inspect}"
1479
1498
  handle(:unknown, data)
@@ -1531,7 +1550,7 @@ module Irc
1531
1550
  data[:modes].last << arg
1532
1551
  end
1533
1552
  }
1534
- else
1553
+ when Channel
1535
1554
  # array of indices in data[:modes] where parameters
1536
1555
  # are needed
1537
1556
  who_wants_params = []
@@ -1584,6 +1603,10 @@ module Irc
1584
1603
  getting_args = true unless who_wants_params.empty?
1585
1604
  end
1586
1605
  end
1606
+ unless who_wants_params.empty?
1607
+ warning "Unhandled malformed modeline #{data[:modestring]} (unexpected empty arguments)"
1608
+ return
1609
+ end
1587
1610
 
1588
1611
  data[:modes].each { |mode|
1589
1612
  set, key, val = mode
@@ -1593,6 +1616,8 @@ module Irc
1593
1616
  data[:target].mode[key].send(set)
1594
1617
  end
1595
1618
  }
1619
+ else
1620
+ warning "Ignoring #{data[:modestring]} for unrecognized target #{argv[0]} (#{data[:target].inspect})"
1596
1621
  end
1597
1622
  end
1598
1623
  end
@@ -62,7 +62,7 @@ class Timer
62
62
  @repeat = opts[:repeat] if opts.include? :repeat
63
63
 
64
64
  if block_given?
65
- @block = block
65
+ @block = block
66
66
  elsif opts[:code]
67
67
  @block = opts[:code]
68
68
  end
@@ -233,31 +233,23 @@ class Timer
233
233
  end
234
234
 
235
235
  def run_actions(now = Time.now)
236
- nxt = nil
237
236
  @actions.keys.each do |k|
238
237
  return -1 if @stopping
239
- a = @actions[k]
240
- next if (!a) or a.blocked?
241
-
242
- if a.next <= now
243
- begin
244
- @current = k
245
- v = a.run(now)
246
- ensure
247
- @current = nil
248
- end
249
-
250
- unless v
251
- @actions.delete k
252
- next
253
- end
254
- else
255
- v = a.next
238
+ a = @actions[k] or next
239
+ next if a.blocked? || a.next > now
240
+
241
+ begin
242
+ @current = k
243
+ a.run(now)
244
+ ensure
245
+ @current = nil
256
246
  end
257
247
 
258
- nxt = v if v and ((!nxt) or (v < nxt))
248
+ @actions.delete k unless a.next
259
249
  end
260
250
 
251
+ nxt = @actions.values.find_all { |v| !v.blocked? }.map{ |v| v.next }.min
252
+
261
253
  if nxt
262
254
  delta = nxt - now
263
255
  delta = 0 if delta < 0
@@ -0,0 +1,3 @@
1
+ #: data/rbot/plugins/autorejoin.rb:60
2
+ msgid "for kicking me out earlier"
3
+ msgstr ""
@@ -6,7 +6,7 @@
6
6
  msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: rbot\n"
9
- "POT-Creation-Date: 2008-06-20 01:49+0200\n"
9
+ "POT-Creation-Date: 2009-03-20 15:57+0100\n"
10
10
  "PO-Revision-Date: 2007-07-14 00:06-0400\n"
11
11
  "Last-Translator: Yaohan Chen <yaohan.chen@gmail.com>\n"
12
12
  "Language-Team: English\n"
@@ -15,18 +15,18 @@ msgstr ""
15
15
  "Content-Transfer-Encoding: 8bit\n"
16
16
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
17
 
18
- #: data/rbot/plugins/games/azgame.rb:78 data/rbot/plugins/games/azgame.rb:251
19
- #: data/rbot/plugins/games/azgame.rb:257
18
+ #: data/rbot/plugins/games/azgame.rb:106 data/rbot/plugins/games/azgame.rb:302
19
+ #: data/rbot/plugins/games/azgame.rb:308
20
20
  msgid "%{count} try"
21
21
  msgid_plural "%{count} tries"
22
22
  msgstr[0] "%{count} try"
23
23
  msgstr[1] "%{count} tries"
24
24
 
25
- #: data/rbot/plugins/games/azgame.rb:83
25
+ #: data/rbot/plugins/games/azgame.rb:111
26
26
  msgid "winner, %{tries}"
27
27
  msgstr ""
28
28
 
29
- #: data/rbot/plugins/games/azgame.rb:163
29
+ #: data/rbot/plugins/games/azgame.rb:206
30
30
  msgid ""
31
31
  "%{bold}BINGO!%{bold} the word was %{underline}%{word}%{underline}. Congrats, "
32
32
  "%{bold}%{player}%{bold}!"
@@ -34,45 +34,45 @@ msgstr ""
34
34
  "%{bold}BINGO!%{bold} the word was %{underline}%{word}%{underline}. Congrats, "
35
35
  "%{bold}%{player}%{bold}!"
36
36
 
37
- #: data/rbot/plugins/games/azgame.rb:170
37
+ #: data/rbot/plugins/games/azgame.rb:213
38
38
  msgid ""
39
39
  "The game was won after %{tries} tries. Scores for this game: %{scores}"
40
40
  msgstr ""
41
41
  "The game was won after %{tries} tries. Scores for this game: %{scores}"
42
42
 
43
- #: data/rbot/plugins/games/azgame.rb:173
43
+ #: data/rbot/plugins/games/azgame.rb:216
44
44
  msgid "%{word} is not in the range %{bold}%{range}%{bold}"
45
45
  msgstr "%{word} is not in the range %{bold}%{range}%{bold}"
46
46
 
47
- #: data/rbot/plugins/games/azgame.rb:177
47
+ #: data/rbot/plugins/games/azgame.rb:220
48
48
  msgid "%{word} doesn't exist or is not acceptable for the game"
49
49
  msgstr "%{word} doesn't exist or is not acceptable for the game"
50
50
 
51
- #: data/rbot/plugins/games/azgame.rb:183
51
+ #: data/rbot/plugins/games/azgame.rb:226
52
52
  msgid "close, but no cigar. New range: %{bold}%{range}%{bold}"
53
53
  msgstr "close, but no cigar. New range: %{bold}%{range}%{bold}"
54
54
 
55
- #: data/rbot/plugins/games/azgame.rb:187
55
+ #: data/rbot/plugins/games/azgame.rb:230
56
56
  msgid "%{word} is already one of the range extrema: %{range}"
57
57
  msgstr "%{word} is already one of the range extrema: %{range}"
58
58
 
59
- #: data/rbot/plugins/games/azgame.rb:189
59
+ #: data/rbot/plugins/games/azgame.rb:232
60
60
  msgid "hm, something went wrong while verifying %{word}"
61
61
  msgstr "hm, something went wrong while verifying %{word}"
62
62
 
63
- #: data/rbot/plugins/games/azgame.rb:198
63
+ #: data/rbot/plugins/games/azgame.rb:241
64
64
  msgid "no A-Z game running here, can't check if %{word} is valid, can I?"
65
65
  msgstr "no A-Z game running here, can't check if %{word} is valid, can I?"
66
66
 
67
- #: data/rbot/plugins/games/azgame.rb:202
67
+ #: data/rbot/plugins/games/azgame.rb:245
68
68
  msgid "I only accept single words composed by letters only, sorry"
69
69
  msgstr "I only accept single words composed by letters only, sorry"
70
70
 
71
- #: data/rbot/plugins/games/azgame.rb:212
71
+ #: data/rbot/plugins/games/azgame.rb:255
72
72
  msgid "the word in %{bold}%{range}%{bold} was: %{bold}%{word}%{bold}"
73
73
  msgstr "the word in %{bold}%{range}%{bold} was: %{bold}%{word}%{bold}"
74
74
 
75
- #: data/rbot/plugins/games/azgame.rb:216
75
+ #: data/rbot/plugins/games/azgame.rb:259
76
76
  msgid ""
77
77
  "The game was cancelled after %{tries} tries. Scores for this game would have "
78
78
  "been: %{scores}"
@@ -80,86 +80,86 @@ msgstr ""
80
80
  "The game was cancelled after %{tries} tries. Scores for this game would have "
81
81
  "been: %{scores}"
82
82
 
83
- #: data/rbot/plugins/games/azgame.rb:219
83
+ #: data/rbot/plugins/games/azgame.rb:262
84
84
  msgid "no A-Z game running in this channel ..."
85
85
  msgstr "no A-Z game running in this channel ..."
86
86
 
87
- #: data/rbot/plugins/games/azgame.rb:229
87
+ #: data/rbot/plugins/games/azgame.rb:272
88
88
  msgid "let me think ..."
89
89
  msgstr "let me think ..."
90
90
 
91
- #: data/rbot/plugins/games/azgame.rb:233
91
+ #: data/rbot/plugins/games/azgame.rb:276 data/rbot/plugins/games/azgame.rb:284
92
92
  msgid "couldn't think of anything ..."
93
93
  msgstr "couldn't think of anything ..."
94
94
 
95
- #: data/rbot/plugins/games/azgame.rb:237
96
- msgid "I can't play A-Z in %{lang}, sorry"
97
- msgstr "I can't play A-Z in %{lang}, sorry"
98
-
99
- #: data/rbot/plugins/games/azgame.rb:240
95
+ #: data/rbot/plugins/games/azgame.rb:279 data/rbot/plugins/games/azgame.rb:287
100
96
  msgid "got it!"
101
97
  msgstr "got it!"
102
98
 
103
- #: data/rbot/plugins/games/azgame.rb:250
99
+ #: data/rbot/plugins/games/azgame.rb:290
100
+ msgid "I can't play A-Z in %{lang}, sorry"
101
+ msgstr "I can't play A-Z in %{lang}, sorry"
102
+
103
+ #: data/rbot/plugins/games/azgame.rb:301
104
104
  msgid " (after %{total_tries} and %{invalid_tries})"
105
105
  msgstr " (after %{total_tries} and %{invalid_tries}"
106
106
 
107
- #: data/rbot/plugins/games/azgame.rb:253
107
+ #: data/rbot/plugins/games/azgame.rb:304
108
108
  msgid "%{count} invalid try"
109
109
  msgid_plural "%{count} invalid tries"
110
110
  msgstr[0] "%{count} invalid try"
111
111
  msgstr[1] "%{count} invalid tries"
112
112
 
113
- #: data/rbot/plugins/games/azgame.rb:256
113
+ #: data/rbot/plugins/games/azgame.rb:307
114
114
  msgid " (after %{total_tries})"
115
115
  msgstr " (after %{total_tries}"
116
116
 
117
- #: data/rbot/plugins/games/azgame.rb:262
117
+ #: data/rbot/plugins/games/azgame.rb:313
118
118
  msgid "A-Z: %{bold}%{range}%{bold}"
119
119
  msgstr "A-Z: %{bold}%{range}%{bold}"
120
120
 
121
- #: data/rbot/plugins/games/azgame.rb:273
121
+ #: data/rbot/plugins/games/azgame.rb:324
122
122
  msgid "I have %{count} %{lang} word in my cache"
123
123
  msgid_plural "I have %{count} %{lang} words in my cache"
124
124
  msgstr[0] "I have %{count} %{lang} word in my cache"
125
125
  msgstr[1] "I have %{count} %{lang} words in my cache"
126
126
 
127
- #: data/rbot/plugins/games/azgame.rb:276
127
+ #: data/rbot/plugins/games/azgame.rb:327
128
128
  msgid "provide a regexp to match"
129
129
  msgstr "provide a regexp to match"
130
130
 
131
- #: data/rbot/plugins/games/azgame.rb:288
131
+ #: data/rbot/plugins/games/azgame.rb:339
132
132
  msgid "no %{lang} word I know match %{pattern}"
133
133
  msgstr "no %{lang} word I know match %{pattern}"
134
134
 
135
- #: data/rbot/plugins/games/azgame.rb:290
135
+ #: data/rbot/plugins/games/azgame.rb:341
136
136
  msgid ""
137
137
  "more than 25 %{lang} words I know match %{pattern}, try a stricter matching"
138
138
  msgstr ""
139
139
  "more than 25 %{lang} words I know match %{pattern}, try a stricter matching"
140
140
 
141
- #: data/rbot/plugins/games/azgame.rb:296 data/rbot/plugins/games/azgame.rb:312
142
- #: data/rbot/plugins/games/azgame.rb:324
141
+ #: data/rbot/plugins/games/azgame.rb:347 data/rbot/plugins/games/azgame.rb:363
142
+ #: data/rbot/plugins/games/azgame.rb:375
143
143
  msgid "provide a word"
144
144
  msgstr "provide a word"
145
145
 
146
- #: data/rbot/plugins/games/azgame.rb:301 data/rbot/plugins/games/azgame.rb:317
146
+ #: data/rbot/plugins/games/azgame.rb:352 data/rbot/plugins/games/azgame.rb:368
147
147
  msgid "I don't know any %{lang} word %{word}"
148
148
  msgstr "I don't know any %{lang} word %{word}"
149
149
 
150
- #: data/rbot/plugins/games/azgame.rb:305
150
+ #: data/rbot/plugins/games/azgame.rb:356
151
151
  msgid "%{word} learned from %{user} on %{date}"
152
152
  msgstr "%{word} learned from %{user} on %{date}"
153
153
 
154
- #: data/rbot/plugins/games/azgame.rb:307
154
+ #: data/rbot/plugins/games/azgame.rb:358
155
155
  msgid "%{word} learned from %{user}"
156
156
  msgstr "%{word} learned from %{user}"
157
157
 
158
- #: data/rbot/plugins/games/azgame.rb:329
158
+ #: data/rbot/plugins/games/azgame.rb:380
159
159
  msgid "I already know the %{lang} word %{word}"
160
160
  msgstr "I already know the %{lang} word %{word}"
161
161
 
162
- #: data/rbot/plugins/games/azgame.rb:545
162
+ #: data/rbot/plugins/games/azgame.rb:591
163
163
  msgid ""
164
164
  "az [lang] word [count|list|add|delete] => manage the az wordlist for "
165
165
  "language lang (defaults to current bot language)"
@@ -167,15 +167,15 @@ msgstr ""
167
167
  "az [lang] word [count|list|add|delete] => manage the az wordlist for "
168
168
  "language lang (defaults to current bot language)"
169
169
 
170
- #: data/rbot/plugins/games/azgame.rb:547
170
+ #: data/rbot/plugins/games/azgame.rb:593
171
171
  msgid "az cancel => abort current game"
172
172
  msgstr "az cancel => abort current game"
173
173
 
174
- #: data/rbot/plugins/games/azgame.rb:549
174
+ #: data/rbot/plugins/games/azgame.rb:595
175
175
  msgid "az check <word> => checks <word> against current game"
176
176
  msgstr "az check <word> => checks <word> against current game"
177
177
 
178
- #: data/rbot/plugins/games/azgame.rb:551
178
+ #: data/rbot/plugins/games/azgame.rb:597
179
179
  msgid ""
180
180
  "try to guess the word the bot is thinking of; if you guess wrong, the bot "
181
181
  "will use the new word to restrict the range of allowed words: eventually, "
@@ -185,7 +185,7 @@ msgstr ""
185
185
  "will use the new word to restrict the range of allowed words: eventually, "
186
186
  "the range will be so small around the correct word that you can't miss it"
187
187
 
188
- #: data/rbot/plugins/games/azgame.rb:553
188
+ #: data/rbot/plugins/games/azgame.rb:599
189
189
  msgid ""
190
190
  "az => start a game if none is running, show the current word range "
191
191
  "otherwise; you can say 'az <language>' if you want to play in a language "
@@ -195,6 +195,14 @@ msgstr ""
195
195
  "otherwise; you can say 'az <language>' if you want to play in a language "
196
196
  "different from the current bot default"
197
197
 
198
- #: data/rbot/plugins/games/azgame.rb:555
198
+ #: data/rbot/plugins/games/azgame.rb:604
199
199
  msgid "az topics: play, rules, cancel, manage, check"
200
200
  msgstr "az topics: play, rules, cancel, manage, check"
201
+
202
+ #: data/rbot/plugins/games/azgame.rb:605
203
+ msgid "available languages: %{langs}"
204
+ msgstr ""
205
+
206
+ #: data/rbot/plugins/games/azgame.rb:606
207
+ msgid "available wordlists: %{wls}"
208
+ msgstr ""
@@ -0,0 +1,15 @@
1
+ #: data/rbot/plugins/bash.rb:71
2
+ msgid "bash => print a random quote from bash.org"
3
+ msgstr ""
4
+
5
+ #: data/rbot/plugins/bash.rb:72
6
+ msgid "bash quote_id => print that quote id from bash.org"
7
+ msgstr ""
8
+
9
+ #: data/rbot/plugins/bash.rb:73
10
+ msgid "bash search <terms> => print the first bash.org quote matching <terms>"
11
+ msgstr ""
12
+
13
+ #: data/rbot/plugins/bash.rb:74
14
+ msgid "bash latest => print the latest quote from bash.org"
15
+ msgstr ""
@@ -6,7 +6,7 @@
6
6
  msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: rbot\n"
9
- "POT-Creation-Date: 2008-06-20 01:49+0200\n"
9
+ "POT-Creation-Date: 2009-03-20 15:57+0100\n"
10
10
  "PO-Revision-Date: 2007-07-14 00:06-0400\n"
11
11
  "Last-Translator: Yaohan Chen <yaohan.chen@gmail.com>\n"
12
12
  "Language-Team: English\n"
@@ -15,11 +15,11 @@ msgstr ""
15
15
  "Content-Transfer-Encoding: 8bit\n"
16
16
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
17
 
18
- #: data/rbot/plugins/dictclient.rb:57
18
+ #: data/rbot/plugins/dictclient.rb:61
19
19
  msgid "Hostname or hostname:port of the DICT server used to lookup words"
20
20
  msgstr "Hostname or hostname:port of the DICT server used to lookup words"
21
21
 
22
- #: data/rbot/plugins/dictclient.rb:60
22
+ #: data/rbot/plugins/dictclient.rb:64
23
23
  msgid ""
24
24
  "When multiple databases reply a number of definitions that above this limit, "
25
25
  "only the database names will be listed. Otherwise, the full definitions from "
@@ -29,21 +29,21 @@ msgstr ""
29
29
  "only the database names will be listed. Otherwise, the full definitions from "
30
30
  "each database are replied"
31
31
 
32
- #: data/rbot/plugins/dictclient.rb:63
32
+ #: data/rbot/plugins/dictclient.rb:67
33
33
  msgid "Each definition is truncated to this length"
34
34
  msgstr "Each definition is truncated to this length"
35
35
 
36
- #: data/rbot/plugins/dictclient.rb:66
36
+ #: data/rbot/plugins/dictclient.rb:70
37
37
  msgid "Format of headwords; <word> will be replaced with the actual word"
38
38
  msgstr "Format of headwords; <word> will be replaced with the actual word"
39
39
 
40
- #: data/rbot/plugins/dictclient.rb:69
40
+ #: data/rbot/plugins/dictclient.rb:73
41
41
  msgid ""
42
42
  "Format of database names; <database> will be replaced with the database name"
43
43
  msgstr ""
44
44
  "Format of database names; <database> will be replaced with the database name"
45
45
 
46
- #: data/rbot/plugins/dictclient.rb:72
46
+ #: data/rbot/plugins/dictclient.rb:76
47
47
  msgid ""
48
48
  "Format of definitions. <word> will be replaced with the formatted headword, "
49
49
  "<def> will be replaced with the truncated definition, and <database> with "
@@ -53,7 +53,7 @@ msgstr ""
53
53
  "<def> will be replaced with the truncated definition, and <database> with "
54
54
  "the formatted database name"
55
55
 
56
- #: data/rbot/plugins/dictclient.rb:75
56
+ #: data/rbot/plugins/dictclient.rb:79
57
57
  msgid ""
58
58
  "Format of match results. <matches> will be replaced with the formatted "
59
59
  "headwords, <database> with the formatted database name"
@@ -61,7 +61,7 @@ msgstr ""
61
61
  "Format of match results. <matches> will be replaced with the formatted "
62
62
  "headwords, <database> with the formatted database name"
63
63
 
64
- #: data/rbot/plugins/dictclient.rb:95
64
+ #: data/rbot/plugins/dictclient.rb:99
65
65
  msgid ""
66
66
  "An error occured connecting to the DICT server. Check the dictclient.server "
67
67
  "configuration or retry later"
@@ -69,15 +69,15 @@ msgstr ""
69
69
  "An error occured connecting to the DICT server. Check the dictclient.server "
70
70
  "configuration or retry later"
71
71
 
72
- #: data/rbot/plugins/dictclient.rb:97
72
+ #: data/rbot/plugins/dictclient.rb:101
73
73
  msgid "A protocol error occured"
74
74
  msgstr "A protocol error occured"
75
75
 
76
- #: data/rbot/plugins/dictclient.rb:99
76
+ #: data/rbot/plugins/dictclient.rb:103
77
77
  msgid "An error occured"
78
78
  msgstr "An error occured"
79
79
 
80
- #: data/rbot/plugins/dictclient.rb:121
80
+ #: data/rbot/plugins/dictclient.rb:125
81
81
  msgid ""
82
82
  "Many definitions for %{phrase} were found in %{databases}. Use 'define "
83
83
  "<phrase> from <database> to view a definition."
@@ -85,39 +85,39 @@ msgstr ""
85
85
  "Many definitions for %{phrase} were found in %{databases}. Use 'define "
86
86
  "<phrase> from <database> to view a definition."
87
87
 
88
- #: data/rbot/plugins/dictclient.rb:138
88
+ #: data/rbot/plugins/dictclient.rb:142
89
89
  msgid "No definition for %{phrase} found from %{database}."
90
90
  msgstr "No definition for %{phrase} found from %{database}."
91
91
 
92
- #: data/rbot/plugins/dictclient.rb:159
92
+ #: data/rbot/plugins/dictclient.rb:163
93
93
  msgid "Nothing matched %{query} from %{database} using %{strategy}"
94
94
  msgstr "Nothing matched %{query} from %{database} using %{strategy}"
95
95
 
96
- #: data/rbot/plugins/dictclient.rb:169
96
+ #: data/rbot/plugins/dictclient.rb:173
97
97
  msgid "Databases: %{list}"
98
98
  msgstr "Databases: %{list}"
99
99
 
100
- #: data/rbot/plugins/dictclient.rb:177
100
+ #: data/rbot/plugins/dictclient.rb:181
101
101
  msgid "Strategies: %{list}"
102
102
  msgstr "Strategies: %{list}"
103
103
 
104
- #: data/rbot/plugins/dictclient.rb:186
104
+ #: data/rbot/plugins/dictclient.rb:190
105
105
  msgid "define <phrase> [from <database>] => Show definition of a phrase"
106
106
  msgstr ""
107
107
 
108
- #: data/rbot/plugins/dictclient.rb:188
108
+ #: data/rbot/plugins/dictclient.rb:192
109
109
  msgid ""
110
110
  "match <phrase> [using <strategy>] [from <database>] => Show phrases matching "
111
111
  "the given pattern"
112
112
  msgstr ""
113
113
 
114
- #: data/rbot/plugins/dictclient.rb:190
114
+ #: data/rbot/plugins/dictclient.rb:194
115
115
  msgid ""
116
116
  "dictclient databases => List databases; dictclient strategies => List "
117
117
  "strategies"
118
118
  msgstr ""
119
119
 
120
- #: data/rbot/plugins/dictclient.rb:192
120
+ #: data/rbot/plugins/dictclient.rb:196
121
121
  msgid ""
122
122
  "look up phrases on the configured DICT server. topics: define, match, server "
123
123
  "information"