После нажатия кнопки, вам вернется
взаимодействие. Одним из его атрибутов является
автор, который инициировал взаимодействие.
Со знанием этого, можно уже реализовать вашу задумку по выдаче роли.
class Verify(disnake.ui.View):
def __init__(self):
super().__init__(timeout=180)
self.db = database.DataBase()
@disnake.ui.button(label="",style=disnake.ButtonStyle.gray, emoji="", disabled=False)
async def my_button(self, button: disnake.ui.Button, interaction: disnake.Interaction):
role = disnake.utils.get(bot.guilds[0].roles, id=1234567890) # Получаем роль.
await interaction.author.add_roles(role) # Выдаем роль.
await interaction.response.send_message("Done", ephemeral=True)
Интересный факт, можно фактически не давать никакого ответа пользователю на нажатие кнопки.
Достаточно намеренно вызвать ошибку при ответе на взаимодействие и следом тихо ее задушить.
async def no_respond(inter: disnake.Interaction) -> None:
try:
await inter.response.send_message('', ephemeral=True)
except Exception:
pass