Public Access
118 lines
5.1 KiB
Markdown
118 lines
5.1 KiB
Markdown
# 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
|