From a66d9c3f67dd0d0a4a1ff3c332deba2ad7589fd8 Mon Sep 17 00:00:00 2001 From: Rongrong Date: Sun, 16 Mar 2025 19:05:37 +0800 Subject: [PATCH] fix: non-reply topic messages treated as replies --- SlashBot.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/SlashBot.py b/SlashBot.py index 5618a83..0811e08 100644 --- a/SlashBot.py +++ b/SlashBot.py @@ -206,9 +206,21 @@ def get_user(msg: telegram.Message) -> User: return User(name=user.full_name or user.title, uid=user.id, username=user.username) +def get_reply(msg: telegram.Message) -> Optional[telegram.Message]: + """ + Telegram creates a false reply to the forum_topic_created service message + when a topic message is not replying to anything. + Filter it out. + """ + rpl = msg.reply_to_message + if rpl and not rpl.forum_topic_created: + return rpl + return None + + def get_users(msg: telegram.Message) -> tuple[User, User]: msg_from = msg - msg_rpl = msg.reply_to_message or msg_from + msg_rpl = get_reply(msg) or msg_from from_user, rpl_user = get_user(msg_from), get_user(msg_rpl) return from_user, rpl_user @@ -314,7 +326,7 @@ def repeat(update: telegram.Update, ctx: telegram.ext.CallbackContext, logger: _ @log def pin(update: telegram.Update, _ctx: telegram.ext.CallbackContext, logger: _logger): msg = update.effective_message - msg_to_pin = msg.reply_to_message + msg_to_pin = get_reply(msg) if not msg_to_pin: vegetable = f'{Vegetable["reject"]} (Reply to a message to use the command)' msg.reply_text(vegetable)