Skip to content

Bring your vk chat history – including videos and documents – to Telegram

Notifications You must be signed in to change notification settings

enscogitans/vk-tg-chat-transferring

Repository files navigation

vk-tg-chat-transferring

Bring your vk chat history – including videos and documents – to Telegram.

https://core.telegram.org/api/import

Приложение позволяет перенести беседу из vk в Telegram, сохранив нативное отображение импортированных сообщений.

Установка

  1. Установите python3.10 или новее

  2. Установите python3.10-distutils, если у вас не Windows

  3. Установите ffmpeg. Он используется для загрузки видео

  4. Склонируйте репозиторий:

    $ git clone https://github.com/enscogitans/vk-tg-chat-transferring.git
  5. Установите зависимости, используя pipenv:

    $ python3.10 -m pip install pipenv --user
    $ cd vk-tg-chat-transferring
    $ pipenv install

    Но можно использовать и просто python3.10 -m pip install -r requirements.txt

  6. Войдите в виртуальное окружение:

    $ pipenv shell

Получение доступа к API vk и Telegram

  1. Для vk получите ID приложения с доступом к messages
    • Нужен только ID, access token получать не нужно
  2. Для Telegram получите api_id и api_hash
  3. Запишите эти данные в env файл
    1. cp env.example env
    2. Заполните в env полученные VK_API_ID, TG_API_ID и TG_API_HASH

Перенос беседы

Беседа переносится в несколько этапов. За каждый этап отвечает своя утилита. На этой странице указан один из вариантов их применения. Для каждой утилиты есть README.

1. Авторизация

Войдите в vk:

$ ./main.py login vk

И в Telegram:

$ ./main.py login tg

Ключ доступа vk истечёт через 24 часа. Сессия в Telegram бессрочна.

Подробнее в README.

2. Экспорт беседы из vk

  1. Откройте браузер и перейдите на страницу беседы vk
  2. Скопируйте URL страницы, например: https://vk.com/im?sel=c142
  3. Выполните команду, подставив полученный адрес:
    $ ./main.py export --chat <URL>

Личные сообщения тоже поддерживаются.

Подробнее в README.

3. Подготовка файла с контактами

Этот этап нужен, чтобы Telegram понял, кто из пользователей мессенджера какое импортированное сообщение написал.

  1. Создайте файл с контактами:
    $ ./main.py contacts prepare
  2. Откройте сгенерированный файл contacts_mapping.yaml и заполните поля tg_name
    • Используйте команду ./main.py contacts list, чтобы посмотреть список своих контактов
  3. Убедитесь, что имена заполнены правильно:
    $ ./main.py contacts check

Чтобы на практике проверить, корректно ли Telegram распознал указанные контакты, изучите инструкцию ниже.

Подробнее в README.

4. Конвертация сообщений и загрузка файлов

Выполните:

$ ./main.py convert

Подробнее в README.

5. Создание супергруппы в Telegram (или выбор уже существующего чата)

На этом этапе выбирается беседа, в которую будут импортированы сообщения.

Групповой чат vk переносится в супергруппу Telegram. Личные сообщения vk переносятся в личные сообщения Telegram.

  • Найти уже существующий чат:

    $ ./main.py chats list
  • Создать супергруппу:

    $ ./main.py chats create --use-history --photo --mute --invite

    Эта команда установит название и фото, как у оригинального чата vk, заблокирует отправку сообщений в супергруппу и добавит всех собеседников из файла контактов.

Запомните id полученной беседы.

Подробнее в README.

6. Импорт сообщений в Telegram

Подставив id беседы, полученный в предыдущем пункте, выполните:

$ ./main.py import <CHAT_ID>

Подробнее в README.

7. Завершение

Если в пункте 5 вы создали супергруппу и заблокировали отправку сообщений, то разблокируйте её, выполнив:

$ ./main.py chats unmute <CHAT_ID> 

Подробнее в README.

Проверка сопоставления контактов

Вы можете проверить, как Telegram распознаёт контакты, которые вы указали в пункте 3.

  1. Создайте фиктивную историю чата:
    $ ./main.py convert --dummy-input
  2. Создайте супергруппу и получите её id:
    $ ./main.py chats create --title "Test contacts"
  3. Импортируйте фиктивные сообщения:
    $ ./main.py import <CHAT_ID>
  4. Откройте созданную беседу на своём устройстве

Если контакт не сопоставится, то у его сообщения имя пользователя будет совпадать с именем, указанным в файле с контактами.

Если контакт сопоставится успешно, то у сообщения этого контакта вместо имени пользователя будет отображён его номер телефона. Если вы добавите этого пользователя в чат, то сообщение станет выглядеть так, будто бы оно было написано им самим: около сообщения появится настоящая аватарка, а номер телефона сменится на имя пользователя.

Заметки по импорту

  1. Сначала добавьте всех пользователей в чат, и только потом начинайте импорт
    • Иначе для каждого пользователя сопоставится только по 100 последних сообщений. У всех более старых сообщений вместо реального имени так и будет висеть номер телефона
    • Даже если вы добавите пользователя в процессе импорта, это не поможет
  2. Импорт личных сообщений работает хорошо, даже если при импорте группового чата контакт не сопоставляется Telegram'ом
  3. Можно много раз импортировать сообщения в один и тот же чат
    • В супергруппу можно импортировать сообщения не чаще, чем раз в 5 минут
    • На личные сообщения такого ограничения нет
  4. Если в чате уже есть сообщения, то могут поплыть как даты импортированных, так и даты настоящих сообщений
    • Как минимум это верно, если самое последнее настоящее сообщение написано позже, чем самое первое импортируемое

About

Bring your vk chat history – including videos and documents – to Telegram

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages