feat: 优化指令匹配规则
This commit is contained in:
parent
20f1f33b6c
commit
83d0e02eb4
@ -104,7 +104,7 @@ class Config:
|
|||||||
self.append_keyword(keywords_playlocal, "playlocal")
|
self.append_keyword(keywords_playlocal, "playlocal")
|
||||||
keywords_play = os.getenv("XIAOMUSIC_KEYWORDS_PLAY", "播放歌曲,放歌曲")
|
keywords_play = os.getenv("XIAOMUSIC_KEYWORDS_PLAY", "播放歌曲,放歌曲")
|
||||||
self.append_keyword(keywords_play, "play")
|
self.append_keyword(keywords_play, "play")
|
||||||
keywords_stop = os.getenv("XIAOMUSIC_KEYWORDS_STOP", "关机,暂停,停止")
|
keywords_stop = os.getenv("XIAOMUSIC_KEYWORDS_STOP", "关机,暂停,停止,停止播放")
|
||||||
self.append_keyword(keywords_stop, "stop")
|
self.append_keyword(keywords_stop, "stop")
|
||||||
|
|
||||||
# 保存配置到 config-example.json 文件
|
# 保存配置到 config-example.json 文件
|
||||||
|
@ -610,8 +610,26 @@ class XiaoMusic:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log.warning(f"执行出错 {str(e)}\n{traceback.format_exc()}")
|
self.log.warning(f"执行出错 {str(e)}\n{traceback.format_exc()}")
|
||||||
|
|
||||||
|
# 检查是否匹配到完全一样的指令
|
||||||
|
def check_full_match_cmd(self, query, ctrl_panel):
|
||||||
|
if query in self.config.key_match_order:
|
||||||
|
opkey = query
|
||||||
|
opvalue = self.config.key_word_dict.get(opkey)
|
||||||
|
if ctrl_panel or self._playing:
|
||||||
|
return opvalue
|
||||||
|
else:
|
||||||
|
if not self.active_cmd or opvalue in self.active_cmd:
|
||||||
|
return opvalue
|
||||||
|
return None
|
||||||
|
|
||||||
# 匹配命令
|
# 匹配命令
|
||||||
def match_cmd(self, query, ctrl_panel):
|
def match_cmd(self, query, ctrl_panel):
|
||||||
|
# 优先处理完全匹配
|
||||||
|
opvalue = self.check_full_match_cmd(query, ctrl_panel)
|
||||||
|
if opvalue:
|
||||||
|
self.log.info(f"完全匹配指令. query:{query} opvalue:{opvalue}")
|
||||||
|
return (opvalue, None)
|
||||||
|
|
||||||
for opkey in self.config.key_match_order:
|
for opkey in self.config.key_match_order:
|
||||||
patternarg = rf"(.*){opkey}(.*)"
|
patternarg = rf"(.*){opkey}(.*)"
|
||||||
# 匹配参数
|
# 匹配参数
|
||||||
@ -629,16 +647,14 @@ class XiaoMusic:
|
|||||||
argafter,
|
argafter,
|
||||||
)
|
)
|
||||||
oparg = argafter
|
oparg = argafter
|
||||||
|
if opkey in KEY_WORD_ARG_BEFORE_DICT:
|
||||||
|
oparg = argpre
|
||||||
opvalue = self.config.key_word_dict.get(opkey)
|
opvalue = self.config.key_word_dict.get(opkey)
|
||||||
if not ctrl_panel and not self._playing:
|
if not ctrl_panel and not self._playing:
|
||||||
if self.active_cmd and opvalue not in self.active_cmd:
|
if self.active_cmd and opvalue not in self.active_cmd:
|
||||||
self.log.debug(f"不在激活命令中 {opvalue}")
|
self.log.ifno(f"不在激活命令中 {opvalue}")
|
||||||
continue
|
continue
|
||||||
if opkey in KEY_WORD_ARG_BEFORE_DICT:
|
self.log.info(f"匹配到指令. opkey:{opkey} opvalue:{opvalue} oparg:{oparg}")
|
||||||
oparg = argpre
|
|
||||||
self.log.info(
|
|
||||||
"匹配到指令. opkey:%s opvalue:%s oparg:%s", opkey, opvalue, oparg
|
|
||||||
)
|
|
||||||
return (opvalue, oparg)
|
return (opvalue, oparg)
|
||||||
if self._playing:
|
if self._playing:
|
||||||
self.log.info("未匹配到指令,自动停止")
|
self.log.info("未匹配到指令,自动停止")
|
||||||
|
Loading…
Reference in New Issue
Block a user