#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. Рад, что сработало. Я добавил акцент на том, что это должно быть после цикла на случай, если кто-нибудь еще увидит этот ответ в будущем.