如何在python-telegram-bot中处理并删除Telegram群入群/退群通知消息
python-telegram-bot 处理入群/退群服务消息的实现方案
Telegram 的入群、退群通知属于服务消息(Service Message),不属于普通文本类消息,需要使用专门的过滤器捕获,无需依赖第三方服务,完全可以在现有 python-telegram-bot 技术栈下实现。
前置准备
- 把机器人设置为目标群组的管理员,授予「删除消息」权限,否则即使捕获到消息也无法执行删除操作
- 无需调整机器人的隐私模式,管理员身份默认可以获取群内所有服务消息
代码实现
针对 v20.x 版本(当前主流异步版本)
- 导入对应依赖
from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
- 编写消息处理回调函数
async def delete_service_msg(update: Update, context: ContextTypes.DEFAULT_TYPE): # 捕获到服务消息后直接删除 await context.bot.delete_message( chat_id=update.effective_chat.id, message_id=update.effective_message.id )
- 注册消息处理器
if __name__ == "__main__": application = ApplicationBuilder().token("你的机器人TOKEN").build() # 过滤器匹配新成员入群、成员退群两类服务消息 service_filter = filters.StatusUpdate.NEW_CHAT_MEMBERS | filters.StatusUpdate.LEFT_CHAT_MEMBER application.add_handler(MessageHandler(service_filter, delete_service_msg)) application.run_polling()
针对 v13.x 版本(旧同步版本)
- 导入对应依赖
from telegram import Update from telegram.ext import Updater, MessageHandler, Filters, CallbackContext
- 编写消息处理回调函数
def delete_service_msg(update: Update, context: CallbackContext): context.bot.delete_message( chat_id=update.effective_chat.id, message_id=update.effective_message.message_id )
- 注册消息处理器
if __name__ == "__main__": updater = Updater("你的机器人TOKEN") dp = updater.dispatcher # 过滤器匹配新成员入群、成员退群两类服务消息 service_filter = Filters.status_update.new_chat_members | Filters.status_update.left_chat_member dp.add_handler(MessageHandler(service_filter, delete_service_msg)) updater.start_polling() updater.idle()
补充说明
- 上述逻辑对轮询、Webhook 两种消息接收模式都生效,不需要额外调整配置
- 如果需要删除其他类型的服务消息(比如群名称修改、群公告更新等),只需要调整过滤器规则,添加
filters.StatusUpdate下对应的类型即可
内容的提问来源于stack exchange,提问作者AKMalkadi
相关产品推荐
相关产品推荐

