5

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

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


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

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

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


ШАГ 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 в нашем случае), то ваш бот должен уметь повторять за пользователем и играть в пинг-понг


ШАГ 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, то увидите примерно следующее

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


ШАГ 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! Или один из первых.

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

Лига программистов

2.1K поста11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества