discord.py remove_roles не работает - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть бот для авто разрешения для Fortnite KD Ranking. Это работает как;

Если пользователь имеет 1+, бот KD назначит пользователю «Bronz». Пермь.

Если пользователь имеет 1,5+, бот KD назначит ему «Gümüş» Пермь.

Если у пользователя есть 2+, бот KD назначит ему «Altın» Пермь.

и это работает как шарм. НО. Бот должен убрать старую роль, когда он занял очередную перми. Я имею в виду, если пользователь повысит рейтинг «Altın». Старая пермская "Gümüş" должна быть удалена, но remove.roles не работает.

Вот несколько кодов для этих строк:

    for list in LISTE:
        roles = discord.utils.get(message.server.roles, name=list)
        await client.remove_roles(message.author, role)
    await client.add_roles(message.author, role)
elif ratio >= BRONZE_B and ratio <= BRONZE_E:
    role = discord.utils.get(message.server.roles, name=LISTE[2])

    embed=discord.Embed(color=0xcd8032)
    embed.add_field(name="Oyuncu", value=username, inline=True)
    embed.add_field(name="KD", value=str(ratio), inline=True)
    embed.add_field(name="Lig", value=LISTE[2], inline=True)
    await client.send_message(message.channel, embed = embed)

    embed2=discord.Embed(color=0x727272)
    embed2.add_field(name="Sonraki Lig", value=LISTE[3], inline=True)
    embed2.add_field(name="Hedef KD", value=str(SILVER_B), inline=True)
    embed2.set_footer(text="Lig verileriniz Fortnite KD değerlerinize göre güncellendi.")
    await client.send_message(message.channel, embed = embed2)

    for list in LISTE:
        roles = discord.utils.get(message.server.roles, name=list)
        await client.remove_roles(message.author, role)
    await client.add_roles(message.author, role)
elif ratio >= SILVER_B and ratio <= SILVER_E:
    role = discord.utils.get(message.server.roles, name=LISTE[3])

    embed=discord.Embed(color=0x727272)
    embed.add_field(name="Oyuncu", value=username, inline=True)
    embed.add_field(name="KD", value=str(ratio), inline=True)
    embed.add_field(name="Lig", value=LISTE[3], inline=True)
    await client.send_message(message.channel, embed = embed)

    embed2=discord.Embed(color=0xcfb223)
    embed2.add_field(name="Sonraki Lig", value=LISTE[4], inline=True)
    embed2.add_field(name="Hedef KD", value=str(GOLD_B), inline=True)
    embed2.set_footer(text="Lig verileriniz Fortnite KD değerlerinize göre güncellendi.")
    await client.send_message(message.channel, embed = embed2)

Если я использую replace_roles вместо remove_roles, кажется, что это работает, но на этот раз он удаляет ВСЕ роли и заменяет его на более высокий ранг.

Я имею в виду, когда я использую replace_roles, если Модератор проверяет свой ранг с моей командой бота /derece, бот берет все свои роли и дает ему более высокий ранг КД.

Я хочу, чтобы это работало так;

Если у пользователя есть 1+ бот KD, он назначит пользователю «Bronz».

Если пользователь имеет рейтинг до 1,5+ KD, удалите Bronz perm и дайте Silver perm

Если пользователь имеет рейтинг до 2+ KD, удалите Silver perm и дайте Gold perm

Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2018

Делать одновременно remove_roles и add_roles не работает.Вместо этого вам нужно использовать replace_roles.Чтобы replace_roles работал таким образом, сначала необходимо получить все роли от пользователя, затем выполнить итерацию по этому списку, удалить те, которые вам не нужны, и добавить нужные, а затем вызвать replace_roles с этим списком.Таким образом, он не удалит старые роли, которые вы не указали.

...