Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/ventureoo/jmessagestransfer
- Owner: ventureoo
- License: gpl-3.0
- Created: 2022-05-13T15:44:51.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-05-14T08:03:02.000Z (over 2 years ago)
- Last Synced: 2024-11-02T02:22:24.557Z (about 2 months ago)
- Topics: bot, java, telegram, telegram-bot, telegram-transfer-bot, vk, vkbot
- Language: Java
- Homepage:
- Size: 31.3 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.