diff --git a/matrixbot/commands.py b/matrixbot/commands.py index 4a56de7..859dfa9 100644 --- a/matrixbot/commands.py +++ b/matrixbot/commands.py @@ -1762,14 +1762,21 @@ async def cmd_wyr(client: AsyncClient, room_id: str, sender: str, args: str): # --------------------------------------------------------------------------- _RIDDLE_ACTIVE: dict[str, dict] = {} +_riddle_recent: list[str] = [] +_RIDDLE_RECENT_MAX = 30 async def _generate_riddle() -> dict | None: + avoid_clause = ( + " Do NOT use any of these riddles that were recently asked: " + + "; ".join(f'"{r}"' for r in _riddle_recent[-15:]) + + "." + ) if _riddle_recent else "" system_msg = ( "You are a riddle generator. Always respond with ONLY a JSON object — no markdown fences, no explanation. " 'Format: {"riddle": "the riddle text", "answer": "short answer"}' ) - user_msg = "Generate a clever riddle. The answer should be 1-4 words." + user_msg = f"Generate a clever, original riddle. The answer should be 1-4 words.{avoid_clause}" try: timeout = aiohttp.ClientTimeout(total=60) async with aiohttp.ClientSession(timeout=timeout) as session: @@ -1795,6 +1802,9 @@ async def _generate_riddle() -> dict | None: riddle = parsed.get("riddle", "").strip() answer = parsed.get("answer", "").strip() if riddle and answer: + _riddle_recent.append(riddle) + if len(_riddle_recent) > _RIDDLE_RECENT_MAX: + _riddle_recent.pop(0) return {"riddle": riddle, "answer": answer} except Exception as e: logger.error(f"riddle generation error: {e}", exc_info=True)