107 lines
4.8 KiB
Markdown
107 lines
4.8 KiB
Markdown
# max2telegram
|
||
|
||
Мост для пересылки сообщений из Max в Telegram.
|
||
|
||
## Что умеет
|
||
|
||
- Слушает входящие сообщения в Max через `PyMax`.
|
||
- Пересылает в Telegram:
|
||
- текст;
|
||
- фото;
|
||
- видео.
|
||
- Для нескольких вложений отправляет единым альбомом (`sendMediaGroup`).
|
||
- В тексте указывает источник в формате: `MAX: <ник> / <название чата>`.
|
||
- Защищает от дублей через SQLite (`forwarded_messages`).
|
||
|
||
## Логика выбора чата в Telegram
|
||
|
||
1. Берется название чата из Max.
|
||
2. Если у бота найден Telegram-чат с таким же названием, сообщение отправляется туда.
|
||
3. Если совпадения нет, сообщение уходит в личку на `TELEGRAM_FALLBACK_USER_ID`.
|
||
|
||
## Важно про поиск чатов
|
||
|
||
Поиск чатов выполняется через `getUpdates`, поэтому:
|
||
|
||
- бот должен быть добавлен в нужные Telegram-чаты;
|
||
- в этих чатах должен быть хотя бы один апдейт (сообщение/событие), чтобы чат появился в апдейтах.
|
||
|
||
## Переменные окружения
|
||
|
||
Используется файл `.env` в корне проекта.
|
||
|
||
Пример смотри в `.env.sample`.
|
||
|
||
Обязательные переменные:
|
||
|
||
- `MAX_PHONE` - номер телефона аккаунта Max;
|
||
- `MAX_WORK_DIR` - директория сессии Max (обычно `cache`);
|
||
- `TELEGRAM_BOT_TOKEN` - токен Telegram-бота;
|
||
- `TELEGRAM_FALLBACK_USER_ID` - id пользователя Telegram для fallback отправки;
|
||
- `SQLITE_PATH` - путь к SQLite базе (например `max2telegram.db`).
|
||
|
||
Дополнительно:
|
||
|
||
- `TZ` - таймзона контейнера;
|
||
- `PYTHONUNBUFFERED` - режим буферизации вывода Python.
|
||
|
||
## Быстрый старт (Docker)
|
||
|
||
1. Скопировать шаблон:
|
||
- `copy .env.sample .env` (Windows)
|
||
2. Заполнить `.env` своими значениями.
|
||
3. Пройти аутентификацию Max (см. ниже).
|
||
4. Запустить:
|
||
- `docker compose up -d --build`
|
||
5. Логи:
|
||
- `docker compose logs -f`
|
||
|
||
## Аутентификация Max
|
||
|
||
Перед запуском приложения необходимо пройти аутентификацию Max, чтобы создать сессионный файл.
|
||
|
||
### Локально (без Docker)
|
||
|
||
1. Убедиться, что `.env` заполнен, особенно `MAX_PHONE`.
|
||
2. Запустить скрипт аутентификации:
|
||
- `python auth.py`
|
||
3. Следовать инструкциям в консоли (ввод кода подтверждения и т.д.).
|
||
4. После успешной аутентификации сессионный файл сохранится в директории `MAX_WORK_DIR` (по умолчанию `cache`).
|
||
|
||
### В Docker
|
||
|
||
1. Запустить контейнер с интерактивной сессией:
|
||
- `docker compose run --rm max2telegram python auth.py`
|
||
2. Следовать инструкциям в консоли.
|
||
3. После завершения запустить основное приложение:
|
||
- `docker compose up -d`
|
||
|
||
## Запуск локально (без Docker)
|
||
|
||
1. Установить зависимости:
|
||
- `pip install -r src/requirements.txt`
|
||
2. Создать `.env` на основе `.env.sample`.
|
||
3. Пройти аутентификацию Max:
|
||
- `python auth.py`
|
||
4. Запустить приложение:
|
||
- `python src/main.py`
|
||
|
||
## Структура проекта
|
||
|
||
- `auth.py` - скрипт аутентификации Max (создание сессии).
|
||
- `src/main.py` - точка входа, инициализация клиентов.
|
||
- `src/bridge.py` - основная логика маршрутизации и отправки.
|
||
- `src/telegram_api.py` - Telegram Bot API клиент.
|
||
- `src/max_parser.py` - разбор входящих сообщений Max.
|
||
- `src/storage.py` - SQLite слой для дедупликации.
|
||
- `src/config.py` - загрузка конфигурации из окружения.
|
||
|
||
## Типичные проблемы
|
||
|
||
- Фото/видео не приходят:
|
||
- проверь, что бот имеет доступ к целевому чату;
|
||
- проверь валидность URL вложений и токена бота.
|
||
- Сообщения идут только в fallback:
|
||
- бот еще не видел апдейты из нужного чата;
|
||
- название чата в Max и Telegram не совпадает.
|