Как можно корректно включить обработчик кнопок в отдельный класс?

Можно предоставить кусок кода из файла cog?
  • 8 февраля 2024 г. 20:09
Ответы на вопрос 1
Для организации обработки дискорд-кнопок в отдельном классе (который называется cog) в библиотеке discord.py, вы можете создать класс, наследуемый от `discord.ext.commands.Cog`, и использовать декораторы для создания обработчиков компонентов (например, кнопок).

Ниже приведен пример кода с использованием discord.py, в котором cog имеет обработчик кнопок:

```python
import discord
from discord.ext import commands
from discord.ui import Button, View

class MyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    # Функция для создания кнопки
    async def make_button(self, ctx):
        button = Button(label='Нажми меня', style=discord.ButtonStyle.primary)

        async def button_callback(interaction):
            # Удостоверимся, что пользователь-нажавший кнопку - тот, кто вызвал команду.
            if interaction.user != ctx.author:
                await interaction.response.send_message('Эта кнопка не для вас!', ephemeral=True)
                return

            await interaction.response.send_message('Кнопка нажата!', ephemeral=True)

        button.callback = button_callback
        view = View()
        view.add_item(button)

        await ctx.send('Нажмите на кнопку', view=view)

    @commands.command()
    async def button(self, ctx):
        await self.make_button(ctx)

# Добавление Cog к боту:
bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')

bot.add_cog(MyCog(bot))

bot.run('YOUR_TOKEN')
```

В этом примере:

1. Мы создали класс `MyCog`, который наследуется от `commands.Cog`, чтобы использовать его в качестве cog.
2. Внутри класса `MyCog`, мы создали команду `button`, которая запускает функцию `make_button`.
3. Функция `make_button` создает кнопку с помощью `discord.ui.Button` и привязывает к ней функцию обратного вызова `button_callback`.
4. При вызове команды `!button`, пользователю отправляется сообщение с кнопкой, и ожидается, что он её нажмёт.
5. После создания экземпляра бота и входа в систему добавляем `MyCog` в бота вызовом метода `add_cog`.

Убедитесь, что вы используете токен вашего бота в строке `bot.run('YOUR_TOKEN')`.

Обратите внимание на использование соглашений discord.py в данном примере:

- `commands.Cog` для объявления класса cog.
- `commands.command()` для указания метода класса как команды.
- `@bot.event` для обработки событий, в данном случае события входа в систему (on_ready).
- `add_cog` для добавления класса cog к боту.
Похожие вопросы