<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[一个极简COMMAND的演示代码]]></title><description><![CDATA[<pre><code>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"^[&gt; ]*你身上携带物品的别称如下|^[&gt; ]*在这个房间中, 生物及物品的\(英文\)名称如下.*", onSuccess = self.id_here, **options),
            "id_item"     : Trigger(self.session, r"^[&gt; ]*([\u4e00-\u9fa5 ]+)\s+ = (.+)$", onSuccess = self.id_item, **options),
            "stop"        : Trigger(self.session, r"^[&gt; ]*系统回馈：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])
</code></pre>
]]></description><link>https://bbs.pymud.cn/topic/20/一个极简command的演示代码</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 03:38:21 GMT</lastBuildDate><atom:link href="https://bbs.pymud.cn/topic/20.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jan 2026 16:28:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 一个极简COMMAND的演示代码 on Wed, 21 Jan 2026 00:10:41 GMT]]></title><description><![CDATA[<p dir="auto">command还可以返回值，所以可以把一个大任务分解成若干具有返回值的command，根据返回值判断下一步操作</p>
]]></description><link>https://bbs.pymud.cn/post/95</link><guid isPermaLink="true">https://bbs.pymud.cn/post/95</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Wed, 21 Jan 2026 00:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to 一个极简COMMAND的演示代码 on Thu, 15 Jan 2026 00:33:35 GMT]]></title><description><![CDATA[<p dir="auto">command功能，我理解的是，批量处理触发，等待一个结果执行完之后，再执行另1个结果，还有别的我没理解到的作用吗？</p>
]]></description><link>https://bbs.pymud.cn/post/60</link><guid isPermaLink="true">https://bbs.pymud.cn/post/60</guid><dc:creator><![CDATA[shanghua]]></dc:creator><pubDate>Thu, 15 Jan 2026 00:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to 一个极简COMMAND的演示代码 on Thu, 15 Jan 2026 00:08:07 GMT]]></title><description><![CDATA[<p dir="auto">不得不说，提前定义options这种方式很优雅，让我领教了。<br />
另外在execute方法前的装饰器@exception的作用是什么？是可以省略try-exception的情况下自动抛出异常么？</p>
<pre><code>        options = {"enabled": False, "group": "cmd.id", "keepEval": True}
        self._tris = {
            "id_here"     : Trigger(self.session, r"^[&gt; ]*你身上携带物品的别称如下|^[&gt; ]*在这个房间中, 生物及物品的\(英文\)名称如下.*", onSuccess = self.id_here, **options),
            "id_item"     : Trigger(self.session, r"^[&gt; ]*([\u4e00-\u9fa5 ]+)\s+ = (.+)$", onSuccess = self.id_item, **options),
            "stop"        : Trigger(self.session, r"^[&gt; ]*系统回馈：id_is_over = 1", onSuccess = self.stop, **options),
        }
</code></pre>
]]></description><link>https://bbs.pymud.cn/post/59</link><guid isPermaLink="true">https://bbs.pymud.cn/post/59</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 15 Jan 2026 00:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to 一个极简COMMAND的演示代码 on Thu, 15 Jan 2026 00:03:37 GMT]]></title><description><![CDATA[<p dir="auto">肉哥，你没import asyncio<br />
<img src="https://bbs.pymud.cn/assets/plugins/nodebb-plugin-emoji/emoji/android/1f60a.png?v=bd960ea4455" class="not-responsive emoji emoji-android emoji--blush" style="height:23px;width:auto;vertical-align:middle" title=":blush:" alt="😊" /></p>
]]></description><link>https://bbs.pymud.cn/post/58</link><guid isPermaLink="true">https://bbs.pymud.cn/post/58</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 15 Jan 2026 00:03:37 GMT</pubDate></item></channel></rss>