<p>此方法将使用<a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.wait_for" rel="noreferrer">^{<cd1>}</a>,如果您有任何其他想法,可以很容易地进行调整</p>
<h2>范例</h2>
<pre class="lang-py prettyprint-override"><code>@bot.command()
async def pages(ctx):
contents = ["This is page 1!", "This is page 2!", "This is page 3!", "This is page 4!"]
pages = 4
cur_page = 1
message = await ctx.send(f"Page {cur_page}/{pages}:\n{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 bot.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
# ending the loop if user doesn't react after x seconds
</code></pre>
<p>如果您的编辑器不支持直接粘贴到表情符号中,您可以使用<a href="http://xahlee.info/comp/unicode_emoticons.html" rel="noreferrer">this one</a>之类的网站来查找表情符号的unicodes。在本例中,向前箭头为<code>\u25c0</code>,向后箭头为<code>\u25b6</code></p>
<p>除此之外,你应该可以走了!该消息在60秒不活动后(即,没有人对箭头作出反应)将自动删除,但如果您希望删除前的时间更长,只需更改数字即可</p>
<p>或者,您可以添加第三个表情符号,例如十字架,它可以根据需要删除消息</p>
<hr/>
<p><strong>参考文献:</strong></p>
<ul>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.add_reaction" rel="noreferrer">^{<cd4>}</a></li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.remove_reaction" rel="noreferrer">^{<cd5>}</a></li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.wait_for" rel="noreferrer">^{<cd6>}</a></li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.edit" rel="noreferrer">^{<cd7>}</a></li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.delete" rel="noreferrer">^{<cd8>}</a></li>
<li><a href="https://docs.python.org/3/library/asyncio-exceptions.html#asyncio.TimeoutError" rel="noreferrer">^{<cd9>}</a>-用户未及时作出反应时的例外情况</li>
</ul>