mirror of
https://github.com/EDeev/vkrepost_to_tg.git
synced 2026-10-07 20:49:50 +03:00
87 lines
4.9 KiB
Markdown
87 lines
4.9 KiB
Markdown
# Portal in VK
|
||
|
||
**Русский** · [English](README.en.md)
|
||
|
||
[](https://github.com/EDeev/vkrepost_to_tg/actions/workflows/ci.yml)
|
||
[](https://github.com/EDeev/vkrepost_to_tg/actions/workflows/docker.yml)
|
||
[](LICENSE)
|
||
|
||
Telegram-бот, который пересылает новые посты со страниц и сообществ ВКонтакте в Telegram: подписываешься
|
||
командой `/add <короткое имя>`, и каждый новый пост приходит сообщением — с фото, обложками видео,
|
||
документами, аудио, опросами и репостами.
|
||
|
||
**Статус:** личный проект, завершён · бот [@vkportalbot](https://t.me/vkportalbot)
|
||
|
||
**Стек:** Python 3.12 · aiogram 3 · vk_api · SQLite · Docker
|
||
|
||
## Возможности
|
||
|
||
- До 10 подписок на пользователя: личные страницы, группы и паблики
|
||
- Пост переводится в формат Telegram:
|
||
- фото, обложки видео и картинки-документы — альбомом;
|
||
- аудио — отдельным сообщением;
|
||
- опросы, ссылки и документы — в тексте;
|
||
- упоминания `[id1|Имя]` — ссылками;
|
||
- у репостов — оба автора и комментарий.
|
||
- Ограничения Telegram учтены: одиночное фото, альбомы до 10 элементов, длинный текст отдельными
|
||
сообщениями
|
||
- `/last_post` — последний пост любой страницы, `/update` — прислать пост заново с актуальными данными
|
||
- Свой токен VK (необязательно) даёт посты закрытых страниц, на которые вы подписаны, и лайки из Telegram
|
||
(`/like` ответом на пост)
|
||
|
||
> [!IMPORTANT]
|
||
> Если вы присылаете боту свой токен VK, он хранится на сервере бота. Удалить его можно командой
|
||
> `/logout`, полностью отозвать доступ — в настройках VK, раздел «Приложения и сайты».
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
git clone https://github.com/EDeev/vkrepost_to_tg.git && cd vkrepost_to_tg
|
||
cp .env.example .env # BOT_TOKEN и сервисный ключ приложения VK
|
||
docker compose up -d
|
||
```
|
||
|
||
Готовый образ: `docker pull ghcr.io/edeev/vkrepost_to_tg` или `docker pull dcr.deev.su/edeev/vkrepost_to_tg`.
|
||
Базы SQLite создаются при первом запуске.
|
||
|
||
Без Docker: Python 3.12, `pip install -r requirements.txt`, затем
|
||
`cd code && BOT_TOKEN=… VK_SERVICE_TOKEN=… python bot.py`.
|
||
|
||
## Как устроено
|
||
|
||
```
|
||
code/bot.py запуск и фоновый опрос подписок раз в минуту
|
||
code/handlers.py команды: подписки, последний пост, лайки, токен VK
|
||
code/vk_scripts.py запросы к VK API и разбор поста
|
||
code/scripts.py пост → текст в HTML и медиа Telegram, отправка с учётом ограничений
|
||
code/sql.py пользователи, подписки и последний пост каждой страницы (SQLite)
|
||
```
|
||
|
||
Для закрытой страницы бот берёт токен одного из её подписчиков, для открытых — сервисный ключ. Запросы
|
||
к VK идут в отдельном потоке, чтобы бот не замирал. Текст из ВК экранируется.
|
||
|
||
## Разработка
|
||
|
||
```bash
|
||
pip install -r requirements-dev.txt
|
||
ruff check --select E9,F code tests && pytest
|
||
```
|
||
|
||
Тесты проверяют разбор постов (экранирование, упоминания, ссылки, репосты, лимит альбома) и отправку
|
||
(одиночное фото, длинный текст, аудио). Docker-образ собирается по тегу `v*` и публикуется в GitHub
|
||
Packages и `dcr.deev.su`.
|
||
|
||
## Лицензия
|
||
|
||
MIT — см. [LICENSE](LICENSE).
|
||
|
||
## Автор
|
||
|
||
**Деев Егор Викторович** — [GitHub](https://github.com/EDeev) · [Telegram](https://t.me/DeevEgor) · [egor@deev.space](mailto:egor@deev.space)
|
||
|
||
---
|
||
|
||
<div align="center">
|
||
<sub>⭐ Если проект оказался полезным, поставьте звёздочку на GitHub!</sub>
|
||
<p><sub>Сделано с ❤️ — <a href="https://deev.space">deev.space</a></sub></p>
|
||
</div>
|