Написание эхо-бота для MAX
Задача максимально простая: пользователь отправляет сообщение, а бот возвращает его обратно
Например: > Пользователь: Привет > Бот: Привет
Несмотря на простоту, именно с таких проектов обычно начинается знакомство с новой платформой. Здесь уже есть получение сообщений, обработка событий и отправка ответов пользователю
Для начала устанавливаем библиотеку: pip install maxapi
После установки импортируем необходимые компоненты и включаем логирование:
import asyncio import logging from maxapi import Bot, Dispatcher, F from maxapi.filters.command import CommandStart from maxapi.types import
# Показываем служебную информацию в консоли logging.basicConfig(level=logging.INFO)
Создаем экземпляры бота и диспетчера:
# Создаем бота с токеном доступа bot = Bot(token="abc123") # Диспетчер получает события от MAX dp = Dispatcher()
Теперь можно зарегистрировать первый обработчик:
@dp.message_created(CommandStart()) async def on_start(event: MessageCreated): await event.message.answer( "Привет! Я эхо-бот. Отправь мне любое сообщение." )
Эта строка может показаться необычной:
@dp.message_created(CommandStart())
Разберем ее по частям: - dp — диспетчер, который получает события - message_created — новое сообщение - CommandStart() — фильтр команды /start - @ — связывает правило с функцией ниже
По сути, эту конструкцию можно прочитать как обычное предложение: > Если пользователь отправил команду /start, вызови эту функцию
Теперь добавляем обработчик обычных текстовых сообщений:
@dp.message_created(F.message.body.text) async def on_text(event: MessageCreated): await event.message.answer( event.message.body.text )
Здесь логика похожая: - message_created — новое сообщение - F.message.body.text — сообщение содержит текст
То есть: > Если пришло текстовое сообщение, вызови эту функцию
А внутри происходит самая важная часть всего бота:
await event.message.answer( event.message.body.text )
Получаем текст пользователя и отправляем его обратно
Остается только запустить бота:
async def main(): await dp.start_polling(bot)
if __name__ == "__main__": asyncio.run(main())
После запуска бот начинает получать события из MAX и отвечать пользователям
На первый взгляд это очень простой пример, но именно с таких проектов обычно начинается знакомство с Bot API. Дальше можно добавлять кнопки, состояния, файлы, базы данных, интеграции и более сложные сценарии общения
Полный пример Там дополнительно есть обработка кнопки "Начать", индикатор "печатает...", загрузка переменных окружения и подробные комментарии к коду
В следующих постах хочу разобрать кнопки, вложения и другие возможности MAX
GitHub: https://github.com/love-apples Библиотека для разработки ботов MAX: https://github.com/love-apples/maxapi
#python #backend #max #чатботы #программирование #opensource #maxapi