disnake / моментально убирается роль при нажатии на кнопку
Я прописал условие, что если кнопка нажата и есть роль, то она убирется. Так то код выполняется без ошибок и делает всё верно - даёт роль и через секунду сетает. Но как сделать так, чтобы он её не убирал сразу после того, как дал её?
@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)``
Ответы (1 шт):
Автор решения: q r t s
→ Ссылка
Потому что у Вас прописано действие:
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