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

Discord.py开发赌场机器人输出随机选项到频道引发崩溃如何解决

问题原因排查

你的代码存在3个直接导致崩溃/逻辑错误的问题:

  • 类型错误:choice和value都是整数类型,不能直接和字符串用+拼接,Python会直接抛出类型错误导致进程崩溃
  • 随机数重复生成:你已经提前生成了机器人掷出的结果value,但判断是否中奖时又重新调用了一次random.choice,导致判断用的结果和最后发给用户的结果完全不一致
  • 语法错误:发送消息的语句里错误给value套了一层{},会把它转为集合类型,也会导致拼接时报错
  • 缺少边界处理:没有处理用户输入的choice不在1-6范围、用户赌输的分支逻辑,可能触发未定义行为

修正后代码

async def roll(
        self,
        ctx: commands.Context,
        choice: int,
        bet: int=DEFAULT_BET
    ):
        self.check_bet(ctx, bet)
        choices = range(1,7) # 可选范围1-6
        bot_roll = random.choice(choices) # 仅生成一次机器人的掷骰结果,保证前后逻辑一致
        if choice not in choices:
            await ctx.send(f"你输入的选项不合法,请选择1-6之间的数字")
            return
        # 直接用已生成的结果判断是否中奖
        if bot_roll == choice:
            self.economy.add_money(ctx.author.id, bet*6)
            await ctx.send(f"你选择了: {choice}, 我掷出了 {bot_roll},恭喜你中奖!")
        else:
            # 此处替换为你自己实现的扣减余额逻辑即可
            self.economy.subtract_money(ctx.author.id, bet)
            await ctx.send(f"你选择了: {choice}, 我掷出了 {bot_roll},很遗憾你输掉了本轮赌局")

修改说明

  • 用Python的f-string格式化输出字符串,不需要手动做类型转换,也不会出现拼接错误
  • 全程只生成一次机器人的掷骰结果,保证判断逻辑和发送给用户的结果一致
  • 补全了非法输入、赌输的分支处理,避免出现无返回的异常情况
  • 调整了变量命名可读性更高,避免逻辑混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:00