X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fgames%2Fhangman.rb;h=0177a3481177f0699c315fe2e5aec47ab36c3d86;hb=fe217ba8960032cef8a61dafb59d1468360e8e5f;hp=af0d9d9cddb78e14e4da49b8a05077e55a0afa8e;hpb=e22cb6b8d589f523bfe6d99c5f44b18ad5091def;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/games/hangman.rb b/data/rbot/plugins/games/hangman.rb index af0d9d9c..0177a348 100644 --- a/data/rbot/plugins/games/hangman.rb +++ b/data/rbot/plugins/games/hangman.rb @@ -11,26 +11,22 @@ # # TODO:: some sort of turn-basedness, maybe -module RandomWord - SITE = "http://coyotecult.com/tools/randomwordgenerator.php" - - def self.get(count=1) - res = Net::HTTP.post_form(URI.parse(SITE), {'numwords' => count}) - words = res.body.scan(%r{(.*?)
} +module RandomWord + SITE = 'https://www.wordgenerator.net/random-word-generator.php' + BASE_URL = 'https://www.wordgenerator.net/application/p.php' - def self.define(phrase) - raw = Net::HTTP.get(URI.parse(URL+CGI.escape(phrase))) - res = raw.scan(REGEX).flatten.map { |e| e.strip } + # we could allow to specify by word types: (defaults to all) + TYPES = { + all: 'dictionary_words', + noun: 'nouns', + adj: 'adjectives', + verb: 'action_verbs' + } - res.empty? ? false : res.last + def self.get(bot, type) + bot.httputil.get("#{BASE_URL}?type=1&id=#{TYPES[type]}&spaceflag=false", cache: false).split(',') end end @@ -63,7 +59,7 @@ class Hangman end class Hangman - attr_reader :misses, :guesses, :word, :letters, :scores + attr_reader :misses, :guesses, :word, :scores STAGES = [' (x_x) ', ' (;_;) ', ' (>_<) ', ' (-_-) ', ' (o_~) ', ' (^_^) ', '\(^o^)/'] HEALTH = STAGES.size-1 @@ -241,16 +237,14 @@ class HangmanPlugin < Plugin def help(plugin, topic="") case topic - when "" - return "hangman game plugin - topics: play, stop" when "play" - return "hangman play on with word => use in private chat with the bot to start a game with custom word\n"+ - "hangman play random [with [max|min] length [<|>|== ]] => hangman with a random word from #{RandomWord::SITE}\n"+ - "hangman play with wordlist => hangman with random word from " + return [_("hangman play on with word => use in private chat with the bot to start a game with custom word\n"), + _("hangman play random [with [max|min] length [<|>|== ]] => hangman with a random word from %{site}\n"), + _("hangman play with wordlist => hangman with random word from ")].join % { :site => RandomWord::SITE } when "stop" - return "hangman stop => quits the current game" - when "define" - return "define => seeks a definition for the previous answer using google" + return _("hangman stop => quits the current game") + else + return _("hangman game plugin - topics: play, stop") end end @@ -261,12 +255,12 @@ class HangmanPlugin < Plugin begin wordlist = Wordlist.get(params[:wordlist].join("/"), :spaces => true) rescue - raise "no such wordlist" + raise _("no such wordlist") end wordlist[rand(wordlist.size)] else # getting a random word - words = RandomWord::get(100) + words = RandomWord::get(@bot, :all) if adj = params[:adj] words = words.sort_by { |e| e.size } @@ -282,7 +276,7 @@ class HangmanPlugin < Plugin unless words.empty? words.first else - m.reply "suitable word not found in the set" + m.reply _("suitable word not found in the set") nil end else @@ -303,11 +297,11 @@ class HangmanPlugin < Plugin target = if m.public? m.channel else - params[:channel] + @bot.server.channel(params[:channel]) end # is the bot on the channel? - unless @bot.server.channels.names.include?(target.to_s) + unless @bot.myself.channels.include?(target) m.reply _("i'm not on that channel") return end @@ -365,16 +359,17 @@ class HangmanPlugin < Plugin end if game.over? - str = if game.won? + sentence = if game.won? _("you nailed it!") elsif game.lost? _("you've killed the poor guy :(") end - str << _(" go #{Bold}again#{Bold}?") + again = _("go %{b}again%{b}?") % { :b => Bold } + scores = [] game.scores.each do |user, score| - str << " #{user.nick}: " + str = "#{user.nick}: " str << if score > 0 Irc.color(:green)+'+' elsif score < 0 @@ -383,13 +378,17 @@ class HangmanPlugin < Plugin str << score.round.to_s str << Irc.color + + scores << str end - m.reply str, :nick => true + m.reply _("%{sentence} %{again} %{scores}") % { + :sentence => sentence, :again => again, :scores => scores.join(' ') + }, :nick => true if rand(5).zero? - m.reply _("wondering what that means? try ´%{prefix}define´") % { - :prefix => @bot.config['core.address_prefix'] + m.reply _("wondering what that means? try ´%{prefix}oxford ´") % { + :prefix => @bot.config['core.address_prefix'].first } end @@ -441,18 +440,18 @@ class HangmanPlugin < Plugin else return unless m.public? - user = m.server.get_user(params[:nick]) - stats = @stats.player_stats(target)[user] + nick = params[:nick] + stats = @stats.player_stats(target)[nick] unless stats.played.zero? m.reply _("%{nick} has %{score} points after %{games} games") % { - :nick => user.nick, + :nick => nick, :score => stats.score.round, :games => stats.played } else m.reply _("%{nick} hasn't played hangman :(") % { - :nick => user.nick + :nick => nick } end end @@ -471,13 +470,6 @@ class HangmanPlugin < Plugin score(m, params) end end - - def define(m, params) - if game = @games.previous(m.replyto) - return unless res = Google.define(game.word) - m.reply "#{Bold}#{game.word}#{Bold} -- #{res}" - end - end end plugin = HangmanPlugin.new @@ -491,4 +483,3 @@ plugin.map "hangman stop", :action => 'stop' plugin.map "hangman score [:nick]", :action => 'score' plugin.map "hangman stats", :action => 'stats' -plugin.map "define", :action => 'define' \ No newline at end of file