我正在为我的 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
希望有人能帮忙!
答案 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]
)