You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:35:17