Files
turn-bridge/README.md
T

118 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Go Chat Bridge
Мультичат-бот для объединения чатов в **Telegram**, **Discord**, **VK** и на **вашем сайте**.
## Возможности
- Пересылка сообщений между Telegram, Discord, VK и сайтом
- Отображение имени отправителя в пересылаемых сообщениях (`[TG]`, `[DS]`, `[VK]`, `[SITE]`)
- **Медиа**: фото, документы, видео, аудио, голосовые, GIF
- В **Discord** и **Telegram** медиа отправляются как вложения (файлы)
- В **VK** и на **сайт** — ссылками на прокси (без токена бота в URL)
- **Медиа-прокси**: ссылки из Telegram не содержат токен бота; файлы отдаются через ваш сервер
- **Webhook** для приёма сообщений с сайта (POST `/webhook`)
- Загрузка переменных из файла `.env` при запуске
- Версия и дата сборки в логах при старте
## Быстрый старт
### 1. Клонирование и зависимости
```bash
git clone <repo_url>
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`
### 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
# Сайт: отправка сообщений на сайт и приём с сайта
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`. |
| `GET /media/<токен>/<имя_файла>.<расширение>` | Прокси медиа из Telegram. Токен подписан, расширение в URL для корректного отображения и сохранения. |
## Формат сообщений в чатах
- `[TG] Имя: текст` — из Telegram
- `[DS] Имя: текст` — из Discord
- `[VK] Имя: текст` — из VK
- `[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` из адресной строки после редиректа.
## Логи
При старте выводятся:
- Загрузка `.env` (или сообщение, что файл не найден)
- Версия и дата сборки (при сборке через Docker — дата сборки образа)
- Состояние медиа-прокси (включён / выключен)
- Служебные сообщения `[Telegram]`, `[Media]`, `[Bridge]` при пересылке и отдаче медиа
## Лицензия
MIT