команда массирования — discord.py

#python #python-3.x #discord #discord.py

#python #python-3.x #Discord #discord.py

Вопрос:

Я пытаюсь создать команду, которая получает 5 случайных людей с сервера и упоминает их. Что у меня есть до сих пор, так это:

 @bot.command()
async def massping(ctx):
    await ctx.message.delete()
    user = choice(ctx.message.channel.guild.members)
    user2 = choice(ctx.message.channel.guild.members)
    user3 = choice(ctx.message.channel.guild.members)
    user4 = choice(ctx.message.channel.guild.members)
    user5 = choice(ctx.message.channel.guild.members)

    message = await ctx.send(f'{user.mention}{user2.mention}{user3.mention}{user4.mention}{user5.mention}')
    await message.delete()
  

Проблема с этим заключается в том, что иногда он дважды проверяет одного и того же человека. Есть ли какой-нибудь способ обойти это, чтобы я мог убедиться, что он всегда отправляет запросы 5 разным людям?

Любая помощь приветствуется.

Ответ №1:

Guild.members возвращает список объектов-членов, который можно использовать random.sample для возврата уникальных элементов из списка.

 async def ping(ctx, num: int):
    members = [m.mention for m in ctx.guild.members]
    rand = random.sample(members, num)
    await ctx.send("n".join(rand))
  

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

1. Есть ли причина, по которой это работает только на некоторых серверах? На некоторых серверах эта команда не работает для моего бота — получение этой ошибки «Команда вызвала исключение: ValueError: выборка больше генеральной совокупности или отрицательна». И нет, я не упоминаю больше пользователей, чем количество участников сервера.