Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -52,33 +52,7 @@ AUDIO_DIR = "audio_logs"
|
|
52 |
STATE_FILE = "user_state.txt"
|
53 |
CHAT_FILE = os.path.join(CHAT_DIR, "quest_log.md")
|
54 |
|
55 |
-
#
|
56 |
-
def init_session_state():
|
57 |
-
defaults = {
|
58 |
-
'server_running': False, 'server_task': None, 'active_connections': {},
|
59 |
-
'chat_history': [], 'audio_cache': {}, 'last_transcript': "",
|
60 |
-
'username': None, 'score': 0, 'treasures': 0, 'location': START_LOCATION,
|
61 |
-
'speech_processed': False, 'players': {}, 'last_update': time.time(),
|
62 |
-
'update_interval': 20, 'x_pos': 0, 'z_pos': 0, 'move_left': False,
|
63 |
-
'move_right': False, 'move_up': False, 'move_down': False
|
64 |
-
}
|
65 |
-
for k, v in defaults.items():
|
66 |
-
if k not in st.session_state:
|
67 |
-
st.session_state[k] = v
|
68 |
-
# Ensure username is initialized immediately
|
69 |
-
if st.session_state.username is None:
|
70 |
-
saved_username = load_username()
|
71 |
-
if saved_username and saved_username in CHARACTERS:
|
72 |
-
st.session_state.username = saved_username
|
73 |
-
else:
|
74 |
-
st.session_state.username = random.choice(list(CHARACTERS.keys()))
|
75 |
-
asyncio.run(save_chat_entry(st.session_state.username, "🗺️ Begins the Rocky Mountain Quest!", CHARACTERS[st.session_state.username]["voice"]))
|
76 |
-
save_username(st.session_state.username)
|
77 |
-
|
78 |
-
# Call init_session_state immediately to ensure username is set
|
79 |
-
init_session_state()
|
80 |
-
|
81 |
-
# Helpers
|
82 |
def format_timestamp(username=""):
|
83 |
now = datetime.now().strftime("%Y%m%d_%H%M%S")
|
84 |
return f"{now}-by-{username}"
|
@@ -113,6 +87,32 @@ def load_username():
|
|
113 |
return f.read().strip()
|
114 |
return None
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
# Audio Processing
|
117 |
async def async_edge_tts_generate(text, voice, username):
|
118 |
cache_key = f"{text[:100]}_{voice}"
|
@@ -239,7 +239,7 @@ def start_websocket_server():
|
|
239 |
asyncio.set_event_loop(loop)
|
240 |
loop.run_until_complete(run_websocket_server())
|
241 |
|
242 |
-
# Game HTML with Map
|
243 |
html_code = f"""
|
244 |
<!DOCTYPE html>
|
245 |
<html lang="en">
|
|
|
52 |
STATE_FILE = "user_state.txt"
|
53 |
CHAT_FILE = os.path.join(CHAT_DIR, "quest_log.md")
|
54 |
|
55 |
+
# Helpers (Moved Above init_session_state to Define load_username First)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
def format_timestamp(username=""):
|
57 |
now = datetime.now().strftime("%Y%m%d_%H%M%S")
|
58 |
return f"{now}-by-{username}"
|
|
|
87 |
return f.read().strip()
|
88 |
return None
|
89 |
|
90 |
+
# Session State Init (Now Can Safely Use load_username)
|
91 |
+
def init_session_state():
|
92 |
+
defaults = {
|
93 |
+
'server_running': False, 'server_task': None, 'active_connections': {},
|
94 |
+
'chat_history': [], 'audio_cache': {}, 'last_transcript': "",
|
95 |
+
'username': None, 'score': 0, 'treasures': 0, 'location': START_LOCATION,
|
96 |
+
'speech_processed': False, 'players': {}, 'last_update': time.time(),
|
97 |
+
'update_interval': 20, 'x_pos': 0, 'z_pos': 0, 'move_left': False,
|
98 |
+
'move_right': False, 'move_up': False, 'move_down': False
|
99 |
+
}
|
100 |
+
for k, v in defaults.items():
|
101 |
+
if k not in st.session_state:
|
102 |
+
st.session_state[k] = v
|
103 |
+
# Ensure username is initialized immediately
|
104 |
+
if st.session_state.username is None:
|
105 |
+
saved_username = load_username()
|
106 |
+
if saved_username and saved_username in CHARACTERS:
|
107 |
+
st.session_state.username = saved_username
|
108 |
+
else:
|
109 |
+
st.session_state.username = random.choice(list(CHARACTERS.keys()))
|
110 |
+
asyncio.run(save_chat_entry(st.session_state.username, "🗺️ Begins the Rocky Mountain Quest!", CHARACTERS[st.session_state.username]["voice"]))
|
111 |
+
save_username(st.session_state.username)
|
112 |
+
|
113 |
+
# Call init_session_state immediately to ensure username is set
|
114 |
+
init_session_state()
|
115 |
+
|
116 |
# Audio Processing
|
117 |
async def async_edge_tts_generate(text, voice, username):
|
118 |
cache_key = f"{text[:100]}_{voice}"
|
|
|
239 |
asyncio.set_event_loop(loop)
|
240 |
loop.run_until_complete(run_websocket_server())
|
241 |
|
242 |
+
# Game HTML with Map
|
243 |
html_code = f"""
|
244 |
<!DOCTYPE html>
|
245 |
<html lang="en">
|