<?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[关于commands的问题，如何在异步执行的await中添加其他条件？]]></title><description><![CDATA[<p dir="auto">我写了一个skills命令，意图查看自身或者师父的技能。<br />
现在是第一步，先实现自身的技能查询，并保存到变量中。</p>
<pre><code>你目前所掌握的技能：（十四项）

┏━  普通知识  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃  读书识字 (literate)                      - 学贯古今    192/ 22225   ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━  基本技能  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃  基本弓箭 (archery)                       - 初窥堂奥    171/ 2729    ┃
┃  基本轻功 (dodge)                         - 凌空渡虚    502/ 49830   ┃
┃  内功心法 (force)                         - 深不可测    503/ 239011  ┃
┃  拆招卸力之法 (parry)                     - 一代宗师    502/ 41364   ┃
┃  法术 (spells)                            - 变换莫测    503/ 8800    ┃
┃  基本剑术 (sword)                         - 一代宗师    502/ 8384    ┃
┃  扑击格斗之技 (unarmed)                   - 一代宗师    502/ 4228    ┃
┠─  特殊技能  ────────────────────────────┨
┃□百花掌 (baihua-zhang)                    - 一代宗师    502/ 32618   ┃
┃□枯骨刀 (kugu-blade)                      - 一代宗师    502/ 21322   ┃
┃□冷月凝香舞 (moondance)                   - 一代宗师    502/ 43960   ┃
┃□圆月心法 (moonforce)                     - 一代宗师    503/ 7155    ┃
┃□月宫仙法 (moonshentong)                  - 一代宗师    502/ 351011  ┃
┃□风回雪舞剑法 (snowsword)                 - 一代宗师    502/ 29453   ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
</code></pre>
<p dir="auto">这是输入skills命令后的显示结果，我想通过'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛'来触发命令结束，但这个在整个技能中出现了不止一次，所以我想结合技能的数量判断是否已经结束，即技能的获取数量和掌握技能的总数（十四项），可以判断技能查询结束了，如何把这个条件也加到异步判断中呢？<br />
下面是我暂时写的代码：</p>
<pre><code>from pymud import Command, Trigger, IConfig, DotDict,trigger,async_exception
import traceback
import re, cn2an

class CmdSkills(Command, IConfig):
    _help = """
    通过命令行查看技能的命令：
        正常指令      含义
        skills:         查看角色所有技能
        skills xxx:    查看npc'xxx'的所有技能
    """
    def __init__(self, session, *args, **kwargs):
        pattern = r"^(?:skills|sk)\s*(.*)$"
        
        kwargs.setdefault("id", "cmd_skills")
        super().__init__(session, patterns = pattern, *args, **kwargs)
        self.session.setVariable('skills',[])    
        self.category = ''
        self.skill_count = 0
        self.skill_order = 0
    def __unload__(self):
        super().__unload__()

    @trigger(id = "cmd.skiills.start", patterns = r"^你目前所掌握的技能：（(.*?)项）", group = "cmd.skills",enabled = False)
    def start(self, name, line, wildcards):    
        self.session.info('Start to parse skill on')
        self.skill_count = cn2an.cn2an(wildcards[0],'normal')
        self.session.enableGroup(group = "cmd.skills", enabled = True, subgroup = True)  
    
    @trigger(id = "cmd.skills.end", patterns = r'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛', group = "cmd.skills",enabled = False)
    def end(self, name, line, wildcards):    
        self.session.info(f'End to parse skills')
        self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)  
        
    
    @trigger(id = "cmd.skills.item", patterns = r'^\s*┃\s*([□ ]?)\s*([^()]+)\s*\(([^)]+)\)\s*-\s*([^ ]+)\s+(\d+)/\s*(\d+)\s*┃\s*$', group = "cmd.skills",enabled = False)
    def item(self, name, line, wildcards):    
        skill = {}
        skill['category'] = self.category
        skill['enabled'] = '□' in wildcards[0].strip()
        skill['cn_name'] = wildcards[1].strip()
        skill['en_name'] = wildcards[2].strip()
        skill['title'] = wildcards[3].strip()
        skill['level'] = int(wildcards[4].strip())
        skill['experience'] = int(wildcards[5].strip())
        self.session.getVariable('skills').append(skill)
        self.skill_order += 1
    
    @trigger(id = "cmd.skills.category", patterns = r'^[┏┠][━─]\s{2}([\u4e00-\u9fa5]+)\s{2}[━─]+.*[┓┨]\s*$', group = "cmd.skills",enabled = False)
    def item_end(self, name, line, wildcards):
        self.category = wildcards[0].strip()    
        self.session.info(f'Skill category: {self.category}')

    async def execute(self, cmd = "skills", *args, **kwargs):        
        try:
            self.reset()
            self.session.tris["cmd.skiills.start"].enabled = True 
            await self.session.waitfor(cmd, self.session.tris["cmd.skills.end"].triggered())
            self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)  
            return self.SUCCESS
        except Exception as e:
            self.error(f"异步执行中遇到异常, {e}, 类型为 {type(e)}")
            self.error(f"异常追踪为： {traceback.format_exc()}")
