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

python-telegram-bot报错:'CallbackContext'对象无'left_chat_member'属性

Telegram Bot 自动封禁离开成员报错解决方案

问题描述

您好,我不会英语,使用谷歌翻译与您交流,若用词不当请见谅。我希望通过代码实现检测Telegram群组中离开的成员并自动封禁,但运行时出现错误。请您帮忙解决,谢谢。

原代码

from telegram.ext import MessageHandler, Filters
import telegram

with open("token.txt","r") as f:
    TOKEN = f.read()
    
def start(update,source):
    update.message.reply_text("Merhaba")

def handle_left_member(bot, update):
    left_user = update.left_chat_member
    bot.kickChatMember(chat_id=update.message.chat_id, user_id=left_user.id)

update = telegram.ext.Updater(TOKEN,use_context=True)
disp = update.dispatcher

disp.add_handler(telegram.ext.CommandHandler("start",start))
left_member_handler = MessageHandler(Filters.status_update.left_chat_member, handle_left_member)
disp.add_handler(left_member_handler)

update.start_polling()
update.idle()

错误信息

No error handlers are registered, logging exception.
Traceback (most recent call last):
  File "C:\Users\username\AppData\Local\Programs\Python\Python311\Lib\site-packages\telegram\ext\dispatcher.py", line 557, in process_update
    handler.handle_update(update, self, check, context)
  File "C:\Users\username\AppData\Local\Programs\Python\Python311\Lib\site-packages\telegram\ext\handler.py", line 199, in handle_update   
    return self.callback(update, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\Desktop\TelegramBot\den.py", line 11, in handle_left_member
    left_user = update.left_chat_member
                ^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'CallbackContext' object has no attribute 'left_chat_member'

错误原因及修正方案

核心错误点

  1. 回调函数参数顺序错误:启用use_context=True是python-telegram-bot v12+的上下文模式,回调函数参数顺序应为(update, context),而非旧版的(bot, update)。你的handle_left_member参数顺序搞反,导致把CallbackContext对象当成Update对象调用,触发属性错误。
  2. start函数参数错误:start函数的第二个参数应为context,不是source,否则会触发类似错误。
  3. API方法命名错误:v12+版本中,封禁用户的方法是kick_chat_member()(下划线命名),旧的驼峰命名kickChatMember已被废弃。
  4. 离开成员属性路径错误:离开成员信息属于消息状态更新,需通过update.message.left_chat_member获取,而非直接update.left_chat_member。

修正后的完整代码

from telegram.ext import MessageHandler, Filters, CommandHandler, Updater
import telegram

with open("token.txt","r") as f:
    TOKEN = f.read().strip()  # 去除文件末尾多余换行符,避免认证失败

def start(update, context):
    update.message.reply_text("Merhaba")

def handle_left_member(update, context):
    left_user = update.message.left_chat_member
    context.bot.kick_chat_member(chat_id=update.message.chat_id, user_id=left_user.id)

updater = Updater(TOKEN, use_context=True)
disp = updater.dispatcher

disp.add_handler(CommandHandler("start", start))
left_member_handler = MessageHandler(Filters.status_update.left_chat_member, handle_left_member)
disp.add_handler(left_member_handler)

updater.start_polling()
updater.idle()

内容的提问来源于stack exchange,提问作者Kin Frayt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:55:21