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 如何制作掷骰子命令 的相关文章

  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • 错误: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