disnake / моментально убирается роль при нажатии на кнопку

Рейтинг: 0Ответов: 1Опубликовано: 21.02.2023

Я прописал условие, что если кнопка нажата и есть роль, то она убирется. Так то код выполняется без ошибок и делает всё верно - даёт роль и через секунду сетает. Но как сделать так, чтобы он её не убирал сразу после того, как дал её?

@bot.slash_command()
async def buttons(inter: disnake.ApplicationCommandInteraction):
    await inter.response.send_message(
        components=[
            disnake.ui.Button(label="Yes", style=disnake.ButtonStyle.success, custom_id="yes"),
            disnake.ui.Button(label="No", style=disnake.ButtonStyle.danger, custom_id="no"),
        ],)


@bot.listen("on_button_click")
async def help_listener(inter: disnake.MessageInteraction):
    disk = inter.guild.get_role(ID роли)

    if inter.component.custom_id == "yes":
        await inter.author.add_roles(disk)
    if inter.component.custom_id == "yes":
        if disk in inter.author.roles:
            await inter.author.remove_roles(disk)``

Ответы

▲ 0Принят

Потому что у Вас прописано действие:

    if inter.component.custom_id == "yes":
        await inter.author.add_roles(disk)

И сразу же это же действие:

    if inter.component.custom_id == "yes":
        if disk in inter.author.roles:
            await inter.author.remove_roles(disk)``

Вам необходимо переписать команду в примерно что-то такое:

    disk = inter.guild.get_role(ID роли)

    if inter.component.custom_id == "yes":
        if disk in inter.author.roles:
            await inter.author.remove_roles(disk)
            return
        await inter.author.add_roles(disk)
        return