Files
the-nexus/docs/bezalel/evennia/cmd_steward.py
Bezalel a0ee7858ff
Some checks failed
Deploy Nexus / deploy (push) Has been cancelled
feat(bezalel): MemPalace ecosystem — validation, audit, sync, auto-revert, Evennia integration
2026-04-07 14:47:12 +00:00

106 lines
3.2 KiB
Python

"""
Steward commands — ask a palace steward about memories.
"""
from evennia.commands.command import Command
from evennia import search_object
class CmdAskSteward(Command):
"""
Ask a steward NPC about a topic from the palace memory.
Usage:
ask <steward> about <topic>
ask <steward> about <topic> --fleet
Example:
ask bezalel-steward about nightly watch
ask bezalel-steward about runner outage --fleet
"""
key = "ask"
aliases = ["question"]
locks = "cmd:all()"
help_category = "Mind Palace"
def parse(self):
"""Parse 'ask <target> about <topic>' syntax."""
raw = self.args.strip()
fleet = "--fleet" in raw
if fleet:
raw = raw.replace("--fleet", "").strip()
if " about " in raw.lower():
parts = raw.split(" about ", 1)
self.target_name = parts[0].strip()
self.topic = parts[1].strip()
else:
self.target_name = ""
self.topic = raw
self.fleet = fleet
def func(self):
if not self.args.strip():
self.caller.msg("Usage: ask <steward> about <topic> [--fleet]")
return
self.parse()
if not self.target_name:
self.caller.msg("Ask whom? Usage: ask <steward> about <topic>")
return
# Find steward NPC in current room
stewards = [
obj for obj in self.caller.location.contents
if hasattr(obj, "respond_to_question")
and self.target_name.lower() in obj.key.lower()
]
if not stewards:
self.caller.msg(f"There is no steward here matching '{self.target_name}'.")
return
steward = stewards[0]
self.caller.msg(f"You ask |c{steward.key}|n about '{self.topic}'...")
steward.respond_to_question(self.topic, self.caller, fleet=self.fleet)
class CmdSummonSteward(Command):
"""
Summon your wing's steward NPC to your current location.
Usage:
summon steward
"""
key = "summon steward"
locks = "cmd:all()"
help_category = "Mind Palace"
def func(self):
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
steward_key = f"{wing}-steward"
# Search for existing steward
from typeclasses.steward_npc import StewardNPC
stewards = search_object(steward_key, typeclass="typeclasses.steward_npc.StewardNPC")
if stewards:
steward = stewards[0]
steward.move_to(self.caller.location, move_type="teleport")
self.caller.location.msg_contents(
f"A shimmer of light coalesces into |c{steward.key}|n.",
from_obj=self.caller,
)
else:
steward = StewardNPC.create(steward_key)[0]
steward.db.wing = wing
steward.db.steward_name = self.caller.key
steward.move_to(self.caller.location, move_type="teleport")
self.caller.location.msg_contents(
f"You call forth |c{steward.key}|n from the palace archives.",
from_obj=self.caller,
)