Исправил постинг токена в ссылках

This commit is contained in:
Taz
2026-03-07 19:14:58 +01:00
parent 34e6a4562c
commit d300bc9824
9 changed files with 270 additions and 91 deletions
+104 -86
View File
@@ -1,99 +1,117 @@
## Пример .env
Создайте файл `.env` в корне проекта и заполните:
```env
TELEGRAM_TOKEN=your_telegram_token
DISCORD_TOKEN=your_discord_token
VK_TOKEN=your_vk_token
TELEGRAM_CHAT_ID=-1001234567890
DISCORD_CHANNEL_ID=123456789012345678
VK_PEER_ID=2000000001
VK_GROUP_ID=2000000001
```
docker-compose автоматически подхватит эти переменные.
# Go Chat Bridge
Мультичат-бот для объединения Telegram, Discord и VK.
Мультичат-бот для объединения чатов в **Telegram**, **Discord**, **VK** и на **вашем сайте**.
## Возможности
- Пересылка сообщений между Telegram, Discord и VK
- Отображение имени отправителя в пересылаемых сообщениях
- Поддержка работы с группами VK через LongPoll
- Пересылка сообщений между 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
```
2. Установите зависимости:
```bash
go mod tidy
```
3. Создайте и настройте ботов/токены для всех платформ:
- Telegram: получите токен у @BotFather
- Discord: создайте приложение и получите токен
- VK: получите токен группы с правами messages, groups (см. инструкцию ниже)
4. Укажите переменные окружения:
```bash
export TELEGRAM_TOKEN=... # токен Telegram-бота
export DISCORD_TOKEN=... # токен Discord-бота
export VK_TOKEN=... # токен группы VK
export TELEGRAM_CHAT_ID=... # id чата/канала Telegram
export DISCORD_CHANNEL_ID=... # id канала Discord
export VK_PEER_ID=... # peer_id беседы VK
export VK_GROUP_ID=... # id группы VK
```
5. Запустите приложение:
```bash
go run .
```
### 1. Клонирование и зависимости
## Получение токена VK с нужными правами
1. В настройках группы VK включите Long Poll API и разрешите сообщения.
2. Получите токен через интерфейс группы или через OAuth:
- Создайте 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 из адресной строки.
## Формат пересылаемых сообщений
- `[TG] user: текст` — из Telegram
- `[DS] user: текст` — из Discord
- `[VK] user: текст` — из VK (имя пользователя VK)
## Пример .env
Создайте файл `.env` в корне проекта и заполните:
```env
TELEGRAM_TOKEN=your_telegram_token
DISCORD_TOKEN=your_discord_token
VK_TOKEN=your_vk_token
TELEGRAM_CHAT_ID=-1001234567890
DISCORD_CHANNEL_ID=123456789012345678
VK_PEER_ID=2000000001
VK_GROUP_ID=2000000001
SITE_API_URL=https://turn-guild.ru/
SITE_API_TOKEN=website_webhook_token
WEBHOOK_API_KEY=brige_webhook_token
```bash
git clone <repo_url>
cd turn-bridge
go mod tidy
```
docker-compose автоматически подхватит эти переменные.
## TODO
- Поддержка вложений и файлов
- Админ-команды
- Логирование событий
### 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