Простой бот на 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 и выше, а также некоторые сторонние библиотеки:
- java-telegram-bot-api от pengrad
- java-vk-bots-long-poll-api от yvasyliev
- webp-imageio (Для конвертации стикеров Telegram из WEBP в PNG)
- 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:
- Создайте сообщество в VK, от лица которого и будет работать бот
- Перейдите в "Управление" -> "Работа с API" -> "Создать ключ".
- Дайте приложению доступ к: документам, фотографиям и сообщениям.
- Скопируйте полученный ключ в поле
vk.apikey
вашегоconfig.properties
. - Перейдите во вкладку "Long Poll API". Включите его и перейдите во вкладку "Типы событий".
- Включите все действия с сообщениями (кроме "Запрет на получение"!)
- Перейдите в раздел "Сообщения", затем в "Настройки для бота".
- Поставьте галочку в пункте "Разрешать добавлять сообщество в беседы".
- Вернитесь на главную страницу вашего сообщества и в меню выберите "Добавить в беседу" и укажите беседу в которую вы хотите добавить бота (Если что, пункт из меню сообщества можно скрыть в настройках, раздел "Меню")
- Перейдите в вашу беседу, откройте список участников и дайте боту "Доступ ко всей переписке".
Теперь разберемся с Telegram:
- Создайте нового бота с помощью @BotFather (команда
/newbot
). - Вы можете назвать его как угодно, но важным моментом является отключение Privacy Mode (команда
/setprivacy
-> Выберите вашего бота -> Disabled) и Включение добавления бота в группы (/setjoingroups
-> Выберите вашего бота -> Enabled). - Пропишите имя вашего бота в
telegram.botname
(Символ @ прописывать НЕ нужно, просто имя вашего бота без пробелов) - Получите токен для вашего нового бота через команду
/token
и пропишите его в полеtelegram.token
. - Добавьте вашего бота в нужный вам чат
Если вы всё сделали правильно, то далее вам нужно:
- Снова запустить бота (
java -jar jmessagestransfer.jar
) - Зайти в вашу беседу в ВК
- Написать сообщение:
!id
- Бот должен написать вам ID текущей беседы. Этот ID вы должны прописать в
vk.chatid
Аналогично поступаем с чатом Telegram:
- Заходим в чат
- Пишем:
!id
- Бот должен написать в ответ ID вашего чата.
- Пропишите 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.
- Сделать отправку вложений одним сообщением, а не через множество отдельных, как это делается сейчас.
- Сделать нативную пересылку аудио-сообщений, а не через файлы как сейчас.
- Полная синхронизация чатов, где одному сообщению в ВК соответствует одно сообщение в Telegram. Такой подход позволит обслуживать действия над сообщениями. Например, когда пользователь поменял сообщение в VK и его также нужно поменять и в Telegram.
- Пересылка событий из беседы/чата VK/Telegram.