Files
the-nexus/docs/bezalel/evennia/cmd_record.py

167 lines
5.1 KiB
Python
Raw Normal View History

"""
Live memory commands write new memories into the palace from Evennia.
"""
import json
import subprocess
from evennia.commands.command import Command
from evennia import create_object
PALACE_SCRIPT = "/root/wizards/bezalel/evennia/palace_search.py"
PALACE_PATH = "/root/wizards/bezalel/.mempalace/palace"
ADDER_SCRIPT = "/root/wizards/bezalel/evennia/palace_add.py"
def _add_drawer(content, wing, room, source):
"""Add a verbatim drawer to the palace via the helper script."""
cmd = [
"/root/wizards/bezalel/hermes/venv/bin/python",
ADDER_SCRIPT,
content,
wing,
room,
source,
]
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=15)
return result.returncode == 0 and "OK" in result.stdout
except Exception:
return False
class CmdRecord(Command):
"""
Record a decision into the palace hall_facts.
Usage:
record <text>
record We decided to use PostgreSQL over MySQL.
"""
key = "record"
aliases = ["decide"]
locks = "cmd:all()"
help_category = "Mind Palace"
def func(self):
if not self.args.strip():
self.caller.msg("Record what decision? Usage: record <text>")
return
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
text = self.args.strip()
full_text = f"DECISION ({wing}): {text}\nRecorded by {self.caller.key} via Evennia."
ok = _add_drawer(full_text, wing, "general", f"evennia:{self.caller.key}")
if ok:
self.caller.location.msg_contents(
f"$You() record() a decision in the palace archives.",
from_obj=self.caller,
)
else:
self.caller.msg("The palace scribes could not write that down.")
class CmdNote(Command):
"""
Note a breakthrough into the palace hall_discoveries.
Usage:
note <text>
note The GraphQL schema can be auto-generated from our typeclasses.
"""
key = "note"
aliases = ["jot"]
locks = "cmd:all()"
help_category = "Mind Palace"
def func(self):
if not self.args.strip():
self.caller.msg("Note what? Usage: note <text>")
return
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
text = self.args.strip()
full_text = f"BREAKTHROUGH ({wing}): {text}\nNoted by {self.caller.key} via Evennia."
ok = _add_drawer(full_text, wing, "general", f"evennia:{self.caller.key}")
if ok:
self.caller.location.msg_contents(
f"$You() inscribe() a breakthrough into the palace scrolls.",
from_obj=self.caller,
)
else:
self.caller.msg("The palace scribes could not write that down.")
class CmdEvent(Command):
"""
Log an event into the palace hall_events.
Usage:
event <text>
event Gitea runner came back online after being offline for 6 hours.
"""
key = "event"
aliases = ["log"]
locks = "cmd:all()"
help_category = "Mind Palace"
def func(self):
if not self.args.strip():
self.caller.msg("Log what event? Usage: event <text>")
return
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
text = self.args.strip()
full_text = f"EVENT ({wing}): {text}\nLogged by {self.caller.key} via Evennia."
ok = _add_drawer(full_text, wing, "general", f"evennia:{self.caller.key}")
if ok:
self.caller.location.msg_contents(
f"$You() chronicle() an event in the palace records.",
from_obj=self.caller,
)
else:
self.caller.msg("The palace scribes could not write that down.")
class CmdPalaceWrite(Command):
"""
Directly write a memory into a specific palace room.
Usage:
palace/write <room> = <text>
"""
key = "palace/write"
locks = "cmd:all()"
help_category = "Mind Palace"
def func(self):
if "=" not in self.args:
self.caller.msg("Usage: palace/write <room> = <text>")
return
room, text = self.args.split("=", 1)
room = room.strip()
text = text.strip()
if not room or not text:
self.caller.msg("Both room and text are required.")
return
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
full_text = f"MEMORY ({wing}/{room}): {text}\nWritten by {self.caller.key} via Evennia."
ok = _add_drawer(full_text, wing, room, f"evennia:{self.caller.key}")
if ok:
self.caller.location.msg_contents(
f"$You() etch() a memory into the |c{room}|n room of the palace.",
from_obj=self.caller,
)
else:
self.caller.msg("The palace scribes could not write that down.")