如何通过Python Telegram Bot拦截取消置顶消息?
解决Python Telegram Bot拦截取消置顶消息的问题
在Python Telegram Bot v13.2版本中,确实没有内置的取消置顶消息过滤器,不过可以通过以下两种方式实现拦截:
方法一:自定义过滤器
创建一个自定义过滤器,专门匹配取消置顶的消息——取消置顶操作会触发edited_message,且该消息的pinned属性为False。
from telegram.ext import Filters from telegram import Update class UnpinnedMessageFilter(Filters.update): def filter(self, update: Update) -> bool: # 验证是否为取消置顶的编辑消息 return (update.edited_message is not None and update.edited_message.pinned is False)
使用这个过滤器添加处理器:
def handle_unpinned(update, context): # 这里写你的取消置顶消息处理逻辑 update.edited_message.reply_text("这条消息刚被取消置顶啦") dispatcher.add_handler(MessageHandler(UnpinnedMessageFilter(), handle_unpinned))
如果需要限制仅在特定类型的聊天(比如超级群)中生效,可以结合内置过滤器:
from telegram.ext import Filters dispatcher.add_handler(MessageHandler(UnpinnedMessageFilter() & Filters.chat_type.supergroup, handle_unpinned))
方法二:直接在处理器内判断
如果不想自定义过滤器,也可以直接在处理编辑消息的处理器里判断是否为取消置顶操作:
from telegram.ext import Filters, MessageHandler def handle_edited_messages(update, context): edited_msg = update.edited_message if edited_msg and edited_msg.pinned is False: # 处理取消置顶逻辑 edited_msg.reply_text("消息已取消置顶") dispatcher.add_handler(MessageHandler(Filters.edited, handle_edited_messages))
两种方法都能实现拦截取消置顶消息的需求,你可以根据代码结构选择合适的方式。
内容的提问来源于stack exchange,提问作者Uccio Maselli
相关产品推荐
相关产品推荐

