162 lines
4.8 KiB
Python
162 lines
4.8 KiB
Python
import asyncio
|
||
import logging
|
||
|
||
from maxapi import Bot, Dispatcher, F
|
||
from maxapi.context import MemoryContext, State, StatesGroup
|
||
from maxapi.types import BotStarted, Command, MessageCreated, CallbackButton, MessageCallback, BotCommand
|
||
from maxapi.utils.inline_keyboard import InlineKeyboardBuilder
|
||
|
||
from router import router
|
||
|
||
logging.basicConfig(level=logging.INFO)
|
||
|
||
bot = Bot('тут_ваш_токен')
|
||
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.bot_started()
|
||
async def bot_started(event: BotStarted):
|
||
await event.bot.send_message(
|
||
chat_id=event.chat_id,
|
||
text='Привет! Отправь мне /start'
|
||
)
|
||
|
||
|
||
@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
|
||
# )
|
||
|
||
|
||
if __name__ == '__main__':
|
||
asyncio.run(main()) |