Многофункциональный, написанный одной ногой на питоне бот для пересылки сообщений из ВК в Telegram и наоборот. Изначально он планировался исключительно для личного пользования, однако я передумал и решил выложить в общий доступ в связи с тем, что, возможно, он может кому-то понадобиться.
- Пересылка текстовых сообщений из ВК в Telegram и наоборот
- Пересылка изображений/стикеров/аудио/видео/документов/голосовых сообщений (Только из ВК в Telegram!)
- Пересылка стикеров из Telegram в ВК
- Поддержка личных сообщений и групповых чатов
- Удобный файл конфигурации
- Поддержка прокси для Telegram
Для работы вам понадобиться:
- Python 3
- Git клиент ( я использую Git Bash )
- Аккаунт в ВК ( будем использовать в качестве ботинка )
- Бот в Telegram ( можно создать через BotFather )
- (При желании) Хостинг, на котором будет работать бот (Например, PythonAnywhere)
Для начала займёмся установкой скрипта. Открываем Git и пишем:
git clone https://github.com/Whiletruedoend/Vk-to-telegram-transfer-bot
cd Vk-to-telegram-transfer-bot
pip3 install -r requirements.txt
или же (если вдруг не сработало):
python -m pip install -r requirements.txt
Для запуска в docker'е необходимо собрать образ и запустить его. Для сборки образа необходимо в корневой директории проекта выполнить команду
docker build . -t vk_to_telegram_transfer_bot
Для запуска образа необходимо в корневой директории проекта выполнить команду
docker run vk_to_telegram_transfer_bot
Для запуска в docker'е необходимо собрать образ и запустить его. Для сборки образа необходимо в корневой директории проекта выполнить команду
docker-compose up -d
Все настройки будут производиться в файле config.py Для начала откроем его и вставим логин и пароль от аккаунта в ВК (таблицы ‘vk_login’ и ‘vk_password’ ) и токен бота в Telegram’e ( таблица ‘telegram_token’ )
Далее мы будем настраивать чат для передачи сообщений. Для этого необходимо:
- Создать чат в Telegram’e
- Добавить туда бота
- Написать ‘Дай ID’, после чего бот должен написать вам ID чата
- Взять ID чата/пользователя, откуда/куда будут пересылаться сообщения
- Добавить в конфиг поля:
setCell( "vk_<chatid/userid>", '-<telegramid>' )
setCell( "t_-<telegramid>", '<chatid/userid>' )
, где <chatid/userid> - локальный ID чата для бота (!), либо ID пользователя, с которым будет связан чат в Telegram’e, а - - тот самый ID чата, который мы получили, прописав команду ‘Дай ID’. Отбратите внимание, что - всегда идёт с минусом в начале, кроме того, знаки <> прописывать не нужно! ‘Живой пример’:
setCell( "vk_1", '-249416176' )
setCell( "t_-249416176", '1' )
Здесь мы видим, что для аккаунта ВК из чата 1 все сообщения будут пересылаться в чат '-249416176' в Telegram, и наоборот. Надеюсь, всё понятно, по какому принципу нужно всё делать. P.S. Я дальнейшем я планирую облегчить систему создания тоннелей ВК <===> телега, но, пока что, пусть всё останется так.
У бота в Telegram должен быть:
- Отключен режим приватности ( Bot Father —> Ваш бот —> Bot Settings —> Group Privacy —> Turn Off )
- Включена поддержка групповых чатов ( Bot Father —> Ваш бот —> Bot Settings —> Allow groups? Turn groups On )
Установка бота на хостинг + его настройка
Доработать отправку картинок ( Сейчас устроено так, что если отправлено несколько фоточек в ВК, то в телегу придёт только первая)Done!Улучшить отображение пересланных сообщений ( сейчас это еле работает, спасибо хоть на этом)Done!Сделать реагирование на различные события (Ex. при обновлении аватарки чата в ВК, инвайте/кике пользователя, бот оповещал об этом в Telegram )Done!При отправке стикера из Telegram в ВК он конвертировался из формата webp в png и отправлялся как картинка ( Я уже знаю как это можно сделать, но не могу найти годный конвертер )Done!- Переписать проект с нуля
- Настроить передачу картинок/видео/файлов/документов из Telegram в ВК
- Более удобная конфигурация прямо в боте
- Синхронизация чатов (Название, аватарка)
Если у вас есть какие-то идеи или собственные наработки, или же просто вопросы по поводу работоспособности кода, то вы всегда можете обратиться ко мне по следующим адресам:
- Matrix
- Jabber: [email protected]