Переносит новые посты из групп ВКонтакте в Telegram-каналы: текст, фотографии, гифки, документы, ссылки, опросы и репосты с именем автора.
- Несколько групп и каналов в одном запуске, любая группа может идти в любой канал.
- Фотографии уходят альбомом, больше десяти разбиваются на несколько альбомов.
- Длинный текст идёт после фотографий отдельными сообщениями, деление по абзацам.
- Упоминания и ссылки из разметки ВКонтакте становятся обычными ссылками.
- Рекламные посты и посты для донов не переносятся.
- При первом запуске старые посты не публикуются, после перезапуска опубликованное не повторяется.
- Если Telegram отклонил пост, бот пропускает его и идёт дальше.
Видео приходит ссылкой на ВКонтакте, потому что API не отдаёт сами файлы.
Понадобятся два токена.
Токен ВКонтакте: создайте приложение в кабинете разработчика на dev.vk.com и скопируйте сервисный ключ доступа из его настроек. Этого ключа хватает, чтобы читать открытые группы.
Токен Telegram: создайте бота через @BotFather и добавьте его администратором в канал с правом публиковать сообщения.
cp .env.example .env
cp routes.example.toml routes.toml
docker compose up -d
Токены впишите в .env, а группы и каналы в routes.toml.
Без Docker:
uv sync
uv run vk2tg
Каждая пара группа и канал описывается отдельным блоком в routes.toml:
[[route]]
vk = "habr"
telegram = "@habr_mirror"
[[route]]
vk = "https://vk.com/club123"
telegram = -1001234567890
reposts = false
source_link = false| поле | по умолчанию | что делает |
|---|---|---|
vk |
короткое имя группы, club123 или ссылка на неё |
|
telegram |
@имя канала или его числовой id |
|
reposts |
true |
переносить ли репосты |
source_link |
true |
добавлять ли ссылку на пост в ВКонтакте |
| переменная | по умолчанию | что делает |
|---|---|---|
VK2TG_VK_TOKEN |
сервисный ключ приложения ВКонтакте, обязательно | |
VK2TG_TELEGRAM_TOKEN |
токен бота, обязательно | |
VK2TG_INTERVAL |
60 |
как часто проверять группы, в секундах |
VK2TG_ROUTES_FILE |
routes.toml |
путь к файлу с группами и каналами |
VK2TG_DATABASE_URL |
sqlite+aiosqlite:///data/vk2tg.db |
где хранить последние опубликованные посты |
uv sync
uv run pytest
uv run ruff check .
uv run mypy src tests
MIT, текст в файле LICENSE.
