@bot.command(name='mlist', help='List of members.')
async def mlist(ctx):
nl = "\n"
await ctx.send(f'The member list is:\n{nl.join(memberList())}')
現在のメンバーのリストをチャネルに送信する上記のコードがあります。不和メッセージの制限を超えるリストを作成し始めるまでは、問題なく機能しました。
私が見つけたものから、これを処理するための2つのオプションがあります。
私の目標を達成するための最良の方法について何かアドバイスはありますか?
これを達成する方法は、メンバーのいくつかの「ページ」をめくることができるいくつかの反応を含むメッセージを作成することです。
アイデアは使用しますClient.wait_for()
:
import asyncio
import math
@bot.command()
async def members(ctx):
members = [str(m) for m in ctx.guild.members]
per_page = 10 # 10 members per page
pages = math.ceil(len(members) / per_page)
cur_page = 1
chunk = members[:per_page]
linebreak = "\n"
message = await ctx.send(f"Page {cur_page}/{pages}:\n{linebreak.join(chunk)}")
await message.add_reaction("◀️")
await message.add_reaction("▶️")
active = True
def check(reaction, user):
return user == ctx.author and str(reaction.emoji) in ["◀️", "▶️"]
# or you can use unicodes, respectively: "\u25c0" or "\u25b6"
while active:
try:
reaction, user = await bot.wait_for("reaction_add", timeout=60, check=check)
if str(reaction.emoji) == "▶️" and cur_page != pages:
cur_page += 1
if cur_page != pages:
chunk = members[(cur_page-1)*per_page:cur_page*per_page]
else:
chunk = members[(cur_page-1)*per_page:]
await message.edit(content=f"Page {cur_page}/{pages}:\n{linebreak.join(chunk)}")
await message.remove_reaction(reaction, user)
elif str(reaction.emoji) == "◀️" and cur_page > 1:
cur_page -= 1
chunk = members[(cur_page-1)*per_page:cur_page*per_page]
await message.edit(content=f"Page {cur_page}/{pages}:\n{linebreak.join(chunk)}")
await message.remove_reaction(reaction, user)
except asyncio.TimeoutError:
await message.delete()
active = False
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加