Files
2026-04-02 22:05:16 +03:00

71 lines
3.8 KiB
Markdown
Raw Permalink 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.
# 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 |