rbot 0.9.10 → 0.9.12
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +22 -4
- data/COPYING +5 -18
- data/ChangeLog +396 -0
- data/README +23 -25
- data/REQUIREMENTS +58 -12
- data/Rakefile +215 -0
- data/bin/rbot +47 -25
- data/bin/rbot-remote +76 -0
- data/data/rbot/languages/french.lang +5 -5
- data/data/rbot/languages/german.lang +4 -4
- data/data/rbot/languages/italian.lang +53 -0
- data/data/rbot/languages/japanese.lang +43 -0
- data/data/rbot/languages/russian.lang +60 -60
- data/data/rbot/languages/traditional_chinese.lang +75 -0
- data/data/rbot/plugins/alias.rb +192 -0
- data/data/rbot/plugins/autoop.rb +74 -37
- data/data/rbot/plugins/autorejoin.rb +15 -5
- data/data/rbot/plugins/bans.rb +454 -150
- data/data/rbot/plugins/bash.rb +173 -31
- data/data/rbot/plugins/botsnack.rb +37 -0
- data/data/rbot/plugins/cal.rb +11 -2
- data/data/rbot/plugins/chanserv.rb +132 -0
- data/data/rbot/plugins/chucknorris.rb +2 -2
- data/data/rbot/plugins/chucknorris.yml.gz +0 -0
- data/data/rbot/plugins/debugger.rb +136 -0
- data/data/rbot/plugins/deepthoughts.rb +89 -95
- data/data/rbot/plugins/delicious.rb +109 -0
- data/data/rbot/plugins/dice.rb +77 -25
- data/data/rbot/plugins/dict.rb +243 -0
- data/data/rbot/plugins/dictclient.rb +211 -0
- data/data/rbot/plugins/digg.rb +2 -2
- data/data/rbot/plugins/excuse.rb +4 -4
- data/data/rbot/plugins/factoids.rb +506 -0
- data/data/rbot/plugins/figlet.rb +127 -18
- data/data/rbot/plugins/fish.rb +93 -33
- data/data/rbot/plugins/forecast.rb +40 -27
- data/data/rbot/plugins/fortune.rb +86 -11
- data/data/rbot/plugins/freshmeat.rb +46 -12
- data/data/rbot/plugins/games/azgame.rb +565 -0
- data/data/rbot/plugins/games/quiz.rb +961 -0
- data/data/rbot/plugins/games/roshambo.rb +62 -0
- data/data/rbot/plugins/{roulette.rb → games/roulette.rb} +58 -8
- data/data/rbot/plugins/games/shiritori.rb +485 -0
- data/data/rbot/plugins/games/uno.rb +1205 -0
- data/data/rbot/plugins/games/wheelfortune.rb +615 -0
- data/data/rbot/plugins/grouphug.rb +76 -22
- data/data/rbot/plugins/hl2.rb +97 -0
- data/data/rbot/plugins/host.rb +10 -1
- data/data/rbot/plugins/httpd.rb.disabled +1 -0
- data/data/rbot/plugins/imdb.rb +511 -47
- data/data/rbot/plugins/insult.rb +32 -37
- data/data/rbot/plugins/iplookup.rb +224 -224
- data/data/rbot/plugins/karma.rb +45 -21
- data/data/rbot/plugins/keywords.rb +258 -160
- data/data/rbot/plugins/lart.rb +126 -95
- data/data/rbot/plugins/lastfm.rb +421 -12
- data/data/rbot/plugins/linkbot.rb +75 -0
- data/data/rbot/plugins/markov.rb +103 -46
- data/data/rbot/plugins/math.rb +6 -5
- data/data/rbot/plugins/modes.rb +114 -0
- data/data/rbot/plugins/nickrecover.rb +97 -0
- data/data/rbot/plugins/nickserv.rb +111 -48
- data/data/rbot/plugins/nslookup.rb +15 -19
- data/data/rbot/plugins/plugin.header +11 -0
- data/data/rbot/plugins/quakeauth.rb +74 -11
- data/data/rbot/plugins/quotes.rb +189 -233
- data/data/rbot/plugins/reaction.rb +415 -0
- data/data/rbot/plugins/remind.rb +11 -15
- data/data/rbot/plugins/remotectl.rb +29 -0
- data/data/rbot/plugins/ri.rb +74 -0
- data/data/rbot/plugins/rot13.rb +16 -1
- data/data/rbot/plugins/rss.rb +1219 -585
- data/data/rbot/plugins/salut.rb +226 -0
- data/data/rbot/plugins/script.rb +184 -0
- data/data/rbot/plugins/search.rb +233 -0
- data/data/rbot/plugins/seen.rb +44 -40
- data/data/rbot/plugins/shortenurls.rb +93 -0
- data/data/rbot/plugins/slashdot.rb +49 -11
- data/data/rbot/plugins/spell.rb +37 -27
- data/data/rbot/plugins/theyfightcrime.rb +36 -39
- data/data/rbot/plugins/threat.rb +25 -22
- data/data/rbot/plugins/time.rb +135 -0
- data/data/rbot/plugins/topic.rb +107 -50
- data/data/rbot/plugins/translator.rb +360 -0
- data/data/rbot/plugins/tube.rb +28 -40
- data/data/rbot/plugins/twitter.rb +187 -0
- data/data/rbot/plugins/urban.rb +62 -53
- data/data/rbot/plugins/url.rb +193 -409
- data/data/rbot/plugins/usermodes.rb +26 -0
- data/data/rbot/plugins/wall.rb +60 -0
- data/data/rbot/plugins/weather.rb +254 -598
- data/data/rbot/plugins/wow.rb +41 -37
- data/data/rbot/plugins/wserver.rb +17 -25
- data/data/rbot/plugins/youtube.rb +237 -0
- data/data/rbot/templates/lart/{larts → larts-english} +0 -0
- data/data/rbot/templates/lart/larts-italian +25 -0
- data/data/rbot/templates/lart/larts-japanese +10 -0
- data/data/rbot/templates/lart/{praises → praises-english} +0 -0
- data/data/rbot/templates/lart/praises-italian +4 -0
- data/data/rbot/templates/lart/praises-japanese +3 -0
- data/data/rbot/templates/quiz/win_messages +11 -0
- data/data/rbot/templates/salut/salut-english +40 -0
- data/data/rbot/templates/salut/salut-french +29 -0
- data/data/rbot/templates/salut/salut-italian +51 -0
- data/data/rbot/templates/salut/salut-japanese +31 -0
- data/lib/rbot/botuser.rb +940 -0
- data/lib/rbot/config-compat.rb +23 -0
- data/lib/rbot/config.rb +211 -276
- data/lib/rbot/core/auth.rb +1063 -0
- data/lib/rbot/core/basics.rb +214 -0
- data/lib/rbot/core/config.rb +330 -0
- data/lib/rbot/core/filters_ui.rb +64 -0
- data/lib/rbot/core/irclog.rb +292 -0
- data/lib/rbot/core/remote.rb +401 -0
- data/lib/rbot/core/unicode.rb +91 -0
- data/lib/rbot/core/userdata.rb +200 -0
- data/lib/rbot/core/utils/extends.rb +444 -0
- data/lib/rbot/core/utils/filters.rb +154 -0
- data/lib/rbot/core/utils/httputil.rb +689 -0
- data/lib/rbot/core/utils/utils.rb +717 -0
- data/lib/rbot/dbhash.rb +30 -9
- data/lib/rbot/irc.rb +1966 -0
- data/lib/rbot/ircbot.rb +816 -675
- data/lib/rbot/ircsocket.rb +246 -232
- data/lib/rbot/language.rb +86 -8
- data/lib/rbot/load-gettext.rb +154 -0
- data/lib/rbot/maskdb.rb +162 -0
- data/lib/rbot/message.rb +392 -65
- data/lib/rbot/messagemapper.rb +438 -94
- data/lib/rbot/pkgconfig.rb +6 -0
- data/lib/rbot/plugins.rb +713 -172
- data/lib/rbot/post-config.rb +1 -0
- data/lib/rbot/rbotconfig.rb +31 -12
- data/lib/rbot/registry.rb +79 -48
- data/lib/rbot/rfc2812.rb +927 -519
- data/lib/rbot/timer.rb +232 -167
- data/po/en_US/rbot-alias.po +82 -0
- data/po/en_US/rbot-autoop.po +0 -0
- data/po/en_US/rbot-autorejoin.po +0 -0
- data/po/en_US/rbot-azgame.po +200 -0
- data/po/en_US/rbot-bans.po +0 -0
- data/po/en_US/rbot-bash.po +0 -0
- data/po/en_US/rbot-botsnack.po +0 -0
- data/po/en_US/rbot-cal.po +3 -0
- data/po/en_US/rbot-chanserv.po +0 -0
- data/po/en_US/rbot-chucknorris.po +0 -0
- data/po/en_US/rbot-debugger.po +0 -0
- data/po/en_US/rbot-deepthoughts.po +0 -0
- data/po/en_US/rbot-delicious.po +0 -0
- data/po/en_US/rbot-dice.po +0 -0
- data/po/en_US/rbot-dict.po +0 -0
- data/po/en_US/rbot-dictclient.po +124 -0
- data/po/en_US/rbot-digg.po +0 -0
- data/po/en_US/rbot-eightball.po +0 -0
- data/po/en_US/rbot-excuse.po +0 -0
- data/po/en_US/rbot-factoids.po +107 -0
- data/po/en_US/rbot-figlet.po +36 -0
- data/po/en_US/rbot-fish.po +0 -0
- data/po/en_US/rbot-forecast.po +0 -0
- data/po/en_US/rbot-fortune.po +0 -0
- data/po/en_US/rbot-freshmeat.po +0 -0
- data/po/en_US/rbot-grouphug.po +18 -0
- data/po/en_US/rbot-hl2.po +0 -0
- data/po/en_US/rbot-host.po +3 -0
- data/po/en_US/rbot-imdb.po +0 -0
- data/po/en_US/rbot-insult.po +0 -0
- data/po/en_US/rbot-iplookup.po +0 -0
- data/po/en_US/rbot-karma.po +0 -0
- data/po/en_US/rbot-keywords.po +24 -0
- data/po/en_US/rbot-lart.po +0 -0
- data/po/en_US/rbot-lastfm.po +172 -0
- data/po/en_US/rbot-linkbot.po +0 -0
- data/po/en_US/rbot-markov.po +20 -0
- data/po/en_US/rbot-math.po +0 -0
- data/po/en_US/rbot-modes.po +0 -0
- data/po/en_US/rbot-nickrecover.po +40 -0
- data/po/en_US/rbot-nickserv.po +104 -0
- data/po/en_US/rbot-nslookup.po +0 -0
- data/po/en_US/rbot-quakeauth.po +0 -0
- data/po/en_US/rbot-quiz.po +0 -0
- data/po/en_US/rbot-quotes.po +108 -0
- data/po/en_US/rbot-reaction.po +0 -0
- data/po/en_US/rbot-remind.po +0 -0
- data/po/en_US/rbot-remotectl.po +0 -0
- data/po/en_US/rbot-ri.po +0 -0
- data/po/en_US/rbot-roshambo.po +0 -0
- data/po/en_US/rbot-rot13.po +0 -0
- data/po/en_US/rbot-roulette.po +0 -0
- data/po/en_US/rbot-rss.po +20 -0
- data/po/en_US/rbot-salut.po +0 -0
- data/po/en_US/rbot-script.po +0 -0
- data/po/en_US/rbot-search.po +0 -0
- data/po/en_US/rbot-seen.po +0 -0
- data/po/en_US/rbot-shiritori.po +113 -0
- data/po/en_US/rbot-shortenurls.po +0 -0
- data/po/en_US/rbot-slashdot.po +0 -0
- data/po/en_US/rbot-spell.po +54 -0
- data/po/en_US/rbot-theyfightcrime.po +0 -0
- data/po/en_US/rbot-threat.po +0 -0
- data/po/en_US/rbot-time.po +0 -0
- data/po/en_US/rbot-topic.po +0 -0
- data/po/en_US/rbot-translator.po +77 -0
- data/po/en_US/rbot-tube.po +0 -0
- data/po/en_US/rbot-twitter.po +24 -0
- data/po/en_US/rbot-uno.po +512 -0
- data/po/en_US/rbot-urban.po +0 -0
- data/po/en_US/rbot-url.po +0 -0
- data/po/en_US/rbot-usermodes.po +0 -0
- data/po/en_US/rbot-wall.po +33 -0
- data/po/en_US/rbot-weather.po +0 -0
- data/po/en_US/rbot-wheelfortune.po +205 -0
- data/po/en_US/rbot-wow.po +0 -0
- data/po/en_US/rbot-wserver.po +0 -0
- data/po/en_US/rbot-youtube.po +58 -0
- data/po/en_US/rbot.po +1097 -0
- data/po/fr/rbot-alias.po +97 -0
- data/po/fr/rbot-autoop.po +0 -0
- data/po/fr/rbot-autorejoin.po +0 -0
- data/po/fr/rbot-azgame.po +204 -0
- data/po/fr/rbot-bans.po +0 -0
- data/po/fr/rbot-bash.po +0 -0
- data/po/fr/rbot-botsnack.po +0 -0
- data/po/fr/rbot-cal.po +3 -0
- data/po/fr/rbot-chanserv.po +0 -0
- data/po/fr/rbot-chucknorris.po +0 -0
- data/po/fr/rbot-debugger.po +0 -0
- data/po/fr/rbot-deepthoughts.po +0 -0
- data/po/fr/rbot-delicious.po +0 -0
- data/po/fr/rbot-dice.po +0 -0
- data/po/fr/rbot-dict.po +0 -0
- data/po/fr/rbot-dictclient.po +134 -0
- data/po/fr/rbot-digg.po +0 -0
- data/po/fr/rbot-eightball.po +0 -0
- data/po/fr/rbot-excuse.po +0 -0
- data/po/fr/rbot-factoids.po +111 -0
- data/po/fr/rbot-figlet.po +37 -0
- data/po/fr/rbot-fish.po +0 -0
- data/po/fr/rbot-forecast.po +0 -0
- data/po/fr/rbot-fortune.po +0 -0
- data/po/fr/rbot-freshmeat.po +0 -0
- data/po/fr/rbot-grouphug.po +18 -0
- data/po/fr/rbot-hl2.po +0 -0
- data/po/fr/rbot-host.po +3 -0
- data/po/fr/rbot-imdb.po +0 -0
- data/po/fr/rbot-insult.po +0 -0
- data/po/fr/rbot-iplookup.po +0 -0
- data/po/fr/rbot-karma.po +0 -0
- data/po/fr/rbot-keywords.po +24 -0
- data/po/fr/rbot-lart.po +0 -0
- data/po/fr/rbot-lastfm.po +172 -0
- data/po/fr/rbot-linkbot.po +0 -0
- data/po/fr/rbot-markov.po +20 -0
- data/po/fr/rbot-math.po +0 -0
- data/po/fr/rbot-modes.po +0 -0
- data/po/fr/rbot-nickrecover.po +36 -0
- data/po/fr/rbot-nickserv.po +116 -0
- data/po/fr/rbot-nslookup.po +0 -0
- data/po/fr/rbot-quakeauth.po +0 -0
- data/po/fr/rbot-quiz.po +0 -0
- data/po/fr/rbot-quotes.po +138 -0
- data/po/fr/rbot-reaction.po +0 -0
- data/po/fr/rbot-remind.po +0 -0
- data/po/fr/rbot-remotectl.po +0 -0
- data/po/fr/rbot-ri.po +0 -0
- data/po/fr/rbot-roshambo.po +0 -0
- data/po/fr/rbot-rot13.po +0 -0
- data/po/fr/rbot-roulette.po +0 -0
- data/po/fr/rbot-rss.po +20 -0
- data/po/fr/rbot-salut.po +0 -0
- data/po/fr/rbot-script.po +0 -0
- data/po/fr/rbot-search.po +0 -0
- data/po/fr/rbot-seen.po +0 -0
- data/po/fr/rbot-shiritori.po +119 -0
- data/po/fr/rbot-shortenurls.po +0 -0
- data/po/fr/rbot-slashdot.po +0 -0
- data/po/fr/rbot-spell.po +56 -0
- data/po/fr/rbot-theyfightcrime.po +0 -0
- data/po/fr/rbot-threat.po +0 -0
- data/po/fr/rbot-time.po +0 -0
- data/po/fr/rbot-topic.po +0 -0
- data/po/fr/rbot-translator.po +90 -0
- data/po/fr/rbot-tube.po +0 -0
- data/po/fr/rbot-twitter.po +24 -0
- data/po/fr/rbot-uno.po +521 -0
- data/po/fr/rbot-urban.po +0 -0
- data/po/fr/rbot-url.po +0 -0
- data/po/fr/rbot-usermodes.po +0 -0
- data/po/fr/rbot-wall.po +33 -0
- data/po/fr/rbot-weather.po +0 -0
- data/po/fr/rbot-wheelfortune.po +255 -0
- data/po/fr/rbot-wow.po +0 -0
- data/po/fr/rbot-wserver.po +0 -0
- data/po/fr/rbot-youtube.po +64 -0
- data/po/fr/rbot.po +1133 -0
- data/po/it/rbot-alias.po +82 -0
- data/po/it/rbot-autoop.po +0 -0
- data/po/it/rbot-autorejoin.po +0 -0
- data/po/it/rbot-azgame.po +186 -0
- data/po/it/rbot-bans.po +0 -0
- data/po/it/rbot-bash.po +0 -0
- data/po/it/rbot-botsnack.po +0 -0
- data/po/it/rbot-cal.po +3 -0
- data/po/it/rbot-chanserv.po +0 -0
- data/po/it/rbot-chucknorris.po +0 -0
- data/po/it/rbot-debugger.po +0 -0
- data/po/it/rbot-deepthoughts.po +0 -0
- data/po/it/rbot-delicious.po +0 -0
- data/po/it/rbot-dice.po +0 -0
- data/po/it/rbot-dict.po +0 -0
- data/po/it/rbot-dictclient.po +111 -0
- data/po/it/rbot-digg.po +0 -0
- data/po/it/rbot-eightball.po +0 -0
- data/po/it/rbot-excuse.po +0 -0
- data/po/it/rbot-factoids.po +110 -0
- data/po/it/rbot-figlet.po +36 -0
- data/po/it/rbot-fish.po +0 -0
- data/po/it/rbot-forecast.po +0 -0
- data/po/it/rbot-fortune.po +0 -0
- data/po/it/rbot-freshmeat.po +0 -0
- data/po/it/rbot-grouphug.po +18 -0
- data/po/it/rbot-hl2.po +0 -0
- data/po/it/rbot-host.po +3 -0
- data/po/it/rbot-imdb.po +0 -0
- data/po/it/rbot-insult.po +0 -0
- data/po/it/rbot-iplookup.po +0 -0
- data/po/it/rbot-karma.po +0 -0
- data/po/it/rbot-keywords.po +24 -0
- data/po/it/rbot-lart.po +0 -0
- data/po/it/rbot-lastfm.po +172 -0
- data/po/it/rbot-linkbot.po +0 -0
- data/po/it/rbot-markov.po +20 -0
- data/po/it/rbot-math.po +0 -0
- data/po/it/rbot-modes.po +0 -0
- data/po/it/rbot-nickrecover.po +36 -0
- data/po/it/rbot-nickserv.po +104 -0
- data/po/it/rbot-nslookup.po +0 -0
- data/po/it/rbot-quakeauth.po +0 -0
- data/po/it/rbot-quiz.po +0 -0
- data/po/it/rbot-quotes.po +108 -0
- data/po/it/rbot-reaction.po +0 -0
- data/po/it/rbot-remind.po +0 -0
- data/po/it/rbot-remotectl.po +0 -0
- data/po/it/rbot-ri.po +0 -0
- data/po/it/rbot-roshambo.po +0 -0
- data/po/it/rbot-rot13.po +0 -0
- data/po/it/rbot-roulette.po +0 -0
- data/po/it/rbot-rss.po +20 -0
- data/po/it/rbot-salut.po +0 -0
- data/po/it/rbot-script.po +0 -0
- data/po/it/rbot-search.po +0 -0
- data/po/it/rbot-seen.po +0 -0
- data/po/it/rbot-shiritori.po +102 -0
- data/po/it/rbot-shortenurls.po +0 -0
- data/po/it/rbot-slashdot.po +0 -0
- data/po/it/rbot-spell.po +54 -0
- data/po/it/rbot-theyfightcrime.po +0 -0
- data/po/it/rbot-threat.po +0 -0
- data/po/it/rbot-time.po +0 -0
- data/po/it/rbot-topic.po +0 -0
- data/po/it/rbot-translator.po +77 -0
- data/po/it/rbot-tube.po +0 -0
- data/po/it/rbot-twitter.po +24 -0
- data/po/it/rbot-uno.po +564 -0
- data/po/it/rbot-urban.po +0 -0
- data/po/it/rbot-url.po +0 -0
- data/po/it/rbot-usermodes.po +0 -0
- data/po/it/rbot-wall.po +33 -0
- data/po/it/rbot-weather.po +0 -0
- data/po/it/rbot-wheelfortune.po +251 -0
- data/po/it/rbot-wow.po +0 -0
- data/po/it/rbot-wserver.po +0 -0
- data/po/it/rbot-youtube.po +64 -0
- data/po/it/rbot.po +1127 -0
- data/po/ja/rbot-alias.po +82 -0
- data/po/ja/rbot-autoop.po +0 -0
- data/po/ja/rbot-autorejoin.po +0 -0
- data/po/ja/rbot-azgame.po +194 -0
- data/po/ja/rbot-bans.po +0 -0
- data/po/ja/rbot-bash.po +0 -0
- data/po/ja/rbot-botsnack.po +0 -0
- data/po/ja/rbot-cal.po +3 -0
- data/po/ja/rbot-chanserv.po +0 -0
- data/po/ja/rbot-chucknorris.po +0 -0
- data/po/ja/rbot-debugger.po +0 -0
- data/po/ja/rbot-deepthoughts.po +0 -0
- data/po/ja/rbot-delicious.po +0 -0
- data/po/ja/rbot-dice.po +0 -0
- data/po/ja/rbot-dict.po +0 -0
- data/po/ja/rbot-dictclient.po +111 -0
- data/po/ja/rbot-digg.po +0 -0
- data/po/ja/rbot-eightball.po +0 -0
- data/po/ja/rbot-excuse.po +0 -0
- data/po/ja/rbot-factoids.po +107 -0
- data/po/ja/rbot-figlet.po +36 -0
- data/po/ja/rbot-fish.po +0 -0
- data/po/ja/rbot-forecast.po +0 -0
- data/po/ja/rbot-fortune.po +0 -0
- data/po/ja/rbot-freshmeat.po +0 -0
- data/po/ja/rbot-grouphug.po +18 -0
- data/po/ja/rbot-hl2.po +0 -0
- data/po/ja/rbot-host.po +3 -0
- data/po/ja/rbot-imdb.po +0 -0
- data/po/ja/rbot-insult.po +0 -0
- data/po/ja/rbot-iplookup.po +0 -0
- data/po/ja/rbot-karma.po +0 -0
- data/po/ja/rbot-keywords.po +24 -0
- data/po/ja/rbot-lart.po +0 -0
- data/po/ja/rbot-lastfm.po +172 -0
- data/po/ja/rbot-linkbot.po +0 -0
- data/po/ja/rbot-markov.po +20 -0
- data/po/ja/rbot-math.po +0 -0
- data/po/ja/rbot-modes.po +0 -0
- data/po/ja/rbot-nickrecover.po +36 -0
- data/po/ja/rbot-nickserv.po +104 -0
- data/po/ja/rbot-nslookup.po +0 -0
- data/po/ja/rbot-quakeauth.po +0 -0
- data/po/ja/rbot-quiz.po +0 -0
- data/po/ja/rbot-quotes.po +108 -0
- data/po/ja/rbot-reaction.po +0 -0
- data/po/ja/rbot-remind.po +0 -0
- data/po/ja/rbot-remotectl.po +0 -0
- data/po/ja/rbot-ri.po +0 -0
- data/po/ja/rbot-roshambo.po +0 -0
- data/po/ja/rbot-rot13.po +0 -0
- data/po/ja/rbot-roulette.po +0 -0
- data/po/ja/rbot-rss.po +20 -0
- data/po/ja/rbot-salut.po +0 -0
- data/po/ja/rbot-script.po +0 -0
- data/po/ja/rbot-search.po +0 -0
- data/po/ja/rbot-seen.po +0 -0
- data/po/ja/rbot-shiritori.po +115 -0
- data/po/ja/rbot-shortenurls.po +0 -0
- data/po/ja/rbot-slashdot.po +0 -0
- data/po/ja/rbot-spell.po +54 -0
- data/po/ja/rbot-theyfightcrime.po +0 -0
- data/po/ja/rbot-threat.po +0 -0
- data/po/ja/rbot-time.po +0 -0
- data/po/ja/rbot-topic.po +0 -0
- data/po/ja/rbot-translator.po +77 -0
- data/po/ja/rbot-tube.po +0 -0
- data/po/ja/rbot-twitter.po +24 -0
- data/po/ja/rbot-uno.po +512 -0
- data/po/ja/rbot-urban.po +0 -0
- data/po/ja/rbot-url.po +0 -0
- data/po/ja/rbot-usermodes.po +0 -0
- data/po/ja/rbot-wall.po +33 -0
- data/po/ja/rbot-weather.po +0 -0
- data/po/ja/rbot-wheelfortune.po +205 -0
- data/po/ja/rbot-wow.po +0 -0
- data/po/ja/rbot-wserver.po +0 -0
- data/po/ja/rbot-youtube.po +58 -0
- data/po/ja/rbot.po +999 -0
- data/po/rbot-alias.pot +83 -0
- data/po/rbot-autoop.pot +0 -0
- data/po/rbot-autorejoin.pot +0 -0
- data/po/rbot-azgame.pot +187 -0
- data/po/rbot-bans.pot +0 -0
- data/po/rbot-bash.pot +0 -0
- data/po/rbot-botsnack.pot +0 -0
- data/po/rbot-cal.pot +21 -0
- data/po/rbot-chanserv.pot +0 -0
- data/po/rbot-chucknorris.pot +0 -0
- data/po/rbot-debugger.pot +0 -0
- data/po/rbot-deepthoughts.pot +0 -0
- data/po/rbot-delicious.pot +0 -0
- data/po/rbot-dice.pot +0 -0
- data/po/rbot-dict.pot +0 -0
- data/po/rbot-dictclient.pot +112 -0
- data/po/rbot-digg.pot +0 -0
- data/po/rbot-eightball.pot +0 -0
- data/po/rbot-excuse.pot +0 -0
- data/po/rbot-factoids.pot +108 -0
- data/po/rbot-figlet.pot +37 -0
- data/po/rbot-fish.pot +0 -0
- data/po/rbot-forecast.pot +0 -0
- data/po/rbot-fortune.pot +0 -0
- data/po/rbot-freshmeat.pot +0 -0
- data/po/rbot-grouphug.pot +36 -0
- data/po/rbot-hl2.pot +0 -0
- data/po/rbot-host.pot +21 -0
- data/po/rbot-imdb.pot +0 -0
- data/po/rbot-insult.pot +0 -0
- data/po/rbot-iplookup.pot +0 -0
- data/po/rbot-karma.pot +0 -0
- data/po/rbot-keywords.pot +25 -0
- data/po/rbot-lart.pot +0 -0
- data/po/rbot-lastfm.pot +190 -0
- data/po/rbot-linkbot.pot +0 -0
- data/po/rbot-markov.pot +21 -0
- data/po/rbot-math.pot +0 -0
- data/po/rbot-modes.pot +0 -0
- data/po/rbot-nickrecover.pot +37 -0
- data/po/rbot-nickserv.pot +105 -0
- data/po/rbot-nslookup.pot +0 -0
- data/po/rbot-quakeauth.pot +0 -0
- data/po/rbot-quiz.pot +0 -0
- data/po/rbot-quotes.pot +109 -0
- data/po/rbot-reaction.pot +0 -0
- data/po/rbot-remind.pot +0 -0
- data/po/rbot-remotectl.pot +0 -0
- data/po/rbot-ri.pot +0 -0
- data/po/rbot-roshambo.pot +0 -0
- data/po/rbot-rot13.pot +0 -0
- data/po/rbot-roulette.pot +0 -0
- data/po/rbot-rss.pot +21 -0
- data/po/rbot-salut.pot +0 -0
- data/po/rbot-script.pot +0 -0
- data/po/rbot-search.pot +0 -0
- data/po/rbot-seen.pot +0 -0
- data/po/rbot-shiritori.pot +103 -0
- data/po/rbot-shortenurls.pot +0 -0
- data/po/rbot-slashdot.pot +0 -0
- data/po/rbot-spell.pot +55 -0
- data/po/rbot-theyfightcrime.pot +0 -0
- data/po/rbot-threat.pot +0 -0
- data/po/rbot-time.pot +0 -0
- data/po/rbot-topic.pot +0 -0
- data/po/rbot-translator.pot +78 -0
- data/po/rbot-tube.pot +0 -0
- data/po/rbot-twitter.pot +25 -0
- data/po/rbot-uno.pot +513 -0
- data/po/rbot-urban.pot +0 -0
- data/po/rbot-url.pot +0 -0
- data/po/rbot-usermodes.pot +0 -0
- data/po/rbot-wall.pot +33 -0
- data/po/rbot-weather.pot +0 -0
- data/po/rbot-wheelfortune.pot +206 -0
- data/po/rbot-wow.pot +0 -0
- data/po/rbot-wserver.pot +0 -0
- data/po/rbot-youtube.pot +59 -0
- data/po/rbot.pot +1004 -0
- data/po/zh_CN/rbot-alias.po +82 -0
- data/po/zh_CN/rbot-autoop.po +0 -0
- data/po/zh_CN/rbot-autorejoin.po +0 -0
- data/po/zh_CN/rbot-azgame.po +186 -0
- data/po/zh_CN/rbot-bans.po +0 -0
- data/po/zh_CN/rbot-bash.po +0 -0
- data/po/zh_CN/rbot-botsnack.po +0 -0
- data/po/zh_CN/rbot-cal.po +3 -0
- data/po/zh_CN/rbot-chanserv.po +0 -0
- data/po/zh_CN/rbot-chucknorris.po +0 -0
- data/po/zh_CN/rbot-debugger.po +0 -0
- data/po/zh_CN/rbot-deepthoughts.po +0 -0
- data/po/zh_CN/rbot-delicious.po +0 -0
- data/po/zh_CN/rbot-dice.po +0 -0
- data/po/zh_CN/rbot-dict.po +0 -0
- data/po/zh_CN/rbot-dictclient.po +111 -0
- data/po/zh_CN/rbot-digg.po +0 -0
- data/po/zh_CN/rbot-eightball.po +0 -0
- data/po/zh_CN/rbot-excuse.po +0 -0
- data/po/zh_CN/rbot-factoids.po +107 -0
- data/po/zh_CN/rbot-figlet.po +36 -0
- data/po/zh_CN/rbot-fish.po +0 -0
- data/po/zh_CN/rbot-forecast.po +0 -0
- data/po/zh_CN/rbot-fortune.po +0 -0
- data/po/zh_CN/rbot-freshmeat.po +0 -0
- data/po/zh_CN/rbot-grouphug.po +18 -0
- data/po/zh_CN/rbot-hl2.po +0 -0
- data/po/zh_CN/rbot-host.po +3 -0
- data/po/zh_CN/rbot-imdb.po +0 -0
- data/po/zh_CN/rbot-insult.po +0 -0
- data/po/zh_CN/rbot-iplookup.po +0 -0
- data/po/zh_CN/rbot-karma.po +0 -0
- data/po/zh_CN/rbot-keywords.po +24 -0
- data/po/zh_CN/rbot-lart.po +0 -0
- data/po/zh_CN/rbot-lastfm.po +172 -0
- data/po/zh_CN/rbot-linkbot.po +0 -0
- data/po/zh_CN/rbot-markov.po +20 -0
- data/po/zh_CN/rbot-math.po +0 -0
- data/po/zh_CN/rbot-modes.po +0 -0
- data/po/zh_CN/rbot-nickrecover.po +36 -0
- data/po/zh_CN/rbot-nickserv.po +104 -0
- data/po/zh_CN/rbot-nslookup.po +0 -0
- data/po/zh_CN/rbot-quakeauth.po +0 -0
- data/po/zh_CN/rbot-quiz.po +0 -0
- data/po/zh_CN/rbot-quotes.po +108 -0
- data/po/zh_CN/rbot-reaction.po +0 -0
- data/po/zh_CN/rbot-remind.po +0 -0
- data/po/zh_CN/rbot-remotectl.po +0 -0
- data/po/zh_CN/rbot-ri.po +0 -0
- data/po/zh_CN/rbot-roshambo.po +0 -0
- data/po/zh_CN/rbot-rot13.po +0 -0
- data/po/zh_CN/rbot-roulette.po +0 -0
- data/po/zh_CN/rbot-rss.po +20 -0
- data/po/zh_CN/rbot-salut.po +0 -0
- data/po/zh_CN/rbot-script.po +0 -0
- data/po/zh_CN/rbot-search.po +0 -0
- data/po/zh_CN/rbot-seen.po +0 -0
- data/po/zh_CN/rbot-shiritori.po +102 -0
- data/po/zh_CN/rbot-shortenurls.po +0 -0
- data/po/zh_CN/rbot-slashdot.po +0 -0
- data/po/zh_CN/rbot-spell.po +54 -0
- data/po/zh_CN/rbot-theyfightcrime.po +0 -0
- data/po/zh_CN/rbot-threat.po +0 -0
- data/po/zh_CN/rbot-time.po +0 -0
- data/po/zh_CN/rbot-topic.po +0 -0
- data/po/zh_CN/rbot-translator.po +77 -0
- data/po/zh_CN/rbot-tube.po +0 -0
- data/po/zh_CN/rbot-twitter.po +24 -0
- data/po/zh_CN/rbot-uno.po +512 -0
- data/po/zh_CN/rbot-urban.po +0 -0
- data/po/zh_CN/rbot-url.po +0 -0
- data/po/zh_CN/rbot-usermodes.po +0 -0
- data/po/zh_CN/rbot-wall.po +33 -0
- data/po/zh_CN/rbot-weather.po +0 -0
- data/po/zh_CN/rbot-wheelfortune.po +205 -0
- data/po/zh_CN/rbot-wow.po +0 -0
- data/po/zh_CN/rbot-wserver.po +0 -0
- data/po/zh_CN/rbot-youtube.po +58 -0
- data/po/zh_CN/rbot.po +1006 -0
- data/po/zh_TW/rbot-alias.po +82 -0
- data/po/zh_TW/rbot-autoop.po +0 -0
- data/po/zh_TW/rbot-autorejoin.po +0 -0
- data/po/zh_TW/rbot-azgame.po +186 -0
- data/po/zh_TW/rbot-bans.po +0 -0
- data/po/zh_TW/rbot-bash.po +0 -0
- data/po/zh_TW/rbot-botsnack.po +0 -0
- data/po/zh_TW/rbot-cal.po +3 -0
- data/po/zh_TW/rbot-chanserv.po +0 -0
- data/po/zh_TW/rbot-chucknorris.po +0 -0
- data/po/zh_TW/rbot-debugger.po +0 -0
- data/po/zh_TW/rbot-deepthoughts.po +0 -0
- data/po/zh_TW/rbot-delicious.po +0 -0
- data/po/zh_TW/rbot-dice.po +0 -0
- data/po/zh_TW/rbot-dict.po +0 -0
- data/po/zh_TW/rbot-dictclient.po +111 -0
- data/po/zh_TW/rbot-digg.po +0 -0
- data/po/zh_TW/rbot-eightball.po +0 -0
- data/po/zh_TW/rbot-excuse.po +0 -0
- data/po/zh_TW/rbot-factoids.po +107 -0
- data/po/zh_TW/rbot-figlet.po +36 -0
- data/po/zh_TW/rbot-fish.po +0 -0
- data/po/zh_TW/rbot-forecast.po +0 -0
- data/po/zh_TW/rbot-fortune.po +0 -0
- data/po/zh_TW/rbot-freshmeat.po +0 -0
- data/po/zh_TW/rbot-grouphug.po +18 -0
- data/po/zh_TW/rbot-hl2.po +0 -0
- data/po/zh_TW/rbot-host.po +3 -0
- data/po/zh_TW/rbot-imdb.po +0 -0
- data/po/zh_TW/rbot-insult.po +0 -0
- data/po/zh_TW/rbot-iplookup.po +0 -0
- data/po/zh_TW/rbot-karma.po +0 -0
- data/po/zh_TW/rbot-keywords.po +24 -0
- data/po/zh_TW/rbot-lart.po +0 -0
- data/po/zh_TW/rbot-lastfm.po +172 -0
- data/po/zh_TW/rbot-linkbot.po +0 -0
- data/po/zh_TW/rbot-markov.po +20 -0
- data/po/zh_TW/rbot-math.po +0 -0
- data/po/zh_TW/rbot-modes.po +0 -0
- data/po/zh_TW/rbot-nickrecover.po +36 -0
- data/po/zh_TW/rbot-nickserv.po +104 -0
- data/po/zh_TW/rbot-nslookup.po +0 -0
- data/po/zh_TW/rbot-quakeauth.po +0 -0
- data/po/zh_TW/rbot-quiz.po +0 -0
- data/po/zh_TW/rbot-quotes.po +108 -0
- data/po/zh_TW/rbot-reaction.po +0 -0
- data/po/zh_TW/rbot-remind.po +0 -0
- data/po/zh_TW/rbot-remotectl.po +0 -0
- data/po/zh_TW/rbot-ri.po +0 -0
- data/po/zh_TW/rbot-roshambo.po +0 -0
- data/po/zh_TW/rbot-rot13.po +0 -0
- data/po/zh_TW/rbot-roulette.po +0 -0
- data/po/zh_TW/rbot-rss.po +20 -0
- data/po/zh_TW/rbot-salut.po +0 -0
- data/po/zh_TW/rbot-script.po +0 -0
- data/po/zh_TW/rbot-search.po +0 -0
- data/po/zh_TW/rbot-seen.po +0 -0
- data/po/zh_TW/rbot-shiritori.po +102 -0
- data/po/zh_TW/rbot-shortenurls.po +0 -0
- data/po/zh_TW/rbot-slashdot.po +0 -0
- data/po/zh_TW/rbot-spell.po +54 -0
- data/po/zh_TW/rbot-theyfightcrime.po +0 -0
- data/po/zh_TW/rbot-threat.po +0 -0
- data/po/zh_TW/rbot-time.po +0 -0
- data/po/zh_TW/rbot-topic.po +0 -0
- data/po/zh_TW/rbot-translator.po +77 -0
- data/po/zh_TW/rbot-tube.po +0 -0
- data/po/zh_TW/rbot-twitter.po +24 -0
- data/po/zh_TW/rbot-uno.po +512 -0
- data/po/zh_TW/rbot-urban.po +0 -0
- data/po/zh_TW/rbot-url.po +0 -0
- data/po/zh_TW/rbot-usermodes.po +0 -0
- data/po/zh_TW/rbot-wall.po +33 -0
- data/po/zh_TW/rbot-weather.po +0 -0
- data/po/zh_TW/rbot-wheelfortune.po +205 -0
- data/po/zh_TW/rbot-wow.po +0 -0
- data/po/zh_TW/rbot-wserver.po +0 -0
- data/po/zh_TW/rbot-youtube.po +58 -0
- data/po/zh_TW/rbot.po +1034 -0
- data/setup.rb +800 -574
- metadata +723 -108
- data/data/rbot/contrib/plugins/figlet.rb +0 -20
- data/data/rbot/contrib/plugins/ri.rb +0 -83
- data/data/rbot/plugins/demauro.rb +0 -95
- data/data/rbot/plugins/google.rb +0 -53
- data/data/rbot/plugins/opme.rb +0 -19
- data/data/rbot/plugins/roshambo.rb +0 -54
- data/data/rbot/plugins/rubyurl.rb +0 -39
- data/data/rbot/plugins/tinyurl.rb +0 -39
- data/data/rbot/plugins/xmlrpc.rb.disabled +0 -52
- data/data/rbot/templates/levels.rbot +0 -32
- data/data/rbot/templates/users.rbot +0 -1
- data/lib/rbot/auth.rb +0 -314
- data/lib/rbot/channel.rb +0 -54
- data/lib/rbot/httputil.rb +0 -309
- data/lib/rbot/utils.rb +0 -83
data/data/rbot/plugins/figlet.rb
CHANGED
@@ -1,24 +1,133 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
#-- vim:sw=2:et
|
2
|
+
#++
|
3
|
+
#
|
4
|
+
# :title: Figlet plugin
|
4
5
|
|
5
6
|
class FigletPlugin < Plugin
|
7
|
+
MAX_WIDTH=68
|
8
|
+
|
9
|
+
Config.register Config::StringValue.new('figlet.path',
|
10
|
+
:default => 'figlet',
|
11
|
+
:desc => _('Path to the figlet program'),
|
12
|
+
:on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_figlet })
|
13
|
+
|
14
|
+
Config.register Config::StringValue.new('figlet.font',
|
15
|
+
:default => 'smslant',
|
16
|
+
:desc => _('figlet font to use'),
|
17
|
+
:validate => Proc.new { |v| v !~ /\s|`/ },
|
18
|
+
:on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_figlet })
|
19
|
+
|
20
|
+
Config.register Config::StringValue.new('toilet.path',
|
21
|
+
:default => 'toilet',
|
22
|
+
:desc => _('Path to the toilet program'),
|
23
|
+
:on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet })
|
24
|
+
|
25
|
+
Config.register Config::StringValue.new('toilet.font',
|
26
|
+
:default => 'smslant',
|
27
|
+
:desc => _('toilet font to use'),
|
28
|
+
:validate => Proc.new { |v| v !~ /\s|`/ },
|
29
|
+
:on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet })
|
30
|
+
|
31
|
+
Config.register Config::ArrayValue.new('toilet.filters',
|
32
|
+
:default => [],
|
33
|
+
:desc => _('toilet filters to use (e.g. gay, metal)'),
|
34
|
+
:validate => Proc.new { |v| v !~ /\s|`/ },
|
35
|
+
:on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet })
|
36
|
+
|
37
|
+
def figlet_path
|
38
|
+
@bot.config['figlet.path']
|
39
|
+
end
|
40
|
+
|
41
|
+
def toilet_path
|
42
|
+
@bot.config['toilet.path']
|
43
|
+
end
|
44
|
+
|
45
|
+
def figlet_font
|
46
|
+
@bot.config['figlet.font']
|
47
|
+
end
|
48
|
+
|
49
|
+
def toilet_font
|
50
|
+
@bot.config['toilet.font']
|
51
|
+
end
|
52
|
+
|
53
|
+
def toilet_filters
|
54
|
+
@bot.config['toilet.filters']
|
55
|
+
end
|
56
|
+
|
57
|
+
attr_reader :has, :params
|
58
|
+
|
59
|
+
def test_figlet
|
60
|
+
#check that figlet is present
|
61
|
+
@has[:figlet] = !!(Utils.safe_exec("#{figlet_path} -v") ; $?)
|
62
|
+
|
63
|
+
# check that figlet actually has the font installed
|
64
|
+
@has[:figlet_font] = !!(Utils.safe_exec("#{figlet_path} -f #{figlet_font} test test test") ; $?)
|
65
|
+
|
66
|
+
# set the commandline params
|
67
|
+
@params[:figlet] = ['-k', '-w', MAX_WIDTH.to_s, '-C', 'utf8']
|
68
|
+
|
69
|
+
# add the font from DEFAULT_FONTS to the cmdline (if figlet has that font)
|
70
|
+
@params[:figlet] += ['-f', figlet_font] if @has[:figlet_font]
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_toilet
|
74
|
+
#check that toilet is present
|
75
|
+
@has[:toilet] = !!(Utils.safe_exec("#{toilet_path} -v") ; $?)
|
76
|
+
|
77
|
+
# check that toilet actually has the font installed
|
78
|
+
@has[:toilet_font] = !!(Utils.safe_exec("#{toilet_path} -f #{toilet_font} test test test") ; $?)
|
79
|
+
|
80
|
+
# set the commandline params
|
81
|
+
@params[:toilet] = ['-k', '-w', MAX_WIDTH.to_s, '-E', 'utf8', '--irc']
|
82
|
+
|
83
|
+
# add the font from DEFAULT_FONTS to the cmdline (if toilet has that font)
|
84
|
+
@params[:toilet] += ['-f', toilet_font] if @has[:toilet_font]
|
85
|
+
|
86
|
+
# add the filters, if any
|
87
|
+
toilet_filters.each { |f| @params[:toilet] += ['-F', f.dup] }
|
88
|
+
end
|
89
|
+
|
90
|
+
def initialize
|
91
|
+
super
|
92
|
+
|
93
|
+
@has = {}
|
94
|
+
@params = {}
|
95
|
+
|
96
|
+
# test for figlet and font presence
|
97
|
+
test_figlet
|
98
|
+
# ditto for toilet
|
99
|
+
test_toilet
|
100
|
+
end
|
101
|
+
|
6
102
|
def help(plugin, topic="")
|
7
|
-
"figlet
|
8
|
-
end
|
9
|
-
def privmsg(m)
|
10
|
-
case m.params
|
11
|
-
when nil
|
12
|
-
m.reply "incorrect usage: " + help(m.plugin)
|
13
|
-
return
|
14
|
-
when (/^-/)
|
15
|
-
m.reply "incorrect usage: " + help(m.plugin)
|
16
|
-
return
|
17
|
-
else
|
18
|
-
m.reply Utils.safe_exec("/usr/bin/figlet", "-k", "-w", "#{MAX_WIDTH}", "-f", DEFAULT_FONT, m.params)
|
19
|
-
return
|
20
|
-
end
|
103
|
+
"figlet|toilet <message> => print using figlet or toilet"
|
21
104
|
end
|
105
|
+
|
106
|
+
def figlet(m, params)
|
107
|
+
key = params[:plugin] || m.plugin.intern
|
108
|
+
unless @has[key]
|
109
|
+
m.reply("%{cmd} couldn't be found. if it's installed, you should set the %{cmd}.path config key to its path" % {
|
110
|
+
:cmd => key
|
111
|
+
})
|
112
|
+
return
|
113
|
+
end
|
114
|
+
|
115
|
+
message = params[:message].to_s
|
116
|
+
if message =~ /^-/
|
117
|
+
m.reply "the message can't start with a - sign"
|
118
|
+
return
|
119
|
+
end
|
120
|
+
|
121
|
+
# collect the parameters to pass to safe_exec
|
122
|
+
exec_params = [send(:"#{key}_path")] + @params[key] + [message]
|
123
|
+
|
124
|
+
# run the program
|
125
|
+
m.reply Utils.safe_exec(*exec_params), :max_lines => 0
|
126
|
+
end
|
127
|
+
alias :toilet :figlet
|
128
|
+
|
22
129
|
end
|
130
|
+
|
23
131
|
plugin = FigletPlugin.new
|
24
|
-
plugin.
|
132
|
+
plugin.map "figlet *message"
|
133
|
+
plugin.map "toilet *message"
|
data/data/rbot/plugins/fish.rb
CHANGED
@@ -1,26 +1,50 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'uri/common'
|
3
|
-
Net::HTTP.version_1_2
|
4
|
-
|
5
1
|
class BabelPlugin < Plugin
|
2
|
+
LANGS = %w{en fr de it pt es nl ru zh zt el ja ko}
|
3
|
+
BASEURL = 'http://babelfish.yahoo.com'
|
4
|
+
|
5
|
+
Config.register Config::EnumValue.new('translate.default_from',
|
6
|
+
:values => LANGS, :default => 'en',
|
7
|
+
:desc => "Default language to translate from")
|
8
|
+
Config.register Config::EnumValue.new('translate.default_to',
|
9
|
+
:values => LANGS, :default => 'en',
|
10
|
+
:desc => "Default language to translate to")
|
11
|
+
|
6
12
|
def help(plugin, topic="")
|
7
|
-
|
13
|
+
case topic
|
14
|
+
when 'cache'
|
15
|
+
"translate cache [view|clear] => view or clear the translate cache contents"
|
16
|
+
else
|
17
|
+
from = @bot.config['translate.default_from']
|
18
|
+
to = @bot.config['translate.default_to']
|
19
|
+
"translate to <lang> <string> => translate from #{from} to <lang>, translate from <lang> <string> => translate to #{to} from <lang>, translate <fromlang> <tolang> <string> => translate from <fromlang> to <tolang>. If <string> is an http url, translates the referenced webpage and returns the 1st content paragraph. Languages: #{LANGS.join(', ')}. Other topics: cache"
|
20
|
+
end
|
8
21
|
end
|
22
|
+
|
9
23
|
def translate(m, params)
|
10
|
-
langs =
|
11
|
-
trans_from = params[:fromlang] ? params[:fromlang] : '
|
12
|
-
trans_to = params[:tolang] ? params[:tolang] : '
|
24
|
+
langs = LANGS
|
25
|
+
trans_from = params[:fromlang] ? params[:fromlang] : @bot.config['translate.default_from']
|
26
|
+
trans_to = params[:tolang] ? params[:tolang] : @bot.config['translate.default_to']
|
13
27
|
trans_text = params[:phrase].to_s
|
14
28
|
|
15
|
-
query = "/babelfish/tr"
|
16
29
|
lang_match = langs.join("|")
|
17
30
|
unless(trans_from =~ /^(#{lang_match})$/ && trans_to =~ /^(#{lang_match})$/)
|
18
31
|
m.reply "invalid language: valid languagess are: #{langs.join(' ')}"
|
19
32
|
return
|
20
33
|
end
|
21
34
|
|
22
|
-
data_text =
|
35
|
+
data_text = CGI.escape trans_text
|
23
36
|
trans_pair = "#{trans_from}_#{trans_to}"
|
37
|
+
|
38
|
+
if (trans_text =~ /^http:\/\//) && (URI.parse(trans_text) rescue nil)
|
39
|
+
m.reply 'webpage translation is not currently supported'
|
40
|
+
return
|
41
|
+
# TODO FIXME
|
42
|
+
# url = BASEURL+'/translate_url' +
|
43
|
+
# "?lp=#{trans_pair}&trurl=#{data_text}"
|
44
|
+
#
|
45
|
+
# return Utils.get_first_pars([url], 1, :message => m)
|
46
|
+
end
|
47
|
+
|
24
48
|
data = "lp=#{trans_pair}&doit=done&intl=1&tt=urltext&urltext=#{data_text}"
|
25
49
|
|
26
50
|
# check cache for previous lookups
|
@@ -29,33 +53,69 @@ class BabelPlugin < Plugin
|
|
29
53
|
return
|
30
54
|
end
|
31
55
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
56
|
+
headers = {
|
57
|
+
"content-type" => "application/x-www-form-urlencoded; charset=utf-8"
|
58
|
+
}
|
59
|
+
|
60
|
+
query = "/translate_txt"
|
61
|
+
|
62
|
+
begin
|
63
|
+
body = @bot.httputil.get(BASEURL+query,
|
64
|
+
:method => :post,
|
65
|
+
:body => data,
|
66
|
+
:headers => headers)
|
67
|
+
rescue Exception => e
|
68
|
+
m.reply "http error: #{e.message}"
|
69
|
+
return
|
70
|
+
end
|
71
|
+
|
72
|
+
case body
|
73
|
+
when nil
|
74
|
+
m.reply "couldn't talk to babelfish :("
|
75
|
+
when /^\s*<div id="result"><div style="[^"]*">(.*?)<\/div><\/div>\s*$/
|
76
|
+
answer = $1
|
77
|
+
# cache the answer
|
78
|
+
if(answer.length > 0)
|
79
|
+
@registry["#{trans_pair}/#{data_text}"] = answer
|
48
80
|
end
|
81
|
+
m.reply answer
|
82
|
+
return
|
83
|
+
when /^\s+<option value="#{trans_pair}"\s+SELECTED>/
|
84
|
+
m.reply "couldn't parse babelfish response html :("
|
85
|
+
else
|
86
|
+
m.reply "babelfish doesn't support translation from #{trans_from} to #{trans_to}"
|
49
87
|
end
|
50
|
-
m.reply "couldn't parse babelfish response html :("
|
51
|
-
else
|
52
|
-
m.reply "couldn't talk to babelfish :("
|
53
88
|
end
|
54
|
-
|
89
|
+
|
90
|
+
def cache_mgmt(m, params)
|
91
|
+
cmd = params[:cmd].intern
|
92
|
+
case cmd
|
93
|
+
when :view
|
94
|
+
cache = []
|
95
|
+
@registry.each { |key, val|
|
96
|
+
cache << "%s => %s" % [key, val]
|
97
|
+
}
|
98
|
+
m.reply "translate cache: #{cache.inspect}"
|
99
|
+
when :clear
|
100
|
+
keys = []
|
101
|
+
@registry.each { |key, val|
|
102
|
+
keys << key
|
103
|
+
}
|
104
|
+
keys.each { |key|
|
105
|
+
@registry.delete(key)
|
106
|
+
}
|
107
|
+
cache_mgmt(m, :cmd => 'view')
|
108
|
+
end
|
55
109
|
end
|
110
|
+
|
56
111
|
end
|
112
|
+
|
57
113
|
plugin = BabelPlugin.new
|
58
|
-
|
59
|
-
plugin.
|
60
|
-
|
114
|
+
|
115
|
+
plugin.default_auth('cache', false)
|
116
|
+
|
117
|
+
plugin.map 'translate to :tolang *phrase', :thread => true
|
118
|
+
plugin.map 'translate from :fromlang *phrase', :thread => true
|
119
|
+
plugin.map 'translate cache :cmd', :action => :cache_mgmt, :auth_path => 'cache!', :requirements => { :cmd => /view|clear/ }
|
120
|
+
plugin.map 'translate :fromlang :tolang *phrase', :thread => true
|
61
121
|
|
@@ -1,10 +1,14 @@
|
|
1
|
+
#-- vim:sw=2:et
|
2
|
+
#++
|
1
3
|
#
|
2
|
-
# Forecast plugin for rbot
|
3
|
-
# by MrChucho (mrchucho@mrchucho.net)
|
4
|
-
# Copyright (C) 2006 Ralph M. Churchill
|
4
|
+
# :title: Forecast plugin for rbot
|
5
5
|
#
|
6
|
+
# Author:: MrChucho (mrchucho@mrchucho.net)
|
7
|
+
# Copyright:: (C) 2006 Ralph M. Churchill
|
8
|
+
|
6
9
|
require 'soap/wsdlDriver'
|
7
|
-
|
10
|
+
# TODO why not use HttpUtil instead of open-uri?
|
11
|
+
require 'open-uri'
|
8
12
|
require 'rexml/document'
|
9
13
|
require 'erb'
|
10
14
|
|
@@ -84,6 +88,7 @@ class ForecastPlugin < Plugin
|
|
84
88
|
end
|
85
89
|
end
|
86
90
|
@forecast_cache = Hash.new
|
91
|
+
@cache_mutex = Mutex.new
|
87
92
|
end
|
88
93
|
|
89
94
|
def forecast(m,params)
|
@@ -102,32 +107,40 @@ class ForecastPlugin < Plugin
|
|
102
107
|
end
|
103
108
|
|
104
109
|
def get_forecast(m,loc)
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
else
|
111
|
-
begin
|
112
|
-
l = LatLong.new
|
113
|
-
f = Forecast.new(*l.get_lat_long(loc))
|
114
|
-
forecast,forecast_date = f.forecast
|
115
|
-
rescue => err
|
116
|
-
m.reply err
|
117
|
-
end
|
118
|
-
end
|
110
|
+
begin
|
111
|
+
@cache_mutex.synchronize do
|
112
|
+
if @forecast_cache.has_key?(loc) and
|
113
|
+
Time.new - @forecast_cache[loc][:date] < 3600
|
114
|
+
forecast = @forecast_cache[loc][:forecast]
|
119
115
|
if forecast
|
120
|
-
|
121
|
-
|
122
|
-
@forecast_cache[loc][:forecast] = forecast
|
123
|
-
@forecast_cache[loc][:date] = forecast_date
|
124
|
-
else
|
125
|
-
m.reply "Couldn't find forecast for #{loc}"
|
116
|
+
m.reply forecast
|
117
|
+
return
|
126
118
|
end
|
127
|
-
|
128
|
-
|
119
|
+
end
|
120
|
+
end
|
121
|
+
begin
|
122
|
+
l = LatLong.new
|
123
|
+
f = Forecast.new(*l.get_lat_long(loc))
|
124
|
+
forecast,forecast_date = f.forecast
|
125
|
+
rescue => err
|
126
|
+
m.reply err
|
127
|
+
end
|
128
|
+
if forecast
|
129
|
+
m.reply forecast
|
130
|
+
@cache_mutex.synchronize do
|
131
|
+
@forecast_cache[loc] = {
|
132
|
+
:forecast => forecast,
|
133
|
+
:date => forecast_date
|
134
|
+
}
|
135
|
+
end
|
136
|
+
else
|
137
|
+
m.reply "Couldn't find forecast for #{loc}"
|
129
138
|
end
|
139
|
+
rescue => e
|
140
|
+
m.reply "ERROR: #{e}"
|
141
|
+
end
|
130
142
|
end
|
131
143
|
end
|
132
144
|
plugin = ForecastPlugin.new
|
133
|
-
plugin.map 'forecast *location',
|
145
|
+
plugin.map 'forecast *location',
|
146
|
+
:defaults => {:location => false}, :thread => true
|
@@ -1,22 +1,97 @@
|
|
1
|
+
#-- vim:sw=2:et
|
2
|
+
#++
|
3
|
+
#
|
4
|
+
# :title: Fortune plugin
|
5
|
+
|
1
6
|
class FortunePlugin < Plugin
|
7
|
+
Config.register Config::StringValue.new('fortune.path',
|
8
|
+
:default => '',
|
9
|
+
:desc => "Full path to the fortune executable")
|
10
|
+
|
2
11
|
def help(plugin, topic="")
|
3
|
-
"fortune [<
|
12
|
+
"fortune [<category>] => get a (short) fortune, optionally specifying fortune category || fortune categories => show categories"
|
4
13
|
end
|
5
|
-
|
6
|
-
|
7
|
-
fortune =
|
8
|
-
|
14
|
+
|
15
|
+
def find_fortune
|
16
|
+
fortune = @bot.config['fortune.path']
|
17
|
+
return fortune if fortune
|
18
|
+
|
19
|
+
["/usr/bin/fortune",
|
20
|
+
"/usr/share/bin/fortune",
|
21
|
+
"/usr/games/fortune",
|
22
|
+
"/usr/local/games/fortune",
|
23
|
+
"/usr/local/bin/fortune"].each do |f|
|
9
24
|
if FileTest.executable? f
|
10
25
|
fortune = f
|
11
26
|
break
|
12
27
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
28
|
+
end
|
29
|
+
|
30
|
+
return nil unless fortune
|
31
|
+
|
32
|
+
# Try setting the config entry
|
33
|
+
config_par = {:key => 'fortune.path', :value => [fortune], :silent => true }
|
34
|
+
debug "Setting fortune.path to #{fortune}"
|
35
|
+
set_path = @bot.plugins['config'].handle_set(m, config_par)
|
36
|
+
if set_path
|
37
|
+
debug "fortune.path set to #{@bot.config['fortune.path']}"
|
38
|
+
else
|
39
|
+
debug "couldn't set fortune.path"
|
40
|
+
end
|
41
|
+
|
42
|
+
return fortune
|
43
|
+
end
|
44
|
+
|
45
|
+
## Pick a fortune
|
46
|
+
def fortune(m, params)
|
47
|
+
db = params[:db]
|
48
|
+
fortune = find_fortune
|
49
|
+
m.reply "fortune executable not found (try setting the 'fortune.path' variable)" unless fortune
|
50
|
+
|
51
|
+
begin
|
52
|
+
ret = Utils.safe_exec(fortune, "-n", "350", "-s", db)
|
53
|
+
|
54
|
+
## cleanup ret
|
55
|
+
ret = ret.split(/\n+/).map do |l|
|
56
|
+
# check if this is a " -- Some Dood" line
|
57
|
+
if l =~ /^\s+-{1,3}\s+\w/
|
58
|
+
# turn "-" into "--"
|
59
|
+
l.gsub!(/^\s+-\s/, '-- ')
|
60
|
+
# extra space
|
61
|
+
" " + l.strip
|
62
|
+
else
|
63
|
+
# just remove leading and trailing whitespace
|
64
|
+
l.strip
|
65
|
+
end
|
66
|
+
end.join(" ")
|
67
|
+
|
68
|
+
rescue
|
69
|
+
ret = "failed to execute fortune"
|
70
|
+
# TODO reset fortune.path when execution fails
|
71
|
+
end
|
72
|
+
|
73
|
+
m.reply ret
|
74
|
+
end
|
75
|
+
|
76
|
+
# Print the fortune categories
|
77
|
+
def categories(m, params)
|
78
|
+
fortune = find_fortune
|
79
|
+
m.reply "fortune executable not found (try setting the 'fortune.path' variable)" unless fortune
|
80
|
+
|
81
|
+
## list all fortune databases
|
82
|
+
categories = Utils.safe_exec(fortune, "-f").split(/\n+ */).map{ |f|
|
83
|
+
f.split[1]
|
84
|
+
}.select{ |f|
|
85
|
+
f[0..0] != '/'
|
86
|
+
}.sort
|
87
|
+
|
88
|
+
## say 'em!
|
89
|
+
m.reply "Fortune categories: #{categories.join ', '}"
|
18
90
|
end
|
91
|
+
|
19
92
|
end
|
20
93
|
plugin = FortunePlugin.new
|
21
|
-
plugin.map 'fortune
|
94
|
+
plugin.map 'fortune categories', :action => "categories"
|
95
|
+
plugin.map 'fortune list', :action => "categories"
|
96
|
+
plugin.map 'fortune :db', :defaults => {:db => ''},
|
22
97
|
:requirements => {:db => /^[^-][\w-]+$/}
|