Fix !wordle silence in public rooms — notify user to check DMs

When !wordle is used in a public room (e.g. Commands), the bot now
sends "📬 Check your DMs to play Wordle!" before redirecting the game
to a DM. Previously the user saw no response at all.

Also refactors handle_wordle to resolve the DM room once and reuse it
across all subcommands, eliminating repeated _get_dm_room calls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 10:39:11 -05:00
parent 7bfc4d9e4b
commit 889569c087

View File

@@ -749,27 +749,29 @@ async def handle_wordle(
subcmd = parts[0].lower() if parts else "" subcmd = parts[0].lower() if parts else ""
sub_args = parts[1] if len(parts) > 1 else "" sub_args = parts[1] if len(parts) > 1 else ""
# Share always goes to the public room
if subcmd == "share":
await wordle_share(client, room_id, sender)
return
# All other commands route through DM
dm_room, origin = await _get_dm_room(client, room_id, sender)
# Notify the public room if we're redirecting to a DM
if dm_room != room_id:
await send_text(client, room_id, "\U0001f4ec Check your DMs to play Wordle!")
if subcmd == "help": if subcmd == "help":
# Help can go to the same room
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_help(client, dm_room) await wordle_help(client, dm_room)
elif subcmd == "stats": elif subcmd == "stats":
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_stats(client, dm_room, sender) await wordle_stats(client, dm_room, sender)
elif subcmd == "hard": elif subcmd == "hard":
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_toggle_hard(client, dm_room, sender) await wordle_toggle_hard(client, dm_room, sender)
elif subcmd == "share":
# Share goes to the PUBLIC room (origin), not DM
await wordle_share(client, room_id, sender)
elif subcmd == "give" and sub_args.lower().startswith("up"): elif subcmd == "give" and sub_args.lower().startswith("up"):
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_give_up(client, dm_room, sender) await wordle_give_up(client, dm_room, sender)
elif subcmd == "": elif subcmd == "":
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_start_or_status(client, dm_room, sender, origin) await wordle_start_or_status(client, dm_room, sender, origin)
elif len(subcmd) == 5 and subcmd.isalpha(): elif len(subcmd) == 5 and subcmd.isalpha():
dm_room, origin = await _get_dm_room(client, room_id, sender)
await wordle_guess(client, dm_room, sender, subcmd.upper()) await wordle_guess(client, dm_room, sender, subcmd.upper())
else: else:
await send_text( await send_text(