动态帮助命令 - Discord.py

时间:2021-07-05 16:37:00

标签: python discord discord.py bots

我正在为我的 Discord 机器人制作一个“动态”帮助菜单命令。现在我的命令可以处理“正常”消息。但我想使用嵌入。所以,让我解释一下。 基本上,我执行 re!help 并且机器人发送一个嵌入。然后我添加两个反应(“◀”和“▶”),如果我点击一个反应(例如“▶”),嵌入的命令会更新(我希望嵌入的标题和描述都被更新)。我希望我说的很清楚,如果你不明白我想要什么,请告诉我,我会尝试再次解释。无论如何,这是我的代码:

@client.command()
async def help(ctx):
    contents = [
"""
text 1
""",
"""
text 2
""",
"""
text 3    
""",
"""
text 4
"""]
    pages = 4
    cur_page = 1
    message = await ctx.send(f"{contents[cur_page-1]}")
    # getting the message object for editing and reacting

    await message.add_reaction("◀️")
    await message.add_reaction("▶️")

    def check(reaction, user):
        return user == ctx.author and str(reaction.emoji) in ["◀️", "▶️"]
        # This makes sure nobody except the command sender can interact with the "menu"

    while True:
        try:
            reaction, user = await client.wait_for("reaction_add", timeout=60, check=check)
            # waiting for a reaction to be added - times out after x seconds, 60 in this
            # example

            if str(reaction.emoji) == "▶️" and cur_page != pages:
                cur_page += 1
                await message.edit(content=f"Page {cur_page}/{pages}:\n{contents[cur_page-1]}")
                await message.remove_reaction(reaction, user)

            elif str(reaction.emoji) == "◀️" and cur_page > 1:
                cur_page -= 1
                await message.edit(content=f"Page {cur_page}/{pages}:\n{contents[cur_page-1]}")
                await message.remove_reaction(reaction, user)

            else:
                await message.remove_reaction(reaction, user)
                # removes reactions if the user tries to go forward on the last page or
                # backwards on the first page
        except asyncio.TimeoutError:
            await message.delete()
            break

希望有人能帮忙!

1 个答案:

答案 0 :(得分:0)

不要将 contents 设为字符串列表,而是将其设为嵌入列表,然后适当地编辑消息

contents = [
    discord.Embed(title="page 1"), 
    discord.Embed(title="page 2"), 
    discord.Embed(title="page 3"),
    discord.Embed(title="page 4")
]

...

await message.edit(
    content=f"Page {cur_page}/{pages}",
    embed=contents[cur_page - 1]
)