Как стать автором
Поиск
Написать публикацию
Обновить

Пишем чат-бота для мессенджера MAX на Python

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров11K

Привет, коллеги! На связи ботострой на aiogram

Немного предыстории

По своему опыту я привык работать с aiogram — это удобный и отлаженный фреймворк для Telegram-ботов с большим сообществом и обширной документацией. В aiogram удобно организовывать обработку команд, создавать сложные состояния, работать с inline-клавиатурами и встроенными механизмами.

Когда начал знакомиться с мессенджером MAX, я подумал, а почему бы не попробовать написать под него модуль для разработки чат-ботов на Python? Надоело каждый день делать/дорабатывать ботов для телеграмма, захотелось приключений. Приступил к работе, результат: maxapi, мой первый модуль и я хочу вас с ним познакомить на примере long polling бота!

На старт! Создаем бота в MasterBot

Запускаем бота, отправляем /create

Просит ник для бота, отправляем

Ну и наконец: отправляем имя для бота

Копируем токен на будущее, идем дальше. Открываем консоль, устанавливаем библиотеку maxapi:

pip install maxapi

Создаем скрипт с названием и расширением bot.py, прописываем импорты

import asyncio
import logging

from maxapi import Bot, Dispatcher, F
from maxapi.types import MessageCreated

Настраиваем логгирование

logging.basicConfig(level=logging.INFO)

Инициализируем Bot, заменяем 'тут_ваш_токен' на токен из созданного бота MasterBot

bot = Bot('тут_ваш_токен')
dp = Dispatcher()  

Делаем свой первый асинхронный обработчик событий, в данном случае принимает новое сообщение с фильтром если есть текст, отвечая методом.answer() класса Message

@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
    await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
@dp.<тип_события>(<фильтры>)
async def <имя_функции>(event: <тип_события>):
    ...
  • dp — экземпляр Dispatcher

  • <тип_события> — тип события (в данном случае message_created)

  • <фильтр> — условие MagicFilter, по которому срабатывает хендлер (в данном случае наличие текста в сообщении)

  • event — объект события с данными (в данном случае MessageCreated)

Создаем асинхронную функцию для запуска бота в которой вызываем функцию для запуска long polling, передав в качестве аргумента экземпляр бота

async def main():
    await dp.start_polling(bot)

Создаем проверку на "самостоятельность" скрипта и внутри неё вызываем наш main()

if __name__ == '__main__':
    asyncio.run(main())

Готово! Запускаем нашего бота из консоли

python main.py

Пишем боту. Всё работает!

Полный код эхо-бота

import asyncio
import logging

from maxapi import Bot, Dispatcher, F
from maxapi.types import MessageCreated

logging.basicConfig(level=logging.INFO)

bot = Bot('тут_ваш_токен')
dp = Dispatcher()


@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
    await event.message.answer(f"Повторяю за вами: {event.message.body.text}")


async def main():
    await dp.start_polling(bot)


if __name__ == '__main__':
    asyncio.run(main())

Заключение

Для подробного ознакомления с библиотекой советую посетить страницу GitHub и Wiki модуля, а также позадавать вопросов в чатах библиотеки:

MAX

Telegram

Спасибо за прочтение! Жду вас в чате с предложениями по улучшению библиотеки :-)

Теги:
Хабы:
-8
Комментарии46

Публикации

Ближайшие события