""" Evennia command for talking to Timmy in-game. Usage in-game: say Hello Timmy ask Timmy about the Tower tell Timmy I need help Timmy responds with isolated context per user. """ from evennia import Command class CmdTalkTimmy(Command): """ Talk to Timmy in the room. Usage: say (if Timmy is in the room) ask Timmy tell Timmy """ key = "ask" aliases = ["tell"] locks = "cmd:all()" def func(self): caller = self.caller message = self.args.strip() if not message: caller.msg("Ask Timmy what?") return # Build user identity user_id = f"mud_{caller.id}" username = caller.key room = caller.location.key if caller.location else "The Threshold" # Call the multi-user bridge import json from urllib.request import Request, urlopen bridge_url = "http://127.0.0.1:4004/bridge/chat" payload = json.dumps({ "user_id": user_id, "username": username, "message": message, "room": room, }).encode() try: req = Request(bridge_url, data=payload, headers={"Content-Type": "application/json"}) resp = urlopen(req, timeout=30) data = json.loads(resp.read()) timmy_response = data.get("response", "*The green LED flickers.*") # Show to caller caller.msg(f"Timmy says: {timmy_response}") # Show to others in room (without the response text, just that Timmy is talking) for obj in caller.location.contents: if obj != caller and obj.has_account: obj.msg(f"{caller.key} asks Timmy something. Timmy responds.") except Exception as e: caller.msg(f"Timmy is quiet. The green LED glows. (Bridge error: {e})") class CmdTimmyStatus(Command): """ Check Timmy's status in the world. Usage: timmy status """ key = "timmy" aliases = ["timmy-status"] locks = "cmd:all()" def func(self): import json from urllib.request import urlopen try: resp = urlopen("http://127.0.0.1:4004/bridge/health", timeout=5) data = json.loads(resp.read()) self.caller.msg( f"Timmy Status:\n" f" Active sessions: {data.get('active_sessions', '?')}\n" f" The green LED is {'glowing' if data.get('status') == 'ok' else 'flickering'}." ) except: self.caller.msg("Timmy is offline. The green LED is dark.")