@RwAyD7

Как сделать проверку нажатия на кнопку, или же как сделать проверку нажал ли {member.mention} на кнопку?

Не могу сделать проверку на нажатие кнопки
если убрать строчку
async def interaction_check(self, member: nextcord.Member, interaction: nextcord.Interaction):
return interaction.user == member
То любой пользователь нажмет на кнопку и скрипт сработает
А мне надо чтобы только упомянутый пользователь мог нажать на кнопку
Если строчку не убирать кто не кто на кнопку нажать не может
import nextcord
from nextcord.ext import commands
from typing import Optional
import aiohttp
from nextcord.ui.button import ButtonStyle, ComponentType


class Love(nextcord.ui.View):
    def __init__(self):
        super().__init__(timeout=None)
        self.value = None       


    async def interaction_check(self, member: nextcord.Member, interaction: nextcord.Interaction):
        return interaction.user == member
    
    async def on_timeout(self):
        self.value = False
        self.stop()
    

    @nextcord.ui.button(label='Да', style=ButtonStyle.green)
    async def yes(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        self.value = True
        self.stop()

        

    @nextcord.ui.button(label='Нет', style=ButtonStyle.red)
    async def no(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        self.value = False
        self.stop()

class command(commands.Cog):
    def __init__(self, client):
        self.client = client

    @nextcord.slash_command(guild_ids=None, description=("love"))
    async def love(self, interaction: nextcord.Interaction, member: nextcord.Member):
        view = Love()
        embed = nextcord.Embed(title='Love', description=f'{member.mention}, хотите ли вы love с {interaction.user.mention}?', color=nextcord.Color.green())
        message = await interaction.send(embed=embed, view=view)

        await view.wait()

        if view.value is None:
            return

        if view.value:
            married_embed = nextcord.Embed(title='Love', description=f'пон {interaction.user.mention} и {member.mention} love!', color=nextcord.Color.green())
            await message.edit(embed=married_embed, view=None)
        else:
            await message.delete()
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Keramxx
Я не смотрел код, ибо мне лень, но я знаю как решить.

Если упоминание происходит через ответ на сообщение, то:
  Нужно по айди проверять, тот ли это пользователь.
  То есть, нужно будет в каллбэк дате передавать айди человека, в ответ на которое была отправлена команда, и
  в начале функции проверять тот ли человек нажал, если нет - return
Если упоминание происходит через упоминание(юзернейм):
  Нужно запрашивать информацию о человеке, уже оттуда брать айди и далее всё тоже, что описано выше.
  Также я бы порекомендовал првоерять находятся ли в сообщении текстовые упоминания. Если человека упомянули в
  виде текста, то в энтити будет находится объект(User) этого пользователя, уже оттуда брать айди и опять же, всё то же,
  что описано выше.

Надеюсь помог
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы