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)
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы