如何发送Telegram骰子?Discord机器人代码报错AttributeError: 'Update' object has no attribute 'send_dice'求助
解决Telegram机器人发送骰子的AttributeError问题
我来帮你搞定这个Telegram机器人发骰子的问题~你遇到的AttributeError: 'Update' object has no attribute 'send_dice'主要是两个小细节没处理对,咱们一步步修正:
问题1:错误的方法调用格式
你写的bot.send_dice.message(chat_id = update.message.chat_id)是错的——send_dice本身就是Telegram Bot实例的直接方法,不需要额外加.message后缀。正确的调用逻辑是直接调用bot.send_dice()并传入聊天ID参数。
问题2:上下文模式的参数不匹配
你初始化Updater时用了use_context=True,这意味着启用了Telegram Bot API的新上下文模式。在这个模式下,命令处理函数的参数应该是(update, context),而不是旧模式的(bot, update)。想要调用Bot的方法,你得通过context.bot来获取Bot实例。
修正后的完整可运行代码
from telegram import Update from telegram.ext import Updater, CommandHandler, CallbackContext def dice(update: Update, context: CallbackContext): # 通过context获取Bot实例,调用send_dice发送骰子 context.bot.send_dice(chat_id=update.message.chat_id) # 替换成你的实际API密钥 API_KEY = "你的Telegram机器人API密钥" updater = Updater(API_KEY, use_context=True) dp = updater.dispatcher dp.add_handler(CommandHandler('dice', dice)) # 启动机器人的轮询 updater.start_polling() updater.idle()
额外补充
如果你更习惯旧模式,可以把
Updater初始化的use_context=True改成use_context=False,然后调整函数参数和调用:def dice(bot, update): bot.send_dice(chat_id=update.message.chat_id) updater = Updater(API_KEY, use_context=False)不过官方更推荐用上下文模式,它支持更多新功能,兼容性也更好。
如果你想指定骰子的表情类型(比如🎲、🎯、🎳这些),可以给
send_dice加emoji参数:context.bot.send_dice(chat_id=update.message.chat_id, emoji="🎯")
内容的提问来源于stack exchange,提问作者heghog
相关产品推荐
相关产品推荐

