Делаем первого бота для нового мессенджера MAX на Python

Не прошло и недели с момента выхода нового мессенджера MAX от VK, а мы сейчас сделаем для него своего первого бота.

===

ШАГ 1. Регистрируем своего бота и получаем для него токен.

Похоже на ТГ. Пишем в поиске "MasterBot", должны увидеть в результатах официальный бот @masterbot

Выбираем команду /create, вводим имя бота по правилам (должно заканчиваться на bot). Если такой бот есть, то вас попросят ввести имя и потом покажут сообщение с токеном бота

Делаем первого бота для нового мессенджера MAX на Python

===

ШАГ 2. Устанавливаем maxgram

На момент написания официальная библиотека от разработчиков - только под JS. А для Python нам понадобится опенсорсная библиотека maxgram.

pip install maxgram

Библиотека пока совсем новая, но поддерживает уже прием и отправку сообщений, установку подсказок и кнопки бота.

===

ШАГ 3. Делаем эхо-бота, играющего в пинг-понг

Он будет обрабатывать команды и повторять сообщения пользователя

Создаем файл, например, bot.py - работаем дальше в нем. Импортируем в него класс Bot, инициализируем бота и устанавливаем подсказки для команд бота - они всплывут, если ввести слэш (работает на мобильном клиенте)

from maxgram import Bot bot = Bot("YOUR_BOT_TOKEN") # Установка подсказок для команд бота bot.set_my_commands({ "help": "Получить помощь", "ping": "Проверка работы бота", "hello": "Приветствие" })

Вместо YOUR_BOT_TOKEN используйте полученный ранее токен.

⚠ Правильнее не хранить его так в коде, конечно, а использовать файл .env, но в статье показываю только основы по самому боту

Дальше добавляем обработчики на событие присоединения к боту bot.on("bot_started") и на обработку сообщения @bot.hears("ping"), чтобы бот отвечал pong на ping

# Обработчик события запуска бота @bot.on("bot_started") def on_start(context): context.reply("Привет! Скажи что-нибудь и я повторю это!") # Обработчик для сообщения с текстом 'ping' @bot.hears("ping") def ping_handler(context): context.reply("pong")

Теперь научимся повторять сообщения пользователя. Добавляем обработчик @bot.on("message_created")

# Обработчик для всех остальных входящих сообщений @bot.on("message_created") def echo(context): # Проверяем, что есть сообщение и тело сообщения if context.message and context.message.get("body") and "text" in context.message["body"]: # Получаем текст сообщения text = context.message["body"]["text"] # Проверяем, что это не команда и не специальные сообщения с обработчиками if not text.startswith("/") and text != "ping": context.reply(text)

Наконец, добавляем блок запуска бота

# Запуск бота if __name__ == "__main__": try: bot.run() except KeyboardInterrupt: bot.stop()

Теперь, если вы запустите получившийся python файл (python bot.py в нашем случае), то ваш бот должен уметь повторять за пользователем и играть в пинг-понг

Делаем первого бота для нового мессенджера MAX на Python

===

ШАГ 4. Добавляем кнопки

Для этого импортируем из библиотеки класс клавиатуры и создаем нужные нам кнопки

from maxgram.keyboards import InlineKeyboard # Создание клавиатуры main_keyboard = InlineKeyboard( [ {"text": "Отправить новое сообщение", "callback": "button1"}, ], [ {"text": "Изменить сообщение", "callback": "button2"}, {"text": "Показать Назад", "callback": "button3"} ], [ {"text": "Открыть ссылку", "url": "https://pypi.org/project/maxgram/"} ] )

Принцип такой: каждый список - это одна строка кнопок. Один словарь внутри списка - одна кнопка. Если несколько словарей добавить внутрь списка, то будет несколько кнопок равной ширины в одной строке. Сейчас посмотрим, как это выглядит.

Пусть клавиатура будет показываться при отправке команды /keyboard - добавляем обработчик

# Отправить клавиатуру по команде '/keyboard' @bot.command("keyboard") def keyboard_command(context): context.reply( "Вот клавиатура. Выбери одну из опций:", keyboard=main_keyboard )

Если запустить сейчас бота и отправить команду /keyboard, то увидите примерно следующее

Делаем первого бота для нового мессенджера MAX на Python

Но нужно еще обрабатывать нажатия на кнопки

ШАГ 5. Обрабатываем нажатия на кнопки

Используем @bot.on("message_callback"). Уникальные названия кнопок (которые выше задавали, как button1, button2, button3) принимаем в обработчике из context.payload, а отвечаем на нажатия с помощью context.reply_callback()

# Обработчик нажатий на кнопки @bot.on("message_callback") def handle_callback(context): button = context.payload if button == "button1": context.reply_callback("Вы отправили новое сообщение") elif button == "button2": context.reply_callback("Вы изменили текущее сообщение", is_current=True) elif button == "button3": context.reply_callback("Вы изменили текущее сообщение с новой клавиатурой", keyboard=InlineKeyboard( [{"text": "Вернуться к меню", "callback": "back_to_menu"}] ), is_current=True) elif button == "back_to_menu": context.reply_callback( "Вернемся к основному меню", keyboard=main_keyboard, is_current=True )

При этом специальный параметр is_current = True задает, чтобы новое сообщение показывалось путем редактирования текущего, а не через отправку нового.

Первая часть завершена. Если будет интерес, то в следующих частях сделаем того самого AI-ассистента, который показан в начале гайда на видео.

Кстати, потестить ИИ-ассистента на MAX можно прямо сейчас по ссылке - max.ru/AssistantsBot

Это обычный бесплатный чат-бот с ИИ. Но первый на MAX! Или один из первых.

Пишу о своих разработках и о том, как делаю стартап, в ТГ-канале

2
4 комментария