Browse Source

Merge branch 'feature/hangguy' of kirkleon/rollbot3 into master

kirkleon 6 years ago
parent
commit
5be25e9770
1 changed files with 18 additions and 7 deletions
  1. 18 7
      src/plugins/hangguy.py

+ 18 - 7
src/plugins/hangguy.py

@@ -1,9 +1,10 @@
 import datetime
 import re
+import base64
 
 from sqlalchemy import Column, Integer, String, DateTime
 
-from command_system import as_plugin, RollbotResponse, RollbotFailure, ModelBase
+from command_system import as_plugin, RollbotResponse, RollbotFailure, ModelBase, pop_arg
 
 
 GUY_STAGES = [
@@ -198,8 +199,11 @@ def get_guy(db, group_id):
     return guy_state
 
 
-def init_game(game_state):
-    new_phrase = "TEST PHRASE" # TODO this needs to actually pull from something (and sanitize it) eventually
+def init_game(game_state, phrase):
+    if phrase is None:
+        new_phrase = "TEST PHRASE" # TODO this needs to actually pull from something (and sanitize it) eventually
+    else:
+        new_phrase = base64.b64decode(phrase).decode("utf-8").strip().upper()
 
     game_state.state = re.sub("[A-Z]", "_", new_phrase)
     game_state.target = new_phrase
@@ -256,6 +260,8 @@ def survival_msg(guy_state):
 def render_guy(guy_state):
     if 0 <= guy_state.state < len(GUY_STAGES):
         return GUY_STAGES[guy_state.state]
+    elif guy_state.state >= len(GUY_STAGES):
+        return GUY_STAGES[-1]
     return "INVALID GUY STATE " + str(guy_state.state)
 
 
@@ -294,9 +300,12 @@ def handle_in_game(db, msg, game_state, guy_state):
                 prefix += f"Great! '{guess}' appears {res} time{'' if res == 1 else 's'}!"
         else:
             prefix += "You should try sticking to letters!"
+    elif game_state.target.split() == guess.split():
+        prefix = "You've guessed the full phrase!"
+        game_state.state = game_state.target
     else:
-        prefix = "Full phrase guessing not yet supported!"
-        # TODO guess and handle the result
+        prefix = f"{guess} is not the phrase!"
+        guy_state.state = guy_state.state + 2
 
     txt = prefix + "\n" + render_game(game_state, guy_state)
 
@@ -342,7 +351,9 @@ def hangguy(db, msg):
             )
         )
 
-    subc = msg.raw_args[1:].strip().lower()
+    subc, rest = pop_arg(msg.raw_args[1:])
+
+    subc = subc.lower()
 
     if subc == "view":
         txt = f"The current guy has {survival_msg(guy_state)}\n"
@@ -351,7 +362,7 @@ def hangguy(db, msg):
     elif subc == "retire":
         return RollbotResponse(msg, txt=subc_retire(db, guy_state))
     elif subc == "start":
-        init_game(game_state)
+        init_game(game_state, rest)
         return RollbotResponse(msg, txt=render_game(game_state, guy_state))
     else:
         return RollbotResponse(