如何使用反应嵌入菜单循环

2023-12-06

我正在尝试做什么:学习为我的discord.py 机器人制作一个合适的帮助菜单ctx.message.author根据给出的反应对消息做出反应。机器人会检查他们是否已做出反应,然后编辑消息。如果ctx.message.author如果不反应,则返回到第一个菜单(menuu)。

问题):我不知道如何循环,直到timeout用尽。我也不确定如何检查用户是否对消息没有反应。

Error(s): 没有错误。

@client.command()
async def menuu(ctx):
    #what reaction goes where menuu
    menuu = discord.Embed(title="menuu", color=0x8d78d9)
    menuu.add_field(name="Topics: ", value="React with <:oneone:772681764321099827>", inline=False)
    menuu.add_field(name="Games: ", value="React with <:twotwo:772681764271423528>", inline=False)
    menuu.add_field(name="Misc: ", value="React with <:threethree:772681763939024897>", inline=False)
    menuu.set_footer(text=f"Ensure you drink some water today, you're doing so well {ctx.message.author}")
    #topics menuu
    topics = discord.Embed(title="Topics", color=0x8d78d9)
    topics.add_field(name="`bl!topic`: ", value="Friend makers and ice breakers", inline=False)
    topics.add_field(name="`bl!debate`: ", value="menuu not complete sorry haha")
    topics.set_footer(text="Never forget to believe in yourself, because I do!")
    #game menuu
    games = discord.Embed(title="Games", color=0x8d78d9)
    games.add_field(name="`nothing here`: ", value="Technically there is but still", inline=False)
    games.set_footer(text="Eat some food, take a nap, good luck on the journey ahead")
    #misc menuu
    misc = discord.Embed(title="Misc", color=0x8d78d9)
    misc.add_field(name="`miscmimscimc`: ", value="aeaeaeaeaeaeeae", inline=False)
    misc.set_footer(text="You look lovely today, you're rocking this look")
    msg = await ctx.send(embed=menuu)#send message
    #add reactions things
    await msg.add_reaction("<:oneone:772681764321099827>")
    await msg.add_reaction("<:twotwo:772681764271423528>")
    await msg.add_reaction("<:threethree:772681763939024897>")
    await msg.add_reaction("<:stop:773054889685024768>")

    try:
        def check(reaction, user):
            return user == ctx.message.author and str(reaction.emoji) in ["<:oneone:772681764321099827>","<:twotwo:772681764271423528>","<:threethree:772681763939024897>"]
        reaction, user = await client.wait_for("reaction_add", timeout=60, check=check)

        if str(reaction.emoji) == "<:oneone:772681764321099827>":
            await msg.edit(embed=topics)
            await msg.remove_reaction("<:oneone:772681764321099827>", ctx.message.author)

        if str(reaction.emoji) == "<:twotwo:772681764271423528>":
            await msg.edit(embed=games)
            await msg.remove_reaction("<:twotwo:772681764271423528>", ctx.message.author)

        if str(reaction.emoji) == "<:threethree:772681763939024897>":
            await msg.edit(embed=misc)
            await msg.remove_reaction("<:threethree:772681763939024897>", ctx.message.author)

        if str(reaction.emoji) == "<:stop:773054889685024768>":
            await msg.edit(embed=menuu)
            await msg.remove_reaction("<:stop:773054889685024768>", ctx.message.author)       
            
    except asyncio.TimeoutError:
        await ctx.send("Time has run out, message no work now")
    ```

我创建了一个足够容易使用的“图书管理器”。如果您将所有菜单放入称为页面的列表中,则可以使用此功能:

async def createbook(bot, ctx, title, pages, **kwargs):

        header = kwargs.get("header", "") # String
        results = kwargs.get("results", 0) # Int
        
        pagenum = 1

        def get_results():
            results_min = (pagenum - 1) * 8 + 1
            if pagenum == len(pages): results_max = results
            else: results_max = pagenum * 8
            return f"Showing {results_min} - {results_max} results out of {results}"

        pagemax = len(pages)
        if results:
            header = get_results()
            if len(pages) == 0: pagemax = 1

        embed = discord.Embed(title=title, description=f"{header}\n\n{pages[pagenum - 1]}", colour=0xF42F42)
        embed.set_footer(text=f"Page {pagenum}/{pagemax}", icon_url=fboturl)
        msg = await ctx.send(embed=embed)
        
        await msg.add_reaction("⬅️")
        await msg.add_reaction("➡")
        
        def check(reaction, user):
            return user == ctx.author and str(reaction.emoji) in ["⬅️", "➡"]
    
        while True:
            try:
                reaction, user = await bot.wait_for("reaction_add", timeout = 60, check=check)
                await msg.remove_reaction(reaction, user)
                
                if str(reaction.emoji) == "⬅️":
                    pagenum -= 1
                    if pagenum < 1: pagenum = len(pages)
                        
                elif str(reaction.emoji) == "➡":
                    pagenum += 1
                    if pagenum > len(pages): pagenum = 1

                header = get_results() if results else header
                if str(reaction.emoji) == "⬅️" or str(reaction.emoji) == "➡":
                    embed = discord.Embed(title=title, description=f"{header}\n\n{pages[pagenum - 1]}", colour=0xF42F42)
                    embed.set_footer(text=f"Page {pagenum}/{len(pages)}", icon_url=fboturl)
                    await msg.edit(embed=embed)
            except:
                header = get_results() if results else header
                embed = discord.Embed(title="FBot Server Status", description=f"{header}\n\n{pages[pagenum - 1]}", colour=0xF42F42)
                embed.set_footer(text=f"Request timed out", icon_url=fboturl)
                await msg.edit(embed=embed)
                break

(我避免使用数字纯粹是因为超过 10 页的书管理起来很烦人)

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

如何使用反应嵌入菜单循环 的相关文章

  • 使用三个一维数组绘制等值线图

    正如标题所示 我想使用三个一维数组绘制等高线图 这么说吧 x np array 1 2 3 and y np array 1 2 3 and z np array 20 21 45 为了在 matplotlib 中绘制等高线图 我对x an
  • 如何打印前面有一定数量空格的整数?

    C has printf Xd Y 它只打印整数 X 并使其在控制台窗口上占据 Y 空格 例如 printf 3d 10 console 10 printf 5d 5 console 5 我如何在 python 3 中使用它 This pr
  • 需要根据数据框中的行号应用不同的公式

    我正在努力在数据框中找到某种移动平均值 该公式将根据正在计算的行数而变化 实际场景是我需要计算Z列 Edit 2 以下是我正在使用的实际数据 Date Open High Low Close 0 01 01 2018 1763 95 176
  • 函数名称未定义

    我有一段代码 看起来像这样 if name main main def main print hello 但是 当我尝试运行此代码时 出现错误 NameError 名称 main 未定义 我是否没有在函数 def main 的第一行定义名称
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • 在 Python 中延迟转置列表

    所以 我有一个延迟生成的可迭代的三元组 我试图弄清楚如何将其转换为 3 个可迭代对象 分别由元组的第一个 第二个和第三个元素组成 然而 我希望这件事能懒惰地完成 所以 举例来说 我希望 1 2 3 4 5 6 7 8 9 将变成 1 4 7
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 如何在plotly(python)中的刻度标签和图形之间添加空格?

    如果我使用绘图创建水平条形图 则每个条形的标签都与图表相对应 我想在标签和图表之间添加一些空间 填充 边距 我怎样才能做到这一点 Example import plotly offline as py import plotly graph
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • argparse 不检查位置参数

    我正在创建一个脚本 它使用 argparse 接受位置参数和可选参数 我已经阅读了 Doug 的教程和 python 文档 但找不到答案 parser argparse ArgumentParser description script t
  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • 使用 Python-VLC 的 PyInstaller:无属性“media_player_new”错误

    我使用 Python VLC 创建视频播放器 并使用 PyInstaller 在 Windows 10 计算机上生成可执行文件 最初 它给了我错误 Import Error Failed to load dynlib dll libvlc
  • 为什么我无法杀死 k8s pod 中的 python 进程?

    我试图杀死一个 python 进程 ps aux grep python root 1 12 6 2 1 2234740 1332316 Ssl 20 04 19 36 usr bin python3 batch run py root 4
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前

随机推荐

  • 如何在 CollapsingToolbarLayout 中使用 TabLayout 和 Toolbar?

    我正在看克里斯班斯 奶酪广场我试图将带有工具栏的 TabLayout 放入 CollapsingToolbarLayout 中 这是我的代码
  • 如何使用 MVC 3 和 Entity Framework Code First 建立多对多关系的 ModelBind?

    我在 MVC 3 应用程序中遇到了同样的问题 我有一个创建新产品的视图 并且该产品可以分配给一个或多个类别 这是我的 EF Code First 模型类 public class Product public int ProductID g
  • 观察者可以观察到多个可观察对象吗?

    试图找到一个这样的例子 有可能我没有采取正确的方法 或者我的思想过度简化了观察者模式的概念 我想创建一个类来控制来自 Web 服务的消息 并且我希望该类监视许多其他操作的更改 我见过的观察者模式示例表明许多观察者正在观看单个可观察的内容 我
  • 我需要获取 csv 列中的值(分组)计数

    我需要计算第一列的值 这些 ID 可能存在于我收到的任何给定 csv 文件中 也可能不存在 因此 我需要循环遍历 csv 文件 查看第一列 如果不存在 则将其添加到保持数组 PWSs 中 或者如果我已经添加了该保持数组 则增加该保持数组中的
  • OpenCV - NDK 更新后对“cv::CascadeClassifier::detectMultiScale()”的未定义引用

    昨天我将 Android Studio 包含 NDK 更新到版本17 0 4754217从那时起我就无法再运行我的应用程序了 当我尝试在更新后重新运行代码时 它给了我错误ABIs mips64 armeabi mips are not su
  • android 获取文本外观运行时

    我已经重写了 textview 类 并且我想在文本外观很小时执行一些操作 如何检查xml布局文件设置的文本外观 我找到了一个解决方法 private int getTextAppearance AttributeSet attrs int
  • 获取在 page_init 中触发回发的控制

    我有一个包含动态创建的下拉列表的网格视图 当更改下拉值并在网格上进行批量更新 btnUpdate click 时 我必须在页面初始化中创建控件 以便它们可用于视图状态 但是 我还有其他几个按钮也会导致回发 并且我不想在页面初始化中创建控件
  • 在生成语句中格式化日期

    在 Pig 中 我有一个语句 基本上将日期附加到我生成的值中 Data FOREACH Input GENERATE CurrentTime FLATTEN group COUNT guid oas Cnt 输出给了我日期2013 05 2
  • 正则表达式匹配-Java

    我正在从以下格式的文件中获取输入 int1 int2 int3 int4 现在我想在我的Java代码中读取int1 int2 int3和int4 我怎样才能用java中的正则表达式匹配来做到这一点 谢谢 String ints 2 3 4
  • 将服务器日志记录到一个文件,将 SQL 日志记录到另一个文件

    我想使用 Log4J 将所有服务器相 关日志 例如启动和关闭 记录到一个文件 并将所有 Hibernate SQL 相关日志记录到另一个文件 我正在尝试过滤所有不相关的日志以仅查看 SQL 查询 如果有办法实现的话 有什么想法或建议吗 Th
  • 使用 MVC 和 jQuery 进行内联客户端验证

    我设置了一个简单的示例来显示 jquery UI 对话框中的表单 并希望在该表单上启用内联客户端验证 然后我将脚本添加到我的母版页中 assets js jquery 1 4 3 min js gt gt assets js jquery
  • 带有 roboguice 抛出异常的简单 Android 应用程序

    我有一个非常简单的应用程序 可以运行 但是当我添加 roboguice 时 它 会抛出异常 java lang RuntimeException 无法实例化应用程序 com MyFirstApp MyFirstApplication jav
  • 如何将 Roman Nuriks Wizard Pager 审核中的数据放入数据库?

    好吧 我知道以前已经问过这个问题 但问题和答案都对我的情况没有帮助 我需要做的只是从向导末尾的审阅页面获取所有数据并将其放入我的 SQLite 数据库中 以便我将来可以在我的应用程序中使用它 我什至不确定在这种情况下我应该上哪门课 我真的希
  • Android无法从ListView Row中按钮的onClick中找到方法

    我有一个从自定义适配器填充的 ListView 每行有 1 个按钮 在 xml 中 按钮已传递 onClick 属性 我只有 xml 没有设置任何 OnClickListeners 另请注意 public void myMethod Vie
  • POSIX 正则表达式 - 零个或一个括号表达式匹配?

    我正在尝试使用正则表达式来解析源文件并搜索以 LOG 一词开头的 C 程序中的函数 后面可能会或可能不会出现类 1248AFM 中的第二个字符 然后后面跟着一个左括号 这是在 Windows 下使用 mingw 开发的 但最终将使用 gcc
  • YouTube API v3 错误:403(playlistItemsNotAccessible)

    这是我在 stackoverflow 上的第一篇文章 请让我知道我是否应该重新表述问题和 或提供有关该问题的更多详细信息 使用上提供的 javascript 示例https developers google com youtube v3
  • WebGL/OpenGL:性能比较

    出于教育目的 我需要比较 WebGL 与 OpenGL 的性能 我有两个用 WebGL 和 OpenGL 编写的等效程序 现在我需要获取它们的帧速率并进行比较 在 JavaScript 中我使用requestAnimationFrame动画
  • 如何从各个部分(例如文件夹路径、名称和扩展名)创建文件的完整路径?

    我需要将文件路径名传递给模块 如何从目录名 基本文件名和文件格式字符串构建文件路径 该目录在调用时可能存在也可能不存在 例如 dir name home me dev my reports base filename daily repor
  • 迭代时浮点数不精确

    我有一个函数 可以根据范围内的值计算 3d 空间中的点 0 1 我面临的问题是 二进制浮点数不能精确表示 1 函数中计算的数学表达式能够计算出以下值 t 1 0 但该值永远不会被函数接受 因为它在计算之前检查是否符合范围 curves er
  • 如何使用反应嵌入菜单循环

    我正在尝试做什么 学习为我的discord py 机器人制作一个合适的帮助菜单ctx message author根据给出的反应对消息做出反应 机器人会检查他们是否已做出反应 然后编辑消息 如果ctx message author如果不反应