Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ventureoo/jmessagestransfer

Transfer of messages from Telegram to VK and back
https://github.com/ventureoo/jmessagestransfer

bot java telegram telegram-bot telegram-transfer-bot vk vkbot

Last synced: 3 days ago
JSON representation

Transfer of messages from Telegram to VK and back

Awesome Lists containing this project

README

        

# jmessagestransfer

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

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

# Возможности

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

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

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

# Установка

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

1. [java-telegram-bot-api](https://github.com/pengrad/java-telegram-bot-api) от pengrad
2. [java-vk-bots-long-poll-api](https://github.com/yvasyliev/java-vk-bots-long-poll-api) от yvasyliev
3. [webp-imageio](https://github.com/sejda-pdf/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).
4. Пропишите имя вашего бота в ``telegram.botname`` (Символ @ прописывать НЕ нужно, просто имя вашего бота без пробелов)
5. Получите токен для вашего нового бота через команду ``/token`` и пропишите его в поле ``telegram.token``.
6. Добавьте вашего бота в нужный вам чат

Если вы всё сделали правильно, то далее вам нужно:
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](https://github.com/ventureoo/jmessagestransfer/issues/new) прямо здесь или написать мне в Telegram - @ventureo.

# TODO

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