Skip to content

Transfer of messages from Telegram to VK and back

License

Notifications You must be signed in to change notification settings

ventureoo/jmessagestransfer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jmessagestransfer

Простой бот на Java для пересылки сообщений из вашей беседы в VK в чат Telegram, и наоборот.

P.S. Код оставляет желать лучшего, так что если кто-нибудь захочет помочь с его улучшением - буду премного благодарен.

Возможности

На текущий момент может:

  • Достаточно быстро пересылать любые сообщения (Telegram <-> VK), за счёт использования Long Poll API (так же нивелирована проблема с капчей которая есть у других аналогичных ботов).
  • Пересылать простые текстовые сообщения.
  • Пересылать изображения
  • Пересылать видео
    • Для VK -> Telegram: пересылается только ссылка на видео
    • Для Telegram -> VK: пересылается файл видео как документ, если он не превышает лимит Telegram на скачивание файлов (20МБ)
  • Опционально может пересылать (видео) стикеры (нужно прописать stickers.enabled=true в config.properties)
    • Размер стикеров можно задать через параметр stickers.size в config.properrties
    • Видеостикеры из Telegram отпрвляются в VK как документ.
  • Пересылать документы
    • Для VK -> Telegram: пересылается только прямая ссылка на документ. Это сделано намеренно дабы обойти ограничение Telegram на загрузку файлов (50 МБ).
    • Для Telegram -> VK: Может пересылать практически все документы, если они не превышают лимит Telegram в 20МБ
  • Пересылать аудиозаписи
    • Для VK -> Telegram: работает нестабильно, т.к. иногда VK просто выдает 404 вместо прямой ссылки на аудио.
    • Telegram -> VK: Отправляется как документ в VK
  • Пересылать ответы на сообщения
  • Пересылать посты со стены ВК (работает как для групп, так и для пользователей)
  • Настраиваться через простой файл config.properties

ВАЖНО: На текущий момент пересылка медиа файлов из Telegram в VK корректно работает только для пользовательских бесед (т.е. для бесед созданных пользователями). При отправке документов/видео/аудиозаписей в беседы созданные сообществами вы будете получать ошибку 404 при попытке их скачать. См. bivashy/java-vk-bots-long-poll-api#100

Установка

Требуется версия Java 8 и выше, а также некоторые сторонние библиотеки:

  1. java-telegram-bot-api от pengrad
  2. java-vk-bots-long-poll-api от yvasyliev
  3. webp-imageio (Для конвертации стикеров Telegram из WEBP в PNG)
  4. SLFJ4

Все зависимости уже есть в готовом JAR файле, никаких дополнительных действий, кроме установки JRE, не требуется.

Если хотите собрать бота вручную, то выполните следующие команды (нужен Maven):

git clone https://github.com/ventureoo/jmessagestransfer.git
cd jmessagestransfer
mvn clean install

Для круглосуточной работы бота может понадобиться хостинг (в принципе не важно какой именно, хоть смартфон на Android).

Настройка

Скачайте уже готовый JAR-файл и запустите его из консоли:

java -jar jmessagestransfer.jar

При первом запуске бот создаст файл настройки config.properties в текущей директории. Последовательно следуйте шагам ниже для его заполнения.

Для начала разберемся с подготовкой сообщества, от лица которого будет работать бот в VK:

  1. Создайте сообщество в VK, от лица которого и будет работать бот
  2. Перейдите в "Управление" -> "Работа с API" -> "Создать ключ".
  3. Дайте приложению доступ к: документам, фотографиям и сообщениям.
  4. Скопируйте полученный ключ в поле vk.apikey вашего config.properties.
  5. Перейдите во вкладку "Long Poll API". Включите его и перейдите во вкладку "Типы событий".
  6. Включите все действия с сообщениями (кроме "Запрет на получение"!)
  7. Перейдите в раздел "Сообщения", затем в "Настройки для бота".
  8. Поставьте галочку в пункте "Разрешать добавлять сообщество в беседы".
  9. Вернитесь на главную страницу вашего сообщества и в меню выберите "Добавить в беседу" и укажите беседу в которую вы хотите добавить бота (Если что, пункт из меню сообщества можно скрыть в настройках, раздел "Меню")
  10. Перейдите в вашу беседу, откройте список участников и дайте боту "Доступ ко всей переписке".

Теперь разберемся с Telegram:

  1. Создайте нового бота с помощью @BotFather (команда /newbot).
  2. Вы можете назвать его как угодно, но важным моментом является отключение Privacy Mode (команда /setprivacy -> Выберите вашего бота -> Disabled) и Включение добавления бота в группы (/setjoingroups -> Выберите вашего бота -> Enabled).
  3. Пропишите имя вашего бота в telegram.botname (Символ @ прописывать НЕ нужно, просто имя вашего бота без пробелов)
  4. Получите токен для вашего нового бота через команду /token и пропишите его в поле telegram.token.
  5. Добавьте вашего бота в нужный вам чат

Если вы всё сделали правильно, то далее вам нужно:

  1. Снова запустить бота (java -jar jmessagestransfer.jar)
  2. Зайти в вашу беседу в ВК
  3. Написать сообщение: !id
  4. Бот должен написать вам ID текущей беседы. Этот ID вы должны прописать в vk.chatid

Аналогично поступаем с чатом Telegram:

  1. Заходим в чат
  2. Пишем: !id
  3. Бот должен написать в ответ ID вашего чата.
  4. Пропишите ID чата в telegram.chatid (ID должен содержать знак - впереди, но только один!)

Не забываем сохранять все изменения в файле config.properties.

Прервите работу бота, и запустите его снова. После этого пересылка сообщений должна заработать.

Итого у вас должен получиться примерно такой файл config.properties вашего бота:

vk.chatid=2000000001
vk.apikey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
telegram.token=NNNNNNNNNN:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
telegram.chatid=-652557109
telegram.botname=yourbotname
stickers.size=256
stickers.enabled=true

Обратная связь

Если есть предложения по улучшению кода или проблема с пересылкой определенного рода сообщений, то прошу создать новый Issue прямо здесь или написать мне в Telegram - @ventureo.

TODO

  • Сделать отправку вложений одним сообщением, а не через множество отдельных, как это делается сейчас.
  • Сделать нативную пересылку аудио-сообщений, а не через файлы как сейчас.
  • Полная синхронизация чатов, где одному сообщению в ВК соответствует одно сообщение в Telegram. Такой подход позволит обслуживать действия над сообщениями. Например, когда пользователь поменял сообщение в VK и его также нужно поменять и в Telegram.
  • Пересылка событий из беседы/чата VK/Telegram.