@Kenity

Как просмотреть количество нажатий на кнопку?

Я пишу команду для создания голосования, но когда нажимаешь на кнопку в сообщении, бот не видит и дискорд показывает ошибку взаимодействия.
import discord
from discord.ext import commands
from discord_components import DiscordComponents, Button, ButtonStyle
import asyncio
from config.config import settings
componentss = []

bot = commands.Bot(command_prefix = "-", intents = discord.Intents.all())

class Vote(commands.Cog):

	def __init__(self, bot):
		self.bot = bot

	@commands.command(name = 'StartVote', aliases = ['Голосование', 'голосование', 'Vote', 'vote'])
	async def __StartVote(self, ctx, *,  msg: str):

		msg_content = msg.split()
		print(msg_content)
		vote_name = msg_content[0]
		msg_content.pop(0)
		
		for i in range(len(msg_content)):
			comp = Button(style = ButtonStyle.green, label = msg_content[i])
			componentss.append(comp)
		await ctx.send(
            embed = discord.Embed(title = vote_name, colour = discord.Color.green()),
            components = componentss
        )

		while True:
			
			for i in range(len(msg_content)):
				response = await bot.wait_for("button_click")
				if response.component.label == msg_content[i]:
					print(msg_content[i])

			await asyncio.sleep(0.1)
		



def setup(bot):
	bot.add_cog(Vote(bot))


Что я сделал не так ?
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Не знаю, где вы встретили такую конструкцию, но таймер там определенно лишний.
Или если хотите в той же функции прослушивать, то оставить только wait_for он и так ожидает нажатия
loop = True
while loop:
    res = await client.wait_for("button_click")
    if res.component.label == "Button1":
        embed = Embed(title="Button1", description=f"Вы нажали Button1")
        await res.respond(
            type=7,
            components = []
            )
        await res.channel.send(embed=embed)

Или же более логичный вариант в событии on_button_click
@Cog.listener()
async def on_button_click(self, interaction):
    await interaction.respond(content=f"Вы нажали {interaction.component.custom_id}")
Ответ написан
Ваш ответ на вопрос

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

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