Discord.py 如何制作掷骰子命令

2023-12-05

大家好,我正在用 Python 编写一个 Discord 机器人,我想编写一个掷骰子命令。我认为我做错了什么。这是代码:

@client.command()
async def rolldice(ctx):
    dice4 = ["1","2","3","4"]
    dice6 = ["1","2","3","4","5","6"]
    dice8 = ["1","2","3","4","5","6","7","8"]
    dice10 = ["1","2","3","4","5","6","7","8","9","10"]
    dice12 = ["1","2","3","4","5","6","7","8","9","10","11","12"]
    dice20 = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
    
    message = await ctx.send("Choose a number:\n**4**, **6**, **8**, **10**, **12**, **20** ")
    
    def check4(m):
        return m.author == ctx.author and m.content == "4"

    try:
        await client.wait_for('message', check=check4, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice4)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")

    def check6(m):
        return m.author == ctx.author and m.content == "6"

    try:
        await client.wait_for('message', check=check6, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice6)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")
    
    def check8(m):
        return m.author == ctx.author and m.content == "8"

    try:
        await client.wait_for('message', check=check8, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice8)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")

    def check10(m):
        return m.author == ctx.author and m.content == "10"

    try:
        await client.wait_for('message', check=check10, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice10)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")

    def check12(m):
        return m.author == ctx.author and m.content == "12"

    try:
        await client.wait_for('message', check=check12, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice12)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")

    def check20(m):
        return m.author == ctx.author and m.content == "20"

    try:
        await client.wait_for('message', check=check20, timeout=30.0)
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.choice(dice20)}**")
        
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't answer in **30** second!")

当我键入命令并选择数字 4 时,我的命令确实有效,但当我尝试另一个数字(例如 6)时,它不起作用。我究竟做错了什么?请帮忙。


那是因为它检查4首先,然后6,依此类推...即使在您发送后4,它会检查6, 8等等..当你发送时6,它会检查4首先,然后6等等..为什么你不尝试这样的事情呢:

@client.command()
async def rolldice(ctx):
    message = await ctx.send("Choose a number:\n**4**, **6**, **8**, **10**, **12**, **20** ")
    
    def check(m):
        return m.author == ctx.author

    try:
        message = await client.wait_for("message", check = check, timeout = 30.0)
        m = message.content

        if m != "4" and m != "6" and m != "8" and m != "10" and m != "12" and m != "20":
            await ctx.send("Sorry, invalid choice.")
            return
        
        coming = await ctx.send("Here it comes...")
        time.sleep(1)
        await coming.delete()
        await ctx.send(f"**{random.randint(1, int(m))}**")
    except asyncio.TimeoutError:
        await message.delete()
        await ctx.send("Procces has been canceled because you didn't respond in **30** seconds.")

Note:我建议使用await asyncio.sleep(1)代替time.sleep(1)。这样其他命令仍然有效。记得导入asyncio在这种情况下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Discord.py 如何制作掷骰子命令 的相关文章

