Skip to content

MikeMike88/max2tg-notifier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Нотификатор MAX → Telegram

MAX убрали из App Store, push-уведомления на iPhone не приходят. Этот скрипт слушает твой аккаунт MAX на постоянно включённой машине и пересылает новые сообщения в Telegram — с текстом сообщения (для медиа — пометка вроде «📷 Фото») и только по незамьюченным чатам. При желании можно слать вместо текста лишь короткий сигнал «🔔 новое сообщение в таком-то чате», чтобы сам текст оставался только в MAX на телефоне (INCLUDE_MESSAGE_TEXT = False, см. настройку).

Работает на Windows, Linux и macOS. Под капотом — PyMax (userbot-обёртка над внутренним API MAX) и Telegram Bot API.

⚠️ PyMax использует неофициальный внутренний API MAX: это нарушает условия сервиса и теоретически возможен бан аккаунта (привязан к твоему номеру). Для личного использования риск низкий, но не нулевой.

Установка

Нужен Python 3.10+ (проверено на 3.12).

python -m pip install -r requirements.txt

На Linux/macOS, если запускаешь headless (без значка в трее), pystray и Pillow не нужны — можно поставить только ядро:

python -m pip install "maxapi-python>=2.3.1" "aiohttp>=3.13"

Настройка

  1. Создай телеграм-бота: @BotFather/newbot → скопируй токен.
  2. Скопируй шаблон конфига и впиши свои значения:
    cp config.py.example config.py      # Linux/macOS
    copy config.py.example config.py    # Windows
    В config.py укажи MAX_PHONE и TELEGRAM_BOT_TOKEN.
  3. Узнай свой числовой Telegram-ID (он же chat_id личного чата с ботом) и впиши его в TELEGRAM_USER_ID. Проще всего: напиши /start боту @userinfobot, он пришлёт твой ID.

config.py и папка cache/ в .gitignore — твои секреты и сессия в репозиторий не попадают.

Первый запуск и авторизация

Авторизация встроена в main.py. При первом запуске MAX пришлёт SMS-код, а если на аккаунте включён 2FA — спросит пароль; и то и другое вводится прямо в консоли:

python main.py

Сессия сохранится в cache/main.db, дальше вход не потребуется. Чтобы войти заново (сменился номер, протухла сессия) — python main.py --login.

После входа в Telegram придёт «✅ Нотификатор запущен». Напиши себе в незамьюченный чат MAX — прилетит «🔔 Новое сообщение в …». chat_id каждого чата виден в логе (cache/notifier.log).

Запуск в фоне

Windows (значок в трее)

После первого входа (см. выше) фоновый запуск со значком в трее:

python main.py

Когда сессия уже есть, на Windows автоматически поднимается значок в трее (меню «Открыть лог» / «Выход»). Для автозапуска при входе в систему положи ярлык на start_hidden.vbs (запуск без мелькания окна) в shell:startup. pythonw должен быть в PATH.

Linux / macOS (headless + systemd)

На сервере без графики запускай в headless-режиме:

python main.py --no-tray

Пример systemd-юнита — deploy/max2tg.service (поправь WorkingDirectory и путь к Python). Сначала один раз авторизуйся вручную (python main.py --login), чтобы появилась сессия, потом:

sudo cp deploy/max2tg.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now max2tg

Mute (не беспокоить) — автоматически

Заглушённые в MAX чаты определяются автоматически, настраивать ничего не надо. Признак приходит в LOGIN-ответе: config.chats.{chatId}.dontDisturbUntil (-1 — навсегда, 0 — нет, >0 — до момента в мс). main.py читает это при запуске и не шлёт сигналы по заглушённым чатам.

  • Включено флагом RESPECT_MAX_MUTE = True в config.py (поставь False, чтобы получать сигналы даже из заглушённых).
  • mute читается один раз при старте. Заглушил/разглушил чат в MAX → перезапусти нотификатор, чтобы он подхватил изменение.
  • Дополнительно можно вручную глушить чаты через IGNORED_CHAT_IDS.

Надёжная доставка (outbox)

Уведомления доставляются гарантированно, даже если в момент сообщения нет сети или VPN (а Telegram без VPN часто недоступен). Вместо «отправил и забыл» каждое уведомление сначала кладётся файлом в cache/outbox/, а фоновый воркер дослывает его в Telegram:

  • доставка идёт по очереди (FIFO) с сохранением порядка; при сбое попытка повторяется каждые RETRY_DELAY_SECONDS секунд (по умолчанию 15);
  • очередь переживает перезапуск приложения и компьютера — недоставленное уйдёт после старта, когда связь вернётся;
  • после успешной отправки файл удаляется (архив не копится — всё в логе);
  • если за MESSAGE_TTL_SECONDS (по умолчанию сутки) связь так и не появилась, сообщение отбрасывается, чтобы не держать очередь вечно.

При каждой неудачной попытке в трее всплывает balloon-подсказка с текстом ошибки и самим сообщением, которое не удалось отправить (на Windows со значком в трее). Чтобы при долгом простое сети не засыпать центр уведомлений, повторные подсказки троттлятся. Отключается флагом ERROR_POPUP = False (тогда сбои только пишутся в лог). В headless-режиме (--no-tray, Linux/macOS) подсказки не показываются — только лог.

Тонкая настройка (config.py)

  • COOLDOWN_SECONDS — антиспам: не чаще одного сигнала на чат за N секунд.
  • SKIP_SERVICE_MESSAGES — не пинговать по системным событиям чата («X теперь в MAX», «X вышел из чата» и т.п.); по умолчанию True.
  • INCLUDE_MESSAGE_TEXT — присылать вместе с сигналом сам текст сообщения (для медиа — пометку вида «📷 Фото»); по умолчанию True. Учти: текст уходит через твоего бота на серверы Telegram, и антиспам COOLDOWN_SECONDS не применяется (приходит каждое сообщение). Поставь False, чтобы слать только сигнал без текста.
  • MESSAGE_TEXT_LIMIT — макс. длина пересылаемого текста (символов), 0 — без обрезки; действует только при INCLUDE_MESSAGE_TEXT = True.
  • RESPECT_MAX_MUTE — учитывать заглушённые в MAX чаты (по умолчанию True).
  • IGNORED_CHAT_IDS — ручной игнор (страховка).
  • WATCHED_CHAT_IDS — если непусто, следим только за этими чатами.
  • RETRY_DELAY_SECONDS — пауза между повторными попытками доставки (по умолчанию 15); см. «Надёжная доставка».
  • MESSAGE_TTL_SECONDS — сколько всего пытаться доставить сообщение, после чего оно отбрасывается (по умолчанию сутки; 0 — пытаться бесконечно).
  • ERROR_POPUP — показывать balloon-подсказку из трея при сбое отправки (по умолчанию True; False — только лог).

Файлы

  • main.py — нотификатор (включает авторизацию при первом запуске).
  • config.py.example — шаблон настроек (копируется в config.py).
  • start_hidden.vbs — фоновый запуск на Windows без мелькания окна (значок в трее).
  • deploy/max2tg.service — пример systemd-юнита для Linux.
  • cache/ — сессия MAX, логи и очередь доставки outbox/ (доступ к аккаунту, никому не показывай).

Если перестало работать

MAX обновился → обнови обёртку: pip install -U maxapi-python.

Лицензия

MIT.

About

Нотификатор MAX → Telegram: пересылает новые сообщения из MAX в Telegram (Windows/Linux/macOS)

Topics

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors