# Go Chat Bridge Мультичат-бот для объединения чатов в **Telegram**, **Discord**, **VK**, **MAX** и на **вашем сайте**. ## Возможности - Пересылка сообщений между Telegram, Discord, VK, MAX и сайтом - Отображение имени отправителя в пересылаемых сообщениях (`[TG]`, `[DS]`, `[VK]`, `[MAX]`, `[SITE]`) - **Медиа**: фото, документы, видео, аудио, голосовые, GIF - В **Discord** и **Telegram** медиа отправляются как вложения (файлы) - В **VK** и на **сайт** — ссылками на прокси (без токена бота в URL) - **Медиа-прокси**: ссылки из Telegram не содержат токен бота; файлы отдаются через ваш сервер - **Webhook** для приёма сообщений с сайта (POST `/webhook`) - Загрузка переменных из файла `.env` при запуске - Версия и дата сборки в логах при старте ## Быстрый старт ### 1. Клонирование и зависимости ```bash git clone cd turn-bridge go mod tidy ``` ### 2. Токены и ID - **Telegram**: токен у [@BotFather](https://t.me/BotFather), ID чата/канала - **Discord**: токен приложения, ID канала - **VK**: токен группы с правами `messages`, `groups` (см. раздел ниже), `VK_PEER_ID` беседы, `VK_GROUP_ID` - **MAX**: токен в [платформе MAX](https://dev.max.ru/docs-api) (Чат-боты → Интеграция), ID чата `MAX_CHAT_ID` ### 3. Переменные окружения Создайте `.env` в корне проекта (при запуске бинарника переменные подхватываются автоматически): ```env # Обязательные TELEGRAM_TOKEN=... DISCORD_TOKEN=... VK_TOKEN=... # ID чатов TELEGRAM_CHAT_ID=-1001234567890 DISCORD_CHANNEL_ID=123456789012345678 VK_PEER_ID=2000000002 VK_GROUP_ID=15469861 # MAX (опционально) MAX_TOKEN=... MAX_CHAT_ID=123456789 # MAX_USE_WEBHOOK=true # для production: webhook вместо long polling # MAX_WEBHOOK_SECRET=... # секрет для проверки заголовка X-Max-Bot-Api-Secret # Сайт: отправка сообщений на сайт и приём с сайта SITE_API_URL=https://your-site.com/telebot/chat_api.php SITE_API_TOKEN=... WEBHOOK_API_KEY=... # Медиа-прокси (чтобы в ссылках для VK и сайта не светить токен Telegram) PUBLIC_URL=https://your-bridge-host:8080 MEDIA_PROXY_SECRET=длинная-секретная-строка ``` - **PUBLIC_URL** — базовый URL, по которому доступен этот сервис (порт 8080). По нему отдаются ссылки вида `PUBLIC_URL/media/...`. - **MEDIA_PROXY_SECRET** — секрет для подписи ссылок на медиа. Без него прокси отключён, в VK и на сайт пойдут прямые ссылки Telegram (с токеном бота). ### 4. Запуск **Локально:** ```bash ./go-chat-bridge # или go run . ``` **Docker:** ```bash docker-compose up -d --build ``` При сборке образа можно задать версию: `docker build --build-arg VERSION=1.0.0 -t chat-bridge .` ## Эндпоинты (порт 8080) | Путь | Описание | |-----------|----------| | `POST /webhook` | Приём сообщений с сайта. Параметр `key` (или поле `key` в JSON) = `WEBHOOK_API_KEY`; в теле — `text`, `sender`. | | `POST /max/webhook` | Приём событий от MAX (режим webhook). Проверка заголовка `X-Max-Bot-Api-Secret` при заданном `MAX_WEBHOOK_SECRET`. | | `GET /media/<токен>/<имя_файла>.<расширение>` | Прокси медиа из Telegram. Токен подписан, расширение в URL для корректного отображения и сохранения. | ## Формат сообщений в чатах - `[TG] Имя: текст` — из Telegram - `[DS] Имя: текст` — из Discord - `[VK] Имя: текст` — из VK - `[MAX] Имя: текст` — из MAX - `[SITE] Имя: текст` — с сайта При наличии медиа к сообщению добавляются ссылки (в VK и на сайте — на прокси с расширением в конце, например `.../media/xxx/file_332.jpg`). ## Получение токена VK 1. В настройках группы VK включите Long Poll API и разрешите сообщения. 2. Создайте Standalone-приложение VK, получите токен по ссылке: ``` https://oauth.vk.com/authorize?client_id=ВАШ_CLIENT_ID&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=messages,groups&response_type=token&v=5.131 ``` Скопируйте `access_token` из адресной строки после редиректа. ## Настройка MAX 1. Создайте бота на [платформе MAX](https://dev.max.ru/docs-api) и получите токен. 2. Добавьте бота в групповой чат (бот должен быть администратором для получения событий из групп). 3. Задайте `MAX_TOKEN` и `MAX_CHAT_ID` (ID чата, куда пересылать и откуда принимать сообщения). 4. **Long polling** (по умолчанию) — для разработки и тестирования; запускается автоматически при наличии `MAX_TOKEN`. 5. **Webhook** (production) — задайте `MAX_USE_WEBHOOK=true`, `PUBLIC_URL=https://...` (HTTPS на порту 443) и опционально `MAX_WEBHOOK_SECRET`. При старте бот зарегистрирует подписку `POST /subscriptions` на `PUBLIC_URL/max/webhook`. ## Логи При старте выводятся: - Загрузка `.env` (или сообщение, что файл не найден) - Версия и дата сборки (при сборке через Docker — дата сборки образа) - Состояние медиа-прокси (включён / выключен) - Служебные сообщения `[Telegram]`, `[Media]`, `[Bridge]` при пересылке и отдаче медиа ## Лицензия MIT