使用python-telegram-bot遇TypeError:delete_message缺少self参数
问题解决:TypeError: delete_message() missing 1 required positional argument: 'self'
错误原因
你遇到的错误根源有两个:
Bot.delete_message()是实例方法,必须通过已经初始化的Bot实例调用,直接用Bot类调用会触发缺少self参数的报错。update.message.reply_text()返回的是Message对象,不是字典,你用msg_info['message_id']这种字典式访问是错误的,应该用对象属性的方式获取值。
修复后的代码
updater = Updater(BOT_TOKEN, use_context=True) dispatcher = updater.dispatcher def start(update: Update, context: CallbackContext): # reply_text返回Message对象,直接通过属性访问消息信息 msg_info = update.message.reply_text('Hi') print(msg_info) msg_id = msg_info.message_id chat_id = msg_info.chat.id # 使用context中已初始化好的bot实例调用删除方法 status = context.bot.delete_message(chat_id=chat_id, message_id=msg_id) print(status) def handle_inputs(update: Update, context: CallbackContext): comd = update.message.text if comd == '/start': start(update, context) else: update.message.reply_text("Sorry '%s' is not a valid command" % update.message.text) def main(): updater.dispatcher.add_handler(MessageHandler(Filters.text, handle_inputs)) updater.start_polling() if __name__ == '__main__': main()
关键修改说明
- 移除了多余的
from telegram import Bot导入,直接使用context.bot——这是python-telegram-bot在context模式下自动提供的已初始化Bot实例,无需手动创建。 - 把字典式的
msg_info['message_id']、msg_info['chat']['id']改为对象属性访问msg_info.message_id、msg_info.chat.id,符合Message对象的正确使用方式。
内容的提问来源于stack exchange,提问作者Sain
相关产品推荐
相关产品推荐

