#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: выборка больше генеральной совокупности или отрицательна». И нет, я не упоминаю больше пользователей, чем количество участников сервера.