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

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(使用前将#替换为@)

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

随机推荐

  • 如何在 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如果不反应