diff --git a/bots/aiocqhttp/message.py b/bots/aiocqhttp/message.py index f38ec82e..c2b0c427 100644 --- a/bots/aiocqhttp/message.py +++ b/bots/aiocqhttp/message.py @@ -117,9 +117,12 @@ class MessageSession(MS): return False return False - def asDisplay(self): - m = self.session.message.message - m = re.sub(r'\[CQ:at,qq=(.*?)]', r'QQ|\1', html.unescape(m)) + def asDisplay(self, text_only=False): + m = html.unescape(self.session.message.message) + if text_only: + return ''.join( + re.split(r'\[CQ:.*?]', m)).strip() + m = re.sub(r'\[CQ:at,qq=(.*?)]', r'QQ|\1', m) m = re.sub(r'\[CQ:forward,id=(.*?)]', r'\[Ke:forward,id=\1]', m) return ''.join( diff --git a/bots/aiogram/message.py b/bots/aiogram/message.py index 25cf59be..293d649e 100644 --- a/bots/aiogram/message.py +++ b/bots/aiogram/message.py @@ -107,7 +107,7 @@ class MessageSession(MS): return True return False - def asDisplay(self): + def asDisplay(self, text_only=False): return self.session.message.text async def delete(self): diff --git a/bots/discord/message.py b/bots/discord/message.py index 50a9d7d1..2b583724 100644 --- a/bots/discord/message.py +++ b/bots/discord/message.py @@ -118,7 +118,7 @@ class MessageSession(MS): return True return False - def asDisplay(self): + def asDisplay(self, text_only=False): msg = self.session.message.content msg = re.sub(r'<@(.*?)>', r'Discord|Client|\1', msg) return msg diff --git a/core/builtins/message/__init__.py b/core/builtins/message/__init__.py index 6c380d31..500f6188 100644 --- a/core/builtins/message/__init__.py +++ b/core/builtins/message/__init__.py @@ -41,7 +41,7 @@ class MessageSession(MessageSession): if result: if msgchain is not None and delete: await send.delete() - if result.asDisplay() in confirm_command: + if result.asDisplay(text_only=True) in confirm_command: return True return False else: diff --git a/core/types/message/__init__.py b/core/types/message/__init__.py index 113276fa..d9bb245a 100644 --- a/core/types/message/__init__.py +++ b/core/types/message/__init__.py @@ -173,9 +173,10 @@ class MessageSession: :return: 任意人的MessageChain对象 """ - def asDisplay(self) -> str: + def asDisplay(self, text_only=False) -> str: """ 用于将消息转换为一般文本格式。 + :param text_only: 是否只保留纯文本(默认为False) """ def t(self, *args, **kwargs) -> str: diff --git a/modules/chemical_code/__init__.py b/modules/chemical_code/__init__.py index 47929e1b..71c0f3c8 100644 --- a/modules/chemical_code/__init__.py +++ b/modules/chemical_code/__init__.py @@ -133,7 +133,7 @@ async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): async def ans(msg: Bot.MessageSession, answer): # 定义回答函数的功能 wait = await msg.waitAnyone() # 等待对象内的任意人回答 if play_state[msg.target.targetId]['active']: # 检查对象是否为活跃状态 - if wait.asDisplay() != answer: # 如果回答不正确 + if wait.asDisplay(text_only=True) != answer: # 如果回答不正确 Logger.info(f'{wait.asDisplay()} != {answer}') # 输出日志 return await ans(wait, answer) # 进行下一轮检查 else: @@ -159,7 +159,7 @@ async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): result = await msg.waitNextMessage( [Image(newpath), Plain(lang.t('chemical_code.captcha.text', times=set_timeout))]) if play_state[msg.target.targetId]['active']: # 检查对象是否为活跃状态 - if result.asDisplay() == csr['name']: + if result.asDisplay(text_only=True) == csr['name']: await result.sendMessage(lang.t('chemical_code.correct')) else: await result.sendMessage(lang.t('chemical_code.incorrect', answer=play_state[msg.target.targetId]["answer"])) diff --git a/modules/mod_dl/__init__.py b/modules/mod_dl/__init__.py index 67a35f4e..fdea8c3a 100644 --- a/modules/mod_dl/__init__.py +++ b/modules/mod_dl/__init__.py @@ -51,7 +51,7 @@ async def main(msg: Bot.MessageSession): i += 1 reply_text.append(f'{i}. {info}') reply = await msg.waitReply('搜索结果如下:\n' + '\n'.join(reply_text) + '\n请回复编号来选择mod。') - replied = reply.asDisplay() + replied = reply.asDisplay(text_only=True) if replied.isdigit(): replied = int(replied) if replied > len(infos): @@ -78,7 +78,7 @@ async def main(msg: Bot.MessageSession): for info2 in infos_2: reply_text.append(f'{info2}') reply2 = await msg.waitReply('此mod拥有如下版本:\n' + '\n'.join(reply_text) + '\n请回复版本号来选择版本。') - replied2 = reply2.asDisplay() + replied2 = reply2.asDisplay(text_only=True) if replied2 in infos_2: mod_url_2 = infos_2[replied2] ver = replied2 diff --git a/modules/wiki/search.py b/modules/wiki/search.py index 2d363ced..eef227a9 100644 --- a/modules/wiki/search.py +++ b/modules/wiki/search.py @@ -95,6 +95,6 @@ async def search_pages(session: Bot.MessageSession, title: Union[str, list, tupl msg_list.append(w) msg_list.append('回复编号以查询对应的页面。') reply = await session.waitReply(Plain('\n'.join(msg_list))) - if reply.asDisplay().isdigit(): + if reply.asDisplay(text_only=True).isdigit(): reply_number = int(reply.asDisplay()) - 1 await query_pages(reply, wait_msg_list[reply_number]) diff --git a/modules/wiki/wiki.py b/modules/wiki/wiki.py index 9c9fb5b4..07cfab8d 100644 --- a/modules/wiki/wiki.py +++ b/modules/wiki/wiki.py @@ -328,9 +328,9 @@ async def query_pages(session: Union[Bot.MessageSession, QueryInfo], title: Unio confirm = await session.waitNextMessage(wait_msg_list, delete=True) auto_index = False index = 0 - if confirm.asDisplay() in confirm_command: + if confirm.asDisplay(text_only=True) in confirm_command: auto_index = True - elif confirm.asDisplay().isdigit(): + elif confirm.asDisplay(text_only=True).isdigit(): index = int(confirm.asDisplay()) - 1 else: return