Bring your vk chat history – including videos and documents – to Telegram.
Приложение позволяет перенести беседу из vk в Telegram, сохранив нативное отображение импортированных сообщений.
-
Установите python3.10 или новее
-
Установите
python3.10-distutils
, если у вас не Windows -
Установите ffmpeg. Он используется для загрузки видео
-
Склонируйте репозиторий:
$ git clone https://github.com/enscogitans/vk-tg-chat-transferring.git
-
Установите зависимости, используя pipenv:
$ python3.10 -m pip install pipenv --user $ cd vk-tg-chat-transferring $ pipenv install
Но можно использовать и просто
python3.10 -m pip install -r requirements.txt
-
Войдите в виртуальное окружение:
$ pipenv shell
- Для vk получите ID приложения с доступом к
messages
- Нужен только ID, access token получать не нужно
- Для Telegram получите api_id и api_hash
- Запишите эти данные в env файл
cp env.example env
- Заполните в
env
полученныеVK_API_ID
,TG_API_ID
иTG_API_HASH
Беседа переносится в несколько этапов. За каждый этап отвечает своя утилита. На этой странице указан один из вариантов их применения. Для каждой утилиты есть README.
Войдите в vk:
$ ./main.py login vk
И в Telegram:
$ ./main.py login tg
Ключ доступа vk истечёт через 24 часа. Сессия в Telegram бессрочна.
Подробнее в README.
- Откройте браузер и перейдите на страницу беседы vk
- Скопируйте URL страницы, например:
https://vk.com/im?sel=c142
- Выполните команду, подставив полученный адрес:
$ ./main.py export --chat <URL>
Личные сообщения тоже поддерживаются.
Подробнее в README.
Этот этап нужен, чтобы Telegram понял, кто из пользователей мессенджера какое импортированное сообщение написал.
- Создайте файл с контактами:
$ ./main.py contacts prepare
- Откройте сгенерированный файл
contacts_mapping.yaml
и заполните поляtg_name
- Используйте команду
./main.py contacts list
, чтобы посмотреть список своих контактов
- Используйте команду
- Убедитесь, что имена заполнены правильно:
$ ./main.py contacts check
Чтобы на практике проверить, корректно ли Telegram распознал указанные контакты, изучите инструкцию ниже.
Подробнее в README.
Выполните:
$ ./main.py convert
Подробнее в README.
На этом этапе выбирается беседа, в которую будут импортированы сообщения.
Групповой чат vk переносится в супергруппу Telegram. Личные сообщения vk переносятся в личные сообщения Telegram.
-
Найти уже существующий чат:
$ ./main.py chats list
-
Создать супергруппу:
$ ./main.py chats create --use-history --photo --mute --invite
Эта команда установит название и фото, как у оригинального чата vk, заблокирует отправку сообщений в супергруппу и добавит всех собеседников из файла контактов.
Запомните id полученной беседы.
Подробнее в README.
Подставив id беседы, полученный в предыдущем пункте, выполните:
$ ./main.py import <CHAT_ID>
Подробнее в README.
Если в пункте 5 вы создали супергруппу и заблокировали отправку сообщений, то разблокируйте её, выполнив:
$ ./main.py chats unmute <CHAT_ID>
Подробнее в README.
Вы можете проверить, как Telegram распознаёт контакты, которые вы указали в пункте 3.
- Создайте фиктивную историю чата:
$ ./main.py convert --dummy-input
- Создайте супергруппу и получите её id:
$ ./main.py chats create --title "Test contacts"
- Импортируйте фиктивные сообщения:
$ ./main.py import <CHAT_ID>
- Откройте созданную беседу на своём устройстве
Если контакт не сопоставится, то у его сообщения имя пользователя будет совпадать с именем, указанным в файле с контактами.
Если контакт сопоставится успешно, то у сообщения этого контакта вместо имени пользователя будет отображён его номер телефона. Если вы добавите этого пользователя в чат, то сообщение станет выглядеть так, будто бы оно было написано им самим: около сообщения появится настоящая аватарка, а номер телефона сменится на имя пользователя.
- Сначала добавьте всех пользователей в чат, и только потом начинайте импорт
- Иначе для каждого пользователя сопоставится только по 100 последних сообщений. У всех более старых сообщений вместо реального имени так и будет висеть номер телефона
- Даже если вы добавите пользователя в процессе импорта, это не поможет
- Импорт личных сообщений работает хорошо, даже если при импорте группового чата контакт не сопоставляется Telegram'ом
- Можно много раз импортировать сообщения в один и тот же чат
- В супергруппу можно импортировать сообщения не чаще, чем раз в 5 минут
- На личные сообщения такого ограничения нет
- Если в чате уже есть сообщения, то могут поплыть как даты импортированных, так и даты настоящих сообщений
- Как минимум это верно, если самое последнее настоящее сообщение написано позже, чем самое первое импортируемое