</code></pre>
]]></description><link>https://bbs.pymud.cn/topic/19/关于commands的问题-如何在异步执行的await中添加其他条件</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 03:57:54 GMT</lastBuildDate><atom:link href="https://bbs.pymud.cn/topic/19.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jan 2026 14:38:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 关于commands的问题，如何在异步执行的await中添加其他条件？ on Thu, 15 Jan 2026 06:01:44 GMT]]></title><description><![CDATA[<p dir="auto">谢谢各位大佬。<br />
我在skill item的触发中计数，当计数和总技能数相等的时候开启end触发，算是绕过去了。</p>
<pre><code>from pymud import Command, Trigger, IConfig, DotDict,trigger,async_exception
import traceback
import re, cn2an

class CmdSkills(Command, IConfig):
    _help = """
    通过命令行查看技能的命令：
        正常指令      含义
        skills:         查看角色所有技能
        skills xxx:    查看npc'xxx'的所有技能
    """
    def __init__(self, session, *args, **kwargs):
        pattern = r"^(?:skills|sk)\s*(.*)$"        
        kwargs.setdefault("id", "cmd_skills")
        super().__init__(session, patterns = pattern, *args, **kwargs)
        self.session.setVariable('skills',[])    
        self.category = ''
        self.skill_count = 0

    def __unload__(self):
        super().__unload__()

    @trigger(id = "cmd.skills.start", patterns = r"^你目前所掌握的技能：（(.*?)项）", group = "cmd.skills",enabled = False)
    def start(self, name, line, wildcards): 
        self.skills = []
        self.skill_order = 0
        self.session.info('Start to parse skill on')
        self.skill_count = cn2an.cn2an(wildcards[0],'normal')
        self.session.enableGroup(group = "cmd.skills", enabled = True, subgroup = True)  
    
    @trigger(id = "cmd.skills.end", patterns = r'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛', group = "cmd.skills",enabled = False)
    def end(self, name, line, wildcards):    
        self.session.info(f'End to parse skills')
        self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)        
    
    @trigger(id = "cmd.skills.item", patterns = r'^\s*┃\s*([□ ]?)\s*([^()]+)\s*\(([^)]+)\)\s*-\s*([^ ]+)\s+(\d+)/\s*(\d+)\s*┃\s*$', group = "cmd.skills",enabled = False)
    def item(self, name, line, wildcards):    
        skill = {}
        skill['category'] = self.category
        skill['enabled'] = '□' in wildcards[0].strip()
        skill['cn_name'] = wildcards[1].strip()
        skill['en_name'] = wildcards[2].strip()
        skill['title'] = wildcards[3].strip()
        skill['level'] = int(wildcards[4].strip())
        skill['experience'] = int(wildcards[5].strip())
        self.skills.append(skill)
        self.skill_order += 1
        if self.skill_order == self.skill_count:
            self.session.tris["cmd.skills.end"].enabled = True 
    
    @trigger(id = "cmd.skills.category", patterns = r'^[┏┠][━─]\s{2}([\u4e00-\u9fa5]+)\s{2}[━─]+.*[┓┨]\s*$', group = "cmd.skills",enabled = False)
    def category(self, name, line, wildcards):
        self.category = wildcards[0].strip()    
        self.session.info(f'Skill category: {self.category}')

    async def execute(self, cmd = "skills", *args, **kwargs):        
        try:
            self.reset()
            self.session.tris["cmd.skills.start"].enabled = True 
            await self.session.waitfor(cmd, self.session.tris["cmd.skills.end"].triggered())
            self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True) 
            self.session.setVariable('skills',self.skills)    
            return self.SUCCESS
        except Exception as e:
            self.error(f"异步执行中遇到异常, {e}, 类型为 {type(e)}")
            self.error(f"异常追踪为： {traceback.format_exc()}")
</code></pre>
]]></description><link>https://bbs.pymud.cn/post/65</link><guid isPermaLink="true">https://bbs.pymud.cn/post/65</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 15 Jan 2026 06:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to 关于commands的问题，如何在异步执行的await中添加其他条件？ on Thu, 15 Jan 2026 03:06:59 GMT]]></title><description><![CDATA[<p dir="auto">我仍然建议你用第一种方案，如果会没有特殊技能，至少会有基本技能的，用正则写法<br />
r"┠─ (特殊|基本)技能 ────────────────────────────┨"</p>
]]></description><link>https://bbs.pymud.cn/post/64</link><guid isPermaLink="true">https://bbs.pymud.cn/post/64</guid><dc:creator><![CDATA[hhyzz]]></dc:creator><pubDate>Thu, 15 Jan 2026 03:06:59 GMT</pubDate></item><item><title><![CDATA[Reply to 关于commands的问题，如何在异步执行的await中添加其他条件？ on Wed, 14 Jan 2026 23:52:24 GMT]]></title><description><![CDATA[<p dir="auto">我可能会用第二种方法，第一种方法适用性有些窄，因为新角色或者转世后，角色可能只有基本技能而无特殊技能。</p>
<p dir="auto">其实我在想如何构造一个可等待对象，在里边等待这个判断条件，但我现在对这个异步理解不深刻，还得琢磨琢磨</p>
]]></description><link>https://bbs.pymud.cn/post/57</link><guid isPermaLink="true">https://bbs.pymud.cn/post/57</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Wed, 14 Jan 2026 23:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to 关于commands的问题，如何在异步执行的await中添加其他条件？ on Wed, 14 Jan 2026 16:52:17 GMT]]></title><description><![CDATA[<p dir="auto">有两个思路,你参考下：<br />
1.execute方法中整组使能之后关闭cmd.skills.end触发</p>
<pre><code>self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)
self.session.tris["cmd.skiills.stop"].enabled = False
</code></pre>
<p dir="auto">增加一个新的触发"┠─  特殊技能  ────────────────────────────┨",<br />
用这个触发来使能"cmd.skiills.stop"触发，这样就避免了被前序的字符串误触发了。</p>
<p dir="auto">2.第二个思路就比较不推荐了，只是作为一个参考也许其他地方能用的上。<br />
你目前所掌握的技能：（十四项）此处将"十四"转阿拉伯数字，存变量"_num"<br />
后面写一个while循环等待技能捕获到足够数量，</p>
<pre><code>
self.session.vars.skills = []
while len(self.session.vars.skills)&lt;_num:
    #实际使用中，应加入超时机制，避免因为睡觉等无法接收服务器消息的原因造成无限循环
    await asyncio.sleep(0.1)
    self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)  
    return self.SUCCESS
</code></pre>
]]></description><link>https://bbs.pymud.cn/post/56</link><guid isPermaLink="true">https://bbs.pymud.cn/post/56</guid><dc:creator><![CDATA[hhyzz]]></dc:creator><pubDate>Wed, 14 Jan 2026 16:52:17 GMT</pubDate></item></channel></rss>