]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/games/hangman.rb
experiment with travis-ci setup
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / games / hangman.rb
index c5d7656fe3f5f31a5555525246bcd8f5ba3e33d0..612b83501e68374053193782722e8c475d9b434e 100644 (file)
@@ -16,6 +16,7 @@ module RandomWord
 
   def self.get(count=1)
     res = Net::HTTP.post_form(URI.parse(SITE), {'numwords' => count})
+    raise _("random word generator site failed with #{res.code} - #{res.message}") unless Net::HTTPSuccess === res
     words = res.body.scan(%r{<a.*?\?w=(.*?)\n}).flatten
 
     count == 1 ? words.first : words
@@ -28,7 +29,7 @@ module Google
 
   def self.define(phrase)
     raw = Net::HTTP.get(URI.parse(URL+CGI.escape(phrase)))
-    res = raw.scan(REGEX).flatten.map { |e| e.strip }
+    res = raw.scan(REGEX).flatten.map { |e| e.ircify_html }
 
     res.empty? ? false : res.last
   end
@@ -63,7 +64,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 +242,16 @@ class HangmanPlugin < Plugin
 
   def help(plugin, topic="")
     case topic
-    when ""
-      return _("hangman game plugin - topics: play, stop")
     when "play"
       return [_("hangman play on <channel> with word <word> => use in private chat with the bot to start a game with custom word\n"),
               _("hangman play random [with [max|min] length [<|>|== <length>]] => hangman with a random word from %{site}\n"),
-              _("hangman play with wordlist <wordlist> => hangman with random word from <wordlist>")].join
+              _("hangman play with wordlist <wordlist> => hangman with random word from <wordlist>")].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 define => seeks a definition for the previous answer using google")
+    else
+      return _("hangman game plugin - topics: play, stop, define")
     end
   end
 
@@ -303,11 +304,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
@@ -389,12 +390,12 @@ class HangmanPlugin < Plugin
         end
 
         m.reply _("%{sentence} %{again} %{scores}") % {
-          :sentence => sentence, :again => again, :scores => 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}hangman define´") % {
+            :prefix => @bot.config['core.address_prefix'].first
           }
         end
 
@@ -479,8 +480,13 @@ class HangmanPlugin < Plugin
 
   def define(m, params)
     if game = @games.previous(m.replyto)
-      return unless res = Google.define(game.word)
-      m.reply "#{Bold}#{game.word}#{Bold} -- #{res}"
+      if res = Google.define(game.word)
+        m.reply "#{Bold}#{game.word}#{Bold} -- #{res}"
+      else
+        m.reply _("looks like google has no definition for %{word}") % { :word => game.word }
+      end
+    else
+      m.reply _("no hangman game was played here recently, what do you want me to define?")
     end
   end
 end
@@ -496,4 +502,4 @@ plugin.map "hangman stop", :action => 'stop'
 
 plugin.map "hangman score [:nick]", :action => 'score'
 plugin.map "hangman stats", :action => 'stats'
-plugin.map "define", :action => 'define'
+plugin.map "hangman define", :action => 'define'