随机推荐

  • 错误:allowDefinition='MachineToApplication' 超出应用程序级别

    关于这个主题有大量的 SO 帖子 到目前为止 解决方案似乎是将 IIS 中的目录配置为应用程序 另一个常见的解决方案是从根文件夹中删除备份的 web config 文件 我的问题有所不同 因为我在 IIS Express 上运行 因此无法将
  • 如何从 QML 监听 C++ 信号?

    我有一个我称之为 C 服务 的东西 我想将其接口公开给 QML 我正在尝试使用QQmlContext s setContextProperty将对象链接到 QML 并从QML Connections block QML 不会像之前我没有在
  • 事件处理程序和侦听器以及事件冒泡和事件捕获

    我对 JavaScript 中的 事件监听器 事件处理程序 事件冒泡 和 事件捕获 感到困惑 我在互联网上搜索并查看了不同的网站 但是 我仍然无法理解一些差异 甚至基本条件 As 本文表明 事件处理程序已创建并侦听事件 这是否意味着附加到
  • 从终端调用时使用默认的 Python 而不是 Anaconda 安装

    我最近安装了 Anaconda 版本的 Python 现在当我打字时python进入终端后 它会打开 Anaconda 发行版而不是默认发行版 如何让它使用命令的默认版本python在 Linux 上 Ubuntu 12 04 精确的穿山甲
  • Lint:如何忽略“ 未翻译为 <语言>”错误?

    我无法编译 调试我们的 Android 应用程序 因为本地化文件还不完美 我的 IDE 验证工具Lint创建错误说 newCardsOrderVals 未翻译为 ar bg ca cs 使用 Ant 编译 安装 运行工作正常 但我想使用我的
  • 是否可以在 firebase 上运行 graphql 订阅?

    我想将 GraphQL 订阅与 Firebase 云功能结合使用 在我之前的问题中 我描述了当我将代码部署到 Firebase 时 它 让我崩溃了 Could not connect to websocket endpoint 我什至无法手
  • 在 C++ 类中使用

    我想使用
  • 大量圆的碰撞检测

    What is the best way to check collision of huge number of circles It s very easy to detect collision between two circles
  • Laravel 嵌套数组验证器

    我使用 Laravel Validator 类对数组进行一些基本验证 我的数组 employee name name employee address address employee department name deptname em
  • iOS - setObject 与 Synchronize

    新手问题 如果我将一个对象设置到 NSUserDefault 中 我是否还需要同步以确保该对象永久返回到 NSUserDefault 数据库中 我想我要问的是 setobject 是将对象永久放回到数据库中还是放入需要同步以确保永久存储的临
  • 如何使 tr1::array 分配对齐内存?

    您可以分配一个 std vector 它通过定义自己的分配器来分配对齐的堆内存 您可以使用 declspecalign 在堆栈上分配 C 样式数组 但是你能声明一个 tr1 array 来保证索引零处的元素对齐吗 tr1 array and
  • Net Core:实体框架中的通用存储库主 ID 关键性能

    我们正在审查通用存储库模式中的两种不同方法 目前 想要将主键映射到 Id 这样做的目的是映射到使用 Id 的通用存储库接口 下面提供两种解决方案 FindPrimaryKey Properties 对性能有何影响 在尝试查找主键时是否会导致
  • Python requests 模块多线程

    有没有可能使用多处理接口来加速我的代码 问题是这个接口使用了map函数 它只适用于1个函数 但我的代码有3个功能 我尝试将我的功能合并为一个 但没有成功 我的脚本从文件中读取站点的 URL 并对其执行 3 个功能 For 循环使它非常慢 因
  • 对列列表执行不同的函数,并使用 data.table 自动生成新的列名称

    我的 Shiny 应用程序中有一个部分可以生成列表 列表的名称是dataframe我们将计算 列表项包含我们想要的计算 想要这样做 apply to all list names for listname column x 计算functi
  • 使用 PHP 读取文件 - fopen/fread

  • 求矩阵元素组合的最小和

    昨天我的一位朋友带着一个问题来找我寻求解决方案 问题 我有一个matrix n x m 我需要找出从这些矩阵元素中可以产生的最小总和 条件是 计数只能从左上角的单元格开始 和 应在右下单元格结束 该算法应该计算所有可能的路径 这样我就需要找
  • 返回每个其他元素的列表的方案过程

    虽然我认为我已经完成了 90 但在计划中实现这个程序时遇到了一些麻烦 不幸的是 我需要对此说得有点含糊 因为这是一项家庭作业 我要 A B C D 返回 B D 但我收到一个错误 指出 The object returned as an a
  • SFTP 的 .NET 开源代码? [复制]

    这个问题在这里已经有答案了 我用 google 搜索了很多 但找不到 NET 中 SFTP 的单个开源实现 我得到的只是 SFTP 的第 3 方组件 谁能帮助我在 NET 中实现 SFTP See 这个问题 and shrpssh 这是公认
  • Android - 将文本文件保存到哪里?

    我正在使用 Adob e AIR 构建一个 Android 应用程序 允许用户导入和导出 txt 文件 作为保存 txt 文件的默认路径的最佳文件夹是什么 Thanks 您应该将文件保存在外部 SD 卡上 只需在下面创建一个自己的目录环境
  • Discord.py 如何制作掷骰子命令

    大家好 我正在用 Python 编写一个 Discord 机器人 我想编写一个掷骰子命令 我认为我做错了什么 这是代码 client command async def rolldice ctx dice4 1 2 3 4 dice6 1