@vlad246

Discord.py Как сделать рандом с отдельными пользователями с ролями?

У меня есть код с рандомом для ролей но нужно чтобы он не рандомил указаных ролей например по id
Сам код:
@client.command()
@commands.has_permissions(administrator = True)
async def random(ctx, members, role_name):
    await ctx.message.delete()
    await ctx.send('Бот начал рандом...')
    memberlist = []
    for member in ctx.message.guild.members:
        memberlist.append(member)
    Rand_role = discord.utils.get(ctx.message.guild.roles, name = role_name)
    for i in range(int(members)):
        winner = choice(memberlist)
        await ctx.send(f'{winner} попал на рандоме')
        for i in ctx.message.guild.members:
            if i == winner:
                await i.add_roles(Rand_role)

Если у пользователя есть указаная роль в коде то его не будет выбирать рандом, но если буду рандомить указаную роль в коде - то он будет рандомить ту указаную роль, и есть кое какой минус то что он может повторить в рандоме пользователя которые уже попал на рандоме, не нужно чтобы он повторял человека которые он уже попал на рандоме.
Заранее спасибо!
  • Вопрос задан
  • 936 просмотров
Пригласить эксперта
Ответы на вопрос 1
Два варианта которые вижу я:
1. Рекурсивная функция
async def give_me_not_in_roles(members, roles): # members: List[discord.Member], roles: List[discord.Role]
    member = random.choice(members)
    if any(role in member.roles for role in roles):
        return await give_me_not_in_roles(members, roles)
    return member

@client.command(name="random")
@commands.has_permissions(administrator = True)
async def rnd(ctx, members: commands.Greedy[discord.Member], *roles: discord.Role):  # https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.Greedy
    m = await give_me_not_in_roles(members, roles)
    await ctx.send(f"{m.mention} won a whole nothing!")


2. Составлять список всех кто не в указанных ролях:
@client.command(name="random")
@commands.has_permissions(administrator = True)
async def rnd(ctx, members: commands.Greedy[discord.Member], *roles: discord.Role):  # https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.Greedy
    filtered = [m for m in members if not any(m in r.members for r in roles)]
    m = random.choice(filtered)
    await ctx.send(f"{m.mention} won a whole nothing!")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы