62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
import asyncio
|
||
import logging
|
||
|
||
from maxapi import Bot, Dispatcher, F
|
||
from maxapi.filters.callback_payload import CallbackPayload
|
||
from maxapi.filters.command import CommandStart
|
||
from maxapi.types import (
|
||
CallbackButton,
|
||
MessageCreated,
|
||
MessageCallback,
|
||
)
|
||
from maxapi.utils.inline_keyboard import InlineKeyboardBuilder
|
||
|
||
logging.basicConfig(level=logging.INFO)
|
||
|
||
bot = Bot('тут_ваш_токен')
|
||
dp = Dispatcher()
|
||
|
||
|
||
class MyPayload(CallbackPayload, prefix='mypayload'):
|
||
foo: str
|
||
action: str
|
||
|
||
|
||
class AnotherPayload(CallbackPayload, prefix='another'):
|
||
bar: str
|
||
value: int
|
||
|
||
|
||
@dp.message_created(CommandStart())
|
||
async def show_keyboard(event: MessageCreated):
|
||
kb = InlineKeyboardBuilder()
|
||
kb.row(
|
||
CallbackButton(
|
||
text='Первая кнопка',
|
||
payload=MyPayload(foo='123', action='edit').pack(),
|
||
),
|
||
CallbackButton(
|
||
text='Вторая кнопка',
|
||
payload=AnotherPayload(bar='abc', value=42).pack(),
|
||
),
|
||
)
|
||
await event.message.answer('Нажми кнопку!', attachments=[kb.as_markup()])
|
||
|
||
|
||
@dp.message_callback(MyPayload.filter(F.foo == '123'))
|
||
async def on_first_callback(event: MessageCallback, payload: MyPayload):
|
||
await event.answer(new_text=f'Первая кнопка: foo={payload.foo}, action={payload.action}')
|
||
|
||
|
||
@dp.message_callback(AnotherPayload.filter())
|
||
async def on_second_callback(event: MessageCallback, payload: AnotherPayload):
|
||
await event.answer(new_text=f'Вторая кнопка: bar={payload.bar}, value={payload.value}')
|
||
|
||
|
||
async def main():
|
||
await dp.start_polling(bot)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
asyncio.run(main())
|