import asyncio import logging from maxapi import Bot, Dispatcher, F from maxapi.context import MemoryContext, State, StatesGroup from maxapi.types import Command, MessageCreated, CallbackButton, MessageCallback, BotCommand from maxapi.types.input_media import InputMedia from maxapi.utils.inline_keyboard import InlineKeyboardBuilder from for_example import router logging.basicConfig(level=logging.INFO) bot = Bot('f9LHodD0cOL5NY7All_9xJRh5ZhPw6bRvq_0Adm8-1bZZEHdRy6_ZHDMNVPejUYNZg7Zhty-wKHNv2X2WJBQ') dp = Dispatcher() dp.include_routers(router) start_text = '''Пример чат-бота для MAX 💙 Мои команды: /clear очищает ваш контекст /state или /context показывают ваше контекстное состояние /data показывает вашу контекстную память ''' class Form(StatesGroup): name = State() age = State() @dp.on_started() async def _(): logging.info('Бот стартовал!') @dp.message_created(Command('clear')) async def hello(event: MessageCreated, context: MemoryContext): await context.clear() await event.message.answer(f"Ваш контекст был очищен!") @dp.message_created(Command('data')) async def hello(event: MessageCreated, context: MemoryContext): data = await context.get_data() await event.message.answer(f"Ваша контекстная память: {str(data)}") @dp.message_created(Command('context')) @dp.message_created(Command('state')) async def hello(event: MessageCreated, context: MemoryContext): data = await context.get_state() await event.message.answer(f"Ваше контекстное состояние: {str(data)}") @dp.message_created(Command('start')) async def hello(event: MessageCreated): builder = InlineKeyboardBuilder() builder.row( CallbackButton( text='Ввести свое имя', payload='btn_1' ), CallbackButton( text='Ввести свой возраст', payload='btn_2' ) ) builder.row( CallbackButton( text='Не хочу', payload='btn_3' ) ) await event.message.answer( text=start_text, attachments=[ builder.as_markup(), ] # Для MAX клавиатура это вложение, ) # поэтому она в списке вложений @dp.message_callback(F.callback.payload == 'btn_1') async def hello(event: MessageCallback, context: MemoryContext): await context.set_state(Form.name) await event.message.delete() await event.message.answer(f'Отправьте свое имя:') @dp.message_callback(F.callback.payload == 'btn_2') async def hello(event: MessageCallback, context: MemoryContext): await context.set_state(Form.age) await event.message.delete() await event.message.answer(f'Отправьте ваш возраст:') @dp.message_callback(F.callback.payload == 'btn_3') async def hello(event: MessageCallback, context: MemoryContext): await event.message.delete() await event.message.answer(f'Ну ладно 🥲') @dp.message_created(F.message.body.text, Form.name) async def hello(event: MessageCreated, context: MemoryContext): await context.update_data(name=event.message.body.text) data = await context.get_data() await event.message.answer(f"Приятно познакомиться, {data['name'].title()}!") @dp.message_created(F.message.body.text, Form.age) async def hello(event: MessageCreated, context: MemoryContext): await context.update_data(age=event.message.body.text) await event.message.answer(f"Ого! А мне всего пару недель 😁") async def main(): await bot.set_my_commands( BotCommand( name='/start', description='Перезапустить бота' ), BotCommand( name='/clear', description='Очищает ваш контекст' ), BotCommand( name='/state', description='Показывают ваше контекстное состояние' ), BotCommand( name='/data', description='Показывает вашу контекстную память' ), BotCommand( name='/context', description='Показывают ваше контекстное состояние' ) ) await dp.start_polling(bot) # await dp.handle_webhook( # bot=bot, # host='localhost', # port=8080 # ) asyncio.run(main())