@mrguard

Бот отвечает два раза на нажатие кнопки?

Пишу бота для авторизации на сервере. Код ниже работает, но, начиная с примера, повторяет его два раза, а сообщение с успешным прохождением не хочет показывать как эфемерность.
import discord
from discord.ext import commands
from discord import member
import requests
from dislash import InteractionClient, ActionRow, Button, ButtonStyle

intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!mc')
inter_client = InteractionClient(bot)

@bot.command()
async def verif(ctx): #начало верификации

    emb = discord.Embed(
        description = 
        f"""
        Здраствуйте вы попали на сервер {ctx.guild.name}, пройдите верификацию чтобы получить доступ к другим каналам.
        """,
        colour = 0xFF8C00
    )
    emb.set_thumbnail(url = 'https://cdn.discordapp.com/attachments/772850448892690462/880752123418136596/947d1f802c858b540b84bc3000fc2439_1_-removebg-preview.png')
    emb.set_author(name = 'Верификация')

    row = ActionRow(
        Button(
            style = ButtonStyle.green,
            label = 'Прохождение верификации',
            #custom_id = 'verif_button'
        )
    )
    await ctx.send(embed = emb, components = [row])

@bot.listen('on_button_click')
async def on_button_click_one(ctx): #проверка на бота
    emb = discord.Embed(title='Прохождение верификации', description='Для прохождения верификации вам необходимо решить пример!', color=0xdd2c2c )
    emb.add_field(name='Пример', value='32-17', inline=False)

    row = ActionRow(
        Button(
            style=ButtonStyle.red,
            label='15',
            custom_id='work_button'
        ),
        Button(
            style=ButtonStyle.gray,
            label='49'
        ),
        Button(
            style=ButtonStyle.green,
            label='-17'
        )
    )


    await ctx.send(embed=emb, ephemeral = True, components=[row])


@bot.listen('on_button_click')
async def on_button_click_two(inter):
    res = 'Вы успешно прошли верификацию!' #вывод сообщение о получении роли
    guild = bot.get_guild(inter.guild.id)
    if inter.component.id == "work_button":
        verif = guild.get_role(1000346563740184607)
        member = inter.author
        await member.add_roles(verif)
        await inter.reply(res, ephemeral=True)
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Потому, что у вас 2 слушателя на кнопку. При нажатии на любую кнопку будет вызываться слушатель: on_button_click_one(). Решение: Добавьте в первый слушатель проверка на custom_id('verif_button') или label('Прохождение верификации') кнопки, чтобы начать проверку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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