README.md

Перенос чата или канала Telegram в MAX

Утилита читает экспорт группы, супергруппы или канала из Telegram Desktop и отправляет сообщения в группу или канал MAX с помощью бота. Поддерживаются текст (с базовым HTML‑форматированием), фото, видео, GIF, стикеры (как изображения или видео), файлы. Альбомы из нескольких фото и видео, отправленных подряд, объединяются в одно сообщение.

Подготовка окружения

  1. Создайте бота и получите его токен, добавьте бота в чат, куда будут отправляться сообщения.

    Боты в MAX доступны только для российских юридических лиц и индивидуальных предпринимателей. Для получения токена бота обратитесь к документации MAX https://business.max.ru/self.

    Для отправки сообщений в группу необходимо знать её числовой идентификатор chat_id.
    Запросите список чатов, в которых участвует бот, и найдите нужный по полю title.

    curl -X GET "https://platform-api.max.ru/chats" \
     -H "Authorization: ${MAXBOT_TOKEN}" -s | \
     jq '.chats'
    
  2. Установите Rust (если ещё не установлен):

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

Установка tg2max

cargo install tg2max

После успешной установки исполняемый файл tg2max появится в ~/.cargo/bin. Убедитесь, что этот путь добавлен в переменную окружения PATH.

Экспорт чата из Telegram Desktop

  1. Откройте Telegram Desktop.
  2. Перейдите в нужный чат (личный или групповой).
  3. Нажмите на три точки (меню) → Экспорт истории чата.
  4. В настройках экспорта:
    • Убедитесь, что Формат задан Машиночитаемый JSON или Оба.
    • Отметьте Фотографии, Видеозаписи, Голосовые сообщения, Видеосообщения, Стикеры, GIF, Файлы — всё, что хотите перенести. Ползунком установите ограничение по размеру файлов.
    • Путь сохранения выберите удобный (например, ~/export).
  5. Нажмите Export. В указанной директории появится result.json и подпапки с медиафайлами.

Настройка назначения имён (необязательно)

Если в MAX вы хотите отображать имена пользователей не так, как они записаны в Telegram, создайте в директории экспорта файл name-mappings.json.
Формат: ключ — user_id (например user123456789), значение — желаемое имя.

{
  "user123456789": "Иван",
  "user012345678": "Василий"
}

Переменные окружения

Перед запуском задайте обязательные переменные:

export MAXBOT_TOKEN="ваш_токен_бота"
export CHAT_ID="-123456789"

Запуск

tg2max <путь_экспорта> [номер_первого_сообщения] [количество] [--no-header] [--disable-link-preview]
  • <путь_экспорта> — директория, где лежит result.json.
  • [номер_первого_сообщения] — индекс первого отправляемого сообщения (нумерация с 0). По умолчанию 0.
  • [количество] — сколько сообщений обработать. Если 0 или не указано — все до конца.
  • --no-header — не добавлять шапку с именем отправителя и датой. Сообщения будут содержать только оригинальный текст и вложения.
  • --disable-link-preview — отключить предпросмотр ссылок в MAX (по умолчанию включён).

Примеры:

# Отправить все сообщения из экспорта
tg2max ~/telegram_export

# Отправить первые 50 сообщений без шапки
tg2max ~/telegram_export 0 50 --no-header

# Отправить сообщения с 100-го по 199-е без предпросмотра ссылок
tg2max ~/telegram_export 100 100 --disable-link-preview

Как это работает

  1. В директории экспорта разбирается файл result.json.
  2. Создаётся (или открывается) локальная БД SQLite messages.db для хранения соответствия Telegram message ID → MAX message ID.
  3. Сообщения обрабатываются последовательно.
  4. Для каждого сообщения:
    • Если не указан флаг --no-header, формируется HTML‑шапка: <u><b>Имя</b></u> <i>[Дата]</i>.
    • Текст преобразуется в HTML с поддержкой тегов <b>, <i>, <u>, <s>, <code>, <a>.
    • Если сообщение — ответ на другое, в MAX делается reply_to.
    • Вложения (фото, видео, файлы, стикеры) отправляются вместе с текстом.
    • Альбомы: только фотографии и видео, отправленные подряд с одинаковым временем и отправителем, без текста у последующих, объединяются в одно сообщение с несколькими вложениями.
    • Если сообщение слишком длинное (>4000 символов), оно разбивается по ближайшему переводу строки.
    • При неудачной отправке медиа выполняется до 10 повторных попыток с паузой в 1 минуту. Если все попытки провалились, отправляется текст сообщения со ссылкой на оригинал в Telegram (https://t.me/c/{chat_id}/{msg_id}).

Ограничения

  • Некоторые типы файлов (.exe, .dll, .bat, .sh и другие исполняемые/скриптовые) запрещены к загрузке в MAX. Для них будет отправлена только ссылка на оригинал в Telegram.
  • Стикеры без предпросмотра (thumbnail) пропускаются.
  • GIF отправляются как видео (без звука).
  • Частота запросов к API MAX ограничена 1 сообщением в секунду (настраивается библиотекой).

Лицензия

MIT

Для связи

Telegram: https://t.me/KostyaGPT

MAX: https://max.ru/u/f9LHodD0cOI2cXIu7dXjHAtdfuyb6qwKjkH93vhUs2PJNXAfL_4b4Xo8xlA

Описание
Конвейеры
0 успешных
0 с ошибкой
Разработчики