Skip to content

Автоматический постинг записей из сообществ ВКонтакте в каналы и группы Telegram.

License

Notifications You must be signed in to change notification settings

DUB1401/VK-Telegram-Poster

Repository files navigation

VK-Telegram Poster

VK-Telegram Poster – это инструмент автопостинга записей из сообществ ВКонтакте в каналы и группы Telegram с возможностью настройки пользовательского скрипта обработки постов. Поддерживается как Callback API, так и Open API.

Для отправки сообщений используется буфер ожидания, что позволяет автопостеру корректно работать с включённым медленным режимом группы (чтобы игнорировать медленный режим или отправлять сообщения в канал, бот должен иметь права администратора). Также в скрипт внедрена возможность автоматического решения каптчи с использованием AI-сервисов.

Автопостер поддерживает пересылку следующих типов вложений: doc, photo, video. Для вложений типа photo максимальное разрешение на данный момент составляет 2560x2048px.

Порядок установки и использования | Callback API

  1. Скачать и распаковать последний релиз.
  2. Убедиться в доступности Python версии не старше 3.10.
  3. В среду исполнения установить зависимости при помощи следующей команды, выполненной из директории с исполняемым файлом.
pip install -r requirements.txt
  1. Создать в директории Config файл конфигурации по предоставленному примеру (см. здесь).
  2. Произвести настройку путём редактирования файла Settings.json и пользовательского скрипта обработки постов MessageEditor.py.
  3. При необходимости, например в случае использования скрипта на хостинге активного сервиса, настроить переадресацию nginx на свободный порт по образцу ниже.
location /vtp/ {
	proxy_set_header Host $server_name;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_pass http://{IP}:{PORT}; # Поместите сюда IP и порт вашего сервера.
	proxy_read_timeout 30;
	proxy_connect_timeout 30;
	proxy_request_buffering off;
	proxy_buffering off;
	proxy_redirect off;
}
  1. Провести валидацию сервера согласно данному руководству. Код подтверждения перед верификацией занести в файл настроек Settings.json.
  2. Запустить команду uvicorn main:App --host {IP} --port {PORT} из директории скрипта, подставив указанные значения.
  3. Для автоматического запуска рекомендуется провести инициализацию сервиса через systemd на Linux или путём добавления его в автозагрузку на Windows.

Порядок установки и использования | Open API

  1. Скачать и распаковать последний релиз.
  2. Убедиться в доступности Python версии не старше 3.10.
  3. В среду исполнения установить зависимости при помощи следующей команды, выполненной из директории с исполняемым файлом.
pip install -r requirements.txt
  1. Создать в директории Config файл конфигурации по предоставленному примеру (см. здесь). Настоятельно рекомендуется использовать постоянный токен доступа.
  2. Произвести настройку путём редактирования файла Settings.json и пользовательского скрипта обработки постов MessageEditor.py.
  3. Запустить команду uvicorn main:App из директории скрипта, подставив указанные значения (если используются оба типа API, тогда в качестве параметров команде необходимо задать IP и порт по аналогии с этим руководством).
  4. Для автоматического запуска рекомендуется провести инициализацию сервиса через systemd на Linux или путём добавления его в автозагрузку на Windows.

Версии поставляемых бинарных файлов

Файл Версия Источник
yt-dlp 2024.04.09 ссылка

Конфигурация источника

Сервис предоставляет поддержку как Callback API, так и Open API. Ниже приведено их сравнение.

Признак Callback API Open API
Тип запросов Запросы отправляет сервер ВКонтакте по заданному URL. Скрипт сам отправляет запросы к серверам ВКонтакте и получает ответ.
Требуемые права Для верификации сервера требуются права администратора в сообществе. Права администратора не требуются.
Скорость отправки Посты пересылаются практически моментально. Посты запрашиваются с определённым интервалом, не менее 1 минуты.
Особенности Часто требуется дополнительная настройка nginx. Требуется аккаунт ВКонтакте с отключённой двухфакторной аутентификацией.

Important

Для пересылки вложений типа video необходимо, чтобы в сообществе ВКонтакте для раздела «Видео» было установленно значение Открытые или Ограниченные.

Callback API

Для добавления новой конфигурации создайте копию файла # Callback API Example.json и переименуйте её согласно источнику. Источник указывает конечную часть URI, использующегося для прослушивания Callback-запросов.

Пример: {HOST}/vtp/{SOURCE}


"api": "Callback"

Указывает тип используемого API.


"token": ""

Сюда необходимо занести токен бота Telegram (можно получить у BotFather).


"target": ""

Сюда необходимо занести ID группы или канала Telegram (можно получить у Chat ID Bot).


"clean-tags": true

Если включено, скрипт будет удалять упоминания из тегов ВКонтакте (#tag@mention#tag). Рекомендуется к активации, так как Telegram не поддерживает подобный формат.


"parse-mode": null

Указывает способ форматирования сообщения, отправляемого в группу Telegram.

Поддерживаются: MarkdownV2, HTML.


"disable-web-page-preview": true

Если включено, для ссылок, в том числе форматированных, не будет отображаться предпросмотр веб-содержимого под сообщениями.


"blacklist": []

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


"attachments": {
	"doc": true,
	"photo": true,
	"video": true
}

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

Open API

Для добавления новой конфигурации создайте копию файла # Open API Example.json и переименуйте её. Имя файла может быть любым, но рекомендуется использовать алиас сообщества ВКонтакте, указанный в адресной строке.


"api": "Open"

Указывает тип используемого API.


"token": ""

Сюда необходимо занести токен бота Telegram (можно получить у BotFather).


"target": ""

Сюда необходимо занести ID группы или канала Telegram (можно получить у Chat ID Bot).


"wall-id": 0

Сюда необходимо занести ID сообщества ВКонтакте. Быстро узнать его можно при помощи этого сайта.


"clean-tags": true

Если включено, скрипт будет удалять упоминания из тегов ВКонтакте (#tag@mention#tag). Рекомендуется к активации, так как Telegram не поддерживает подобный формат.


"parse-mode": null

Указывает способ форматирования сообщения, отправляемого в группу Telegram.

Поддерживаются: MarkdownV2, HTML.


"disable-web-page-preview": true

Если включено, для ссылок, в том числе форматированных, не будет отображаться предпросмотр веб-содержимого под сообщениями.


"blacklist": []

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


"attachments": {
	"doc": true,
	"photo": true,
	"video": true
}

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


"last-post-id": null

Сюда скрипт заносит ID последнего пересланного поста. Не рекомендуется вручную изменять это значение, если вы не уверены в том, что делаете.

Settings.json

"login": ""

Логин аккаунта ВКонтакте. Указываемый аккаунт должен иметь отключённую двухфакторную аутентификацию.


"password": ""

Пароль аккаунта ВКонтакте.


"app-id": 6121396

Указывает ID приложения для доступа к API. Не рекомендуется изменять.


"vk-access-token": ""

Если ВКонтакте блокирует вашу авторизацию, а каптчу не удаётся решить при помощи AI, вы можете вручную получить постоянный токен доступа для вашего аккаунта и проводить запросы с его использованием. Для этого необходимо выполнить нижеперечисленные шаги:

  1. В любом браузере, поддерживающем расширения Chromium, авторизуйтесь в ВКонтакте.
  2. Если вы планируете использовать автопостер на устройстве, IP которого отличается от вашего текущего (например, на собственном сервере), выполняйте шаги по порядку, иначе можете сразу переходить к пункту №8.
  3. Установите на серевере Squid. Далее пример будет приводиться для CentOS, а дополнительную информацию вы сможете найти здесь.
  4. Настройте Squid для приёма пакетов со всех IP путём добавления в файл конфигурации /etc/squid/squid.conf следующих строк:
acl all src 0.0.0.0/0
http_access allow all
  1. Перезапустите службу Squid: systemctl restart squid.
  2. Установите в браузер это расширение и в его настройки занесите IP вашего сервера и стандартный прослушиваемый порт – 3128. Включите установленный прокси.
  3. Откройте в браузере любой сервис, определяющий ваш IP, и убедитесь в том, что прокси работает.
  4. Перейдите по ссылке, подтвердите предоставление прав и скопируйте токен из адресной строки браузера начиная от token= до &expires_in=0.

Warning

Помните, что токен выдаётся для одного IP адреса, при смене которого процедуру необходимо повторить.


"openapi-period": 60

Указывает интервал запроса обновлений по Open API в минутах.


"use-supervisor": true

Если включено, то для Open API будет создан поток-надзиратель, следящий за работой основного потока проверки обновлений. Повышает стабильность работы скрипта.


"confirmation-code": ""

Указывает код подтверждения, необходимый для валидации прослушивающего сервера Callback API.


"autoclean": true

Указывает, следует ли удалять вложения после отправки поста в Telegram.


"logging": true

Если включено, скрипт будет вести логи инициализации и обработки новых постов.


"debug": false

Включает отладочный режим логгирования.

Благодарность

Copyright © DUB1401. 2022-2024.

About

Автоматический постинг записей из сообществ ВКонтакте в каналы и группы Telegram.

Topics

Resources

License

Stars

Watchers

Forks

Languages