From 4340c076603d1494942335093aea69215a88325a Mon Sep 17 00:00:00 2001 From: grassblock Date: Sat, 2 Aug 2025 18:41:13 +0800 Subject: [PATCH] fix: actions command stopped working --- adapters/tg.py | 23 +++++++++++++++-------- core/actions.py | 11 +++++------ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/adapters/tg.py b/adapters/tg.py index b8a8cc8..dc449c1 100644 --- a/adapters/tg.py +++ b/adapters/tg.py @@ -38,6 +38,9 @@ class TelegramAdapter: """Register handlers with core module functions""" # Create router router = Router() + actions_router = Router() + repeat_router = Router() + dummy_router = Router() # Register handlers on router router.message(CommandStart())(handle_start_command) @@ -51,27 +54,31 @@ class TelegramAdapter: # fedi 模块 router.message(Command('fauth'))(handle_auth) router.message(Command('post'))(handle_post_to_fedi) + # link 模块 + router.message(Command('report_broken_links'))(report_broken_links) + router.message(F.text.contains('http') & ~F.text.contains('/report_broken_links'))(handle_links) # unpin 模块 # 不知道为什么检测不到频道的消息被置顶这个事件,暂时认为所有的频道消息都是被置顶的 router.message(F.chat.type.in_({'group', 'supergroup'}) & F.sender_chat & ( F.sender_chat.type == 'channel') & F.is_automatic_forward)( handle_unpin_channel_message) - # link 模块 - router.message(Command('report_broken_links'))(report_broken_links) - router.message(F.text.contains('http') & ~F.text.contains('/report_broken_links'))(handle_links) # repeater 模块 - router.message(F.chat.type.in_({'group', 'supergroup'}))(MessageRepeater().handle_message) - # actions 模块 - router.message(F.text.startswith('/'))(handle_actions) - router.message(F.text.startswith('\\'))(handle_reverse_actions) + repeat_router.message(F.chat.type.in_({'group', 'supergroup'}))(MessageRepeater().handle_message) router.message(F.text == '我是笨蛋')(handle_baka) # 捕获所有其他消息 - router.message(F.chat.type.in_({'group', 'supergroup'}))(dummy_handler) + dummy_router.message(F.chat.type.in_({'group', 'supergroup'}))(dummy_handler) + + # actions 模块 + actions_router.message(F.chat.type.in_({'group', 'supergroup'}) & F.text.startswith('/'))(handle_actions) + actions_router.message(F.chat.type.in_({'group', 'supergroup'}) & F.text.startswith('\\'))(handle_reverse_actions) # Include router in dispatcher + # 通用的路由 self.dp.include_router(router) + self.dp.include_router(actions_router) # 处理联邦宇宙认证相关 self.dp.include_router(fedi_router) + self.dp.include_router(dummy_router) def _setup_middleware(self): """注册中间件""" diff --git a/core/actions.py b/core/actions.py index e99ae44..830cb91 100644 --- a/core/actions.py +++ b/core/actions.py @@ -6,16 +6,15 @@ from config import config async def handle_actions(message: Message) -> None: if not config.is_feature_enabled('actions', message.chat.id): return - if not message.chat.type in ['group', 'supergroup']: - return rawtext = message.text - from_user = message.from_user.mention_html(message.sender_chat.title) if message.sender_chat else message.from_user.mention_html() - replied_user = message.reply_to_message.from_user.mention_html(message.reply_to_message.sender_chat.title) if message.reply_to_message and message.reply_to_message.sender_chat else message.reply_to_message.from_user.mention_html() + # 防止识别成命令而被误触发 if rawtext.replace('/','',1).isascii() or '@' in rawtext: - print(rawtext.replace('/','',1).isascii()) return - elif " " in message.text: + + from_user = message.from_user.mention_html(message.sender_chat.title) if message.sender_chat else message.from_user.mention_html() + replied_user = message.reply_to_message.from_user.mention_html(message.reply_to_message.sender_chat.title) if message.reply_to_message and message.reply_to_message.sender_chat else (message.reply_to_message.from_user.mention_html() if message.reply_to_message else None) + if " " in rawtext: if rawtext.split(" ")[0].replace('/','',1).isascii(): return await message.reply(f"{from_user} {rawtext.split(" ")[0].replace('/','')}了 {replied_user if message.reply_to_message else '自己' } {''.join(rawtext.split(" ")[1:])}!",disable_web_page_preview=True)