Как я могу отправить этот список как одно сообщение в discord.py ?

#python #discord.py #discord.py-rewrite

#python #discord.py #discord.py-переписать

Вопрос:

Я только что попытался добавить команду listrole в моем боте discord, в которой перечислены все пользователи с определенной ролью. Однако я не могу найти решение, при котором мой бот отправляет весь список как одно сообщение, он отправляет каждого отдельного участника в списке как одно сообщение, что раздражает большое количество участников.

Вот мой код до сих пор:

 @bot.command()
@commands.has_permissions(administrator=True)
async def listrole(ctx, role:discord.Role):
    members = role.members
    if len(members) > 100:
        await ctx.send("Too many members to list")
    else:
        for member in members:
            memberlist = ''.join(f"{member.display_name}#{member.discriminator}")
            await ctx.send(memberlist)
 

Помощь очень ценится, я очень новичок в Python в целом

Комментарии:

1. Кроме того, str(member) будет присвоено имя пользователя пользователя дискриминатор

Ответ №1:

Определите свой memberlist перед циклом и добавьте к нему. Затем объедините все элементы в этом списке в одну длинную строку, разделенную символами новой строки, и отправьте ее после завершения цикла:

 memberlist = []
for member in members:
    memberlist.append(f"{member.display_name}#{member.discriminator}")
await ctx.send('n'.join(memberlist))
 

Комментарии:

1. прежде всего, спасибо за вашу помощь. однако, когда я делаю это, мой бот сначала отправляет 1 сообщение, содержащее 1 участника, затем 1 сообщение, содержащее 2 участника, и так далее. есть ли что-нибудь, чего мне не хватает? редактировать: хорошо, да, я тупой, я вставил ctx.send в свой цикл for! теперь работает, еще раз спасибо за вашу помощь!

2. Рад, что сработало. Я добавил акцент на том, что это должно быть после цикла на случай, если кто-нибудь еще увидит этот ответ в будущем.