from pymud import Session, Command, exception, IConfig, Trigger
class cha_rbz(Command, IConfig):
def __init__(self, session, *args, **kwargs):
kwargs.setdefault("id", "cmd_id")
kwargs.setdefault("group", "cmd")
super().__init__(session, r"^id( here)?$", *args, **kwargs)
self._items = []
options = {"enabled": False, "group": "cmd.id", "keepEval": True}
self._tris = {
"id_here" : Trigger(self.session, r"^[> ]*你身上携带物品的别称如下|^[> ]*在这个房间中, 生物及物品的\(英文\)名称如下.*", onSuccess = self.id_here, **options),
"id_item" : Trigger(self.session, r"^[> ]*([\u4e00-\u9fa5 ]+)\s+ = (.+)$", onSuccess = self.id_item, **options),
"stop" : Trigger(self.session, r"^[> ]*系统回馈:id_is_over = 1", onSuccess = self.stop, **options),
}
#[╰└]+ [╯┘]+
@exception
async def execute(self, cmd, *args, **kwargs):
self.reset()
self._items = []
#指定的触发器使能,也可以是GROUP使能
self._tris["id_here"].enabled = True
self._tris["stop"].enabled = True
self.session.writeline(f"{cmd}")
#此处插入一个等待,仅为演示脚本的等待,实际使用中无需等待
await asyncio.sleep(1)
self.session.writeline(f"response id_is_over 1")
#等待触发被触发,可以使用任何可等待的对象
await self._tris["stop"].triggered()
#command的返回值
return self._items
def id_here(self, name, line, wildcards):
#没有在CMD开始就使能整组触发器,防止因为网络卡顿的原因造成误触发
self._tris["id_item"].enabled = True
def id_item(self, name, line, wildcards):
data = list(wildcards)
data[0] = data[0].strip()
data[1] = data[1].split(", ")
if not data[0] == self.session.vars.Status["name"]:
#避免捕获自己的信息,Status为自定义字典
self._items.append(data)
def __unload__(self):
self.session.delObjects(self._tris)
super().__unload__()
def reset(self):
super().reset()
self.session.enableGroup("cmd.id", False, False, [Trigger])
def start(self, name, line, wildcards):
self.session.enableGroup("cmd.id", True, False, [Trigger])
def stop(self, name=None, line=None, wildcards=None):
#cmd流程结束,关闭触发组
self.session.enableGroup("cmd.id", False, False, [Trigger])
H
hhyzz
@hhyzz
-
一个极简COMMAND的演示代码