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'
错误原因及修正方案
核心错误点
- 回调函数参数顺序错误:启用
use_context=True是python-telegram-bot v12+的上下文模式,回调函数参数顺序应为(update, context),而非旧版的(bot, update)。你的handle_left_member参数顺序搞反,导致把CallbackContext对象当成Update对象调用,触发属性错误。 start函数参数错误:start函数的第二个参数应为context,不是source,否则会触发类似错误。- API方法命名错误:v12+版本中,封禁用户的方法是
kick_chat_member()(下划线命名),旧的驼峰命名kickChatMember已被废弃。 - 离开成员属性路径错误:离开成员信息属于消息状态更新,需通过
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
相关产品推荐
相关产品推荐

