На чем лучше писать бота для мессенджера МАКС
Подписаться на канал в Макс

Технологии никогда не стоят на месте — и наш отечественный мессенджер МАКС не исключение. Боты для него уже можно писать, и это отличный повод рассказать о том, что я понял, попробовав три языка.

Сразу оговорюсь: я давно пишу ботов для Telegram и перепробовал три стека — Go, Python и JavaScript/TypeScript. На мой взгляд, бота можно написать на любом языке. Это вопрос вкуса и опыта. Но, поэкспериментировав, я остановился на TypeScript — и вот почему.

Боль №1: окружение

Начну с самой приземлённой вещи — установки зависимостей.

В Python, прежде чем поставить первую библиотеку, нужно создать виртуальное окружение (python -m venv venv), активировать его (и не забыть, что на Windows и Linux это разные команды), а потом ещё следить, чтобы ты случайно не поставил пакет глобально. Каждая мелочь по отдельности — ерунда. Но когда хочешь быстро сесть и что-то написать, эти церемонии здорово отнимают внимание.

В TypeScript всё проще: описал зависимости в package.json — и одна команда npm i ставит всё, что нужно. Хочешь делиться проектом — отдаёшь коллеге два файла, он вводит ту же команду, и у него работает ровно то же самое. Для меня это реальная экономия времени, а не косметика.

Боль №2: типизация спасает от глупых ошибок

Когда бот общается с API мессенджера, постоянно передаёшь данные: ID чата, тексты, кнопки, колбэки. В чистом JavaScript опечатка в имени поля выстрелит в рантайме — в самый неподходящий момент, когда бот уже выложен. TypeScript поймает её ещё на этапе написания: среда подсветит, автодополнение подскажет доступные поля, а рефакторить код становится заметно спокойнее.

Пример минимального хендлера, чтобы было понятнее:

app.post('/webhook', async (req, res) => {
  const update = req.body as Update; // типизация сразу подсказывает структуру
  if (update.message?.text === '/start') {
    await sendMessage(update.message.chat.id, 'Привет! Я бот на TypeScript.');
  }
  res.sendStatus(200);
});

А что с Go и Python?

Чтобы быть честным, скажу и о плюсах остальных.

Go — если бот должен работать под высокой нагрузкой или вы хотите получить один скомпилированный бинарник, который просто закинуть на сервер, — Go отличный выбор. Минус: чуть больше «церемоний» в структуре проекта и больше кода для одинаковой логики.

Python — король прототипов. Огромная экосистема, тонна готовых примеров, а если боту нужны данные, анализ или ML — вне конкуренции. Минус — уже озвученный: окружение и версии.

TypeScript — золотая середина для меня: знакомый синтаксис, если вы из мира веба, мгновенный старт с npm и типизация, которая реально экономит время на поддержке.

Коротко всё это выглядит так:

Язык Сильная сторона Слабая сторона Когда брать
Go Скорость, один бинарь Больше кода, строже структура Высокие нагрузки
Python Библиотеки, быстрый прототип Окружение, версии Прототипы, ML-задачи
TypeScript Типизация, npm, экосистема JS Чуть больше кода из-за типов Веб-стек, долгая поддержка

Важная мысль напоследок

Архитектура бота почти не зависит от мессенджера. Команды, состояния, очереди, логирование — это одинаково и в Telegram, и в МАКС. Поэтому я держу бизнес-логику отдельно от адаптера, который ходит в API конкретной платформы. Тогда смена мессенджера — это переписывание одного слоя, а не всего проекта.

Итог простой: пишите на том, что знаете, но если выбор открыт — TypeScript для ботов дал мне лучший баланс скорости старта и надёжности в поддержке.