This commit is contained in:
kislovdm
2026-04-02 22:05:16 +03:00
parent 100f84f4af
commit 198c9a3e2c
+70
View File
@@ -0,0 +1,70 @@
# Telegram → VK: репост из канала в сообщество
Сервис на **ASP.NET Core** слушает посты в **Telegram-канале** (long polling), публикует их на **стене сообщества ВКонтакте** и при редактировании поста в Telegram обновляет соответствующий пост ВК. Соответствие «сообщение Telegram ↔ пост ВК» хранится в **SQLite**.
Поддерживаются:
- текст и подписи к фото;
- несколько фото в одном посте ВК (альбомы из Telegram собираются в один пост);
- правки поста в Telegram → `wall.edit` в ВК.
## Требования
- [.NET 10 SDK](https://dotnet.microsoft.com/download) — для локального запуска без Docker;
- Docker и Compose с поддержкой **Compose file 3.8+** (для `healthcheck.start_period`) — для контейнера.
## Быстрый старт (Docker)
1. Склонируйте репозиторий и перейдите в каталог проекта.
2. Создайте файл `.env` рядом с `docker-compose.yml`. Переменные конфигурации должны соответствовать [соглашению ASP.NET Core](https://learn.microsoft.com/aspnet/core/fundamentals/configuration/#environment-variables): секция и свойство разделяются **двойным подчёркиванием** `__`.
Пример:
```env
TELEGRAM__BotToken=123456:ABC...
TELEGRAM__ChannelId=-1001234567890
VK__AccessToken=vk1.a...
VK__GroupId=123456789
VK__ApiVersion=5.199
```
- **TELEGRAM__ChannelId** — ID канала (для каналов часто вида `-100…`).
- **VK__GroupId** — числовой ID сообщества **без** минуса (в API владелец стены задаётся как отрицательный ID группы).
3. Добавьте бота в канал как администратора (чтобы приходили обновления о постах).
4. Токен ВК должен позволять публикацию от имени сообщества (`wall`, загрузка фото и т.д. — по вашей настройке приложения).
5. Запуск:
```bash
docker compose build
docker compose up -d
```
База по умолчанию: том `./data` → `/data/mapping.sqlite` в контейнере (см. `DB__Path` в `docker-compose.yml`).
## Локальный запуск (без Docker)
```bash
cd src/Telegram2VkBot
dotnet run
```
Перед запуском задайте те же переменные окружения или отредактируйте `appsettings.json` (секции `TELEGRAM`, `VK`, `DB`). Путь к SQLite по умолчанию: `data/mapping.sqlite` относительно рабочей директории.
HTTP-сервер слушает адрес из `ASPNETCORE_URLS` (в Docker: `http://+:8080`).
## Проверка работоспособности
- `GET /health` — общий health; в теге `telegram` проверяется доступность Telegram Bot API.
- `GET /` — перенаправление на `/health`.
## Структура репозитория
| Путь | Назначение |
|------|------------|
| `src/Telegram2VkBot/` | приложение: `ForwardWorker` (polling), `VkApiClient`, `MappingRepository`, health check |
| `Dockerfile` | multi-stage сборка .NET 10, runtime + `curl` для healthcheck |
| `docker-compose.yml` | сервис, порт `8080`, том `data`, healthcheck |