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

如何发送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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:27:37