Задать вопрос
creat1vv
@creat1vv
nodejs developer

Как я могу передать пользователя в класс?

У меня есть слэш-команда с кнопками. Как я могу использовать member'a в классе с моими кнопками и взаимодействовать с ним?
То есть, допустим выдать ему роль.

@commands.slash_command(description="Верификация пользователя")
	async def uwu(self, inter, member : disnake.Member):
		times_k = int(member.created_at.timestamp() + 10800)
		times_j = int(member.joined_at.timestamp() + 10800)
		embed = disnake.Embed(color=0x2f3236, view=Verify())
		embed.set_image(url="https://c.tenor.com/TCuck5iIIH4AAAAC/rain-anime-rain.gif")
		embed.add_field(name="Пользователь", value=f"{member.name}#{member.discriminator}", inline=True)
		embed.add_field(name="Регистрация", value=f"<t:{times_k}:R>", inline=True)
		embed.add_field(name="Зашёл на сервер", value=f"<t:{times_j}:R>", inline=True)


И сам class:
class Verify(disnake.ui.View):
	def __init__(self, *, timeout=180):
		super().__init__(timeout=timeout)
		self.db = database.DataBase()
	@disnake.ui.button(label="",style=disnake.ButtonStyle.gray, emoji="", disabled=True)
	async def asdaasda(self,button:disnake.ui.Button,interaction:disnake.Interaction):
		await interaction.response.send_message("xaxaxax", ephemeral=True)
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
retUrn3d
@retUrn3d
Пользователь, просто пользователь...
После нажатия кнопки, вам вернется взаимодействие. Одним из его атрибутов является автор, который инициировал взаимодействие.
Со знанием этого, можно уже реализовать вашу задумку по выдаче роли.
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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