Для организации обработки дискорд-кнопок в отдельном классе (который называется 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 к боту.