|
@@ -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(
|