Skip to content

Commit

Permalink
Add: Telegram channels support
Browse files Browse the repository at this point in the history
  • Loading branch information
DUB1401 committed Jun 28, 2023
1 parent b4c0b8d commit 03e1633
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 143 deletions.
11 changes: 9 additions & 2 deletions MessageEditor.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Обрабатывает полученные из ВКонтакте посты пользовательским скриптом перед отправкой в Telegram.
# Примечание: Если вернуть None, пост будет проигнорирован.
#==========================================================================================#
# >>>>> ПРИМЕЧАНИЕ <<<<< #
#==========================================================================================#
# При использовании MarkdownV2 следующие символы, не участвующие в разметке, должны быть экранированы:
# _ * [ ] ( ) ~ ` > # + - = | { } . ! →→→ \_ \* \[ \] \( \) \~ \` \> \# \+ \- \= \| \{ \} \. \!
# В тексте поста экранирование происходит автоматически до обработки пользовательским скриптом.
#==========================================================================================#

# Обрабатывает полученные из ВКонтакте посты пользовательским скриптом перед отправкой в Telegram. Если вернуть None, пост будет проигнорирован.
def MessageEditor(Post: str) -> str | None:

#==========================================================================================#
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# VK-Telegram-Poster
**VK-Telegram Poster** – это инструмент автопостинга записей из сообщества ВКонтакте в группу Telegram с возможностью настройки пользовательского скрипта обработки постов. Для отправки сообщений используется буфер ожидания, что позволяет автопостеру корректно работать с включённым медленным режимом группы Telegram (чтобы игнорировать медленный режим, бот должен иметь права администратора).
**VK-Telegram Poster** – это инструмент автопостинга записей из сообщества ВКонтакте в каналы и группы Telegram с возможностью настройки пользовательского скрипта обработки постов. Для отправки сообщений используется буфер ожидания, что позволяет автопостеру корректно работать с включённым медленным режимом группы (чтобы игнорировать медленный режим или отправлять сообщения в канал, бот должен иметь права администратора).

## Порядок установки и использования
1. Установить Python версии не старше 3.10. Если основная версия Python вашего сервера старше, указать целевую платформу путём редактирования первой строчки в файле _vtp.py_ (_#!/usr/bin/python__#!/usr/bin/python3.x_).
1. Установить Python версии не ниже 3.10. Если основная версия Python вашего сервера старше, указать целевую платформу путём редактирования первой строчки в файле _vtp.py_ (_#!/usr/bin/python__#!/usr/bin/python3.x_).
2. В среду исполнения установить следующие пакеты вручную или при помощи файла _requirements.txt_: [pyTelegramBotAPI](https://github.com/eternnoir/pyTelegramBotAPI), [fastapi](https://github.com/tiangolo/fastapi), [uvicorn](https://github.com/encode/uvicorn).
```
pip install pyTelegramBotAPI
Expand All @@ -22,9 +22,9 @@ pip install uvicorn
Сюда необходимо занести токен бота Telegram (можно узнать у [@BotFather](https://t.me/BotFather)).
___
```JSON
"group-id": ""
"target-id": ""
```
Сюда необходимо занести ID группы Telegram (можно получить, переслав сообщение из группы боту [Chat ID Bot](https://t.me/chat_id_echo_bot)).
Сюда необходимо занести ID группы или канала Telegram (можно получить у [Chat ID Bot](https://t.me/chat_id_echo_bot)).
___
```JSON
"source": "vk-group-wall"
Expand Down
2 changes: 1 addition & 1 deletion Settings.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"token": "",
"group-id": "",
"source": "vk-group-wall",
"parse-mode": null,
"target-id": "",
"clean-tags": true,
"disable-web-page-preview": true,
"blacklist": [],
Expand Down
34 changes: 25 additions & 9 deletions Source/Callback.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from Source.DUBLIB import RemoveRegexSubstring
from MessageEditor import MessageEditor
from threading import Thread
from time import sleep

import telebot
import re

class Callback:

Expand All @@ -26,14 +26,26 @@ class Callback:
# >>>>> МЕТОДЫ <<<<< #
#==========================================================================================#

# Очищает сообщение от упоминаний в тегах ВКонтакте.
def __CleanTags(self, Post: str) -> str:
# Поиск всех совпадений.
RegexSubstrings = re.findall("#\w+@\w+", Post)

# Удаление каждой подстроки.
for RegexSubstring in RegexSubstrings:
Post = Post.replace("@" + RegexSubstring.split('@')[1], "")
print(Post)
return Post

# Экранирует символы при использовании MarkdownV2 разметки.
def __EscapeCharacters(self, Post: str) -> str:
Post = Post.replace('.', "\.")
Post = Post.replace('#', "\#")
Post = Post.replace('!', "\!")
Post = Post.replace('-', "\-")
Post = Post.replace('(', "\(")
Post = Post.replace(')', "\)")
# Список экранируемых символов. _ * [ ] ( ) ~ ` > # + - = | { } . !
CharactersList = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']

# Экранировать каждый символ из списка.
for Character in CharactersList:
Post = Post.replace(Character, "\\" + Character)

return Post

# Обрабатывает очередь сообщений.
Expand All @@ -47,7 +59,7 @@ def __SenderThread(self):

try:
# Попытка отправить сообщение.
self.__TelegramBot.send_message(self.__Settings["group-id"], self.__MessagesBufer[0], parse_mode = self.__Settings["parse-mode"], disable_web_page_preview = self.__Settings["disable-web-page-preview"])
self.__TelegramBot.send_message(self.__Settings["target-id"], self.__MessagesBufer[0], parse_mode = self.__Settings["parse-mode"], disable_web_page_preview = self.__Settings["disable-web-page-preview"])

except telebot.apihelper.ApiTelegramException as ExceptionData:
# Описание исключения.
Expand All @@ -57,6 +69,10 @@ def __SenderThread(self):
if "Too Many Requests" in Description:
sleep(int(Description.split()[-1]) + 1)

# Иначе удалить первое сообщение в очереди отправки.
else:
self.__MessagesBufer.pop(0)

else:
# Удаление первого сообщения в очереди отправки.
self.__MessagesBufer.pop(0)
Expand All @@ -79,7 +95,7 @@ def __SendMessage(self, Post: str):

# Если включена очистка тегов.
if self.__Settings["clean-tags"] == True:
Post = RemoveRegexSubstring("@\w+", Post)
Post = self.__CleanTags(Post)

# Для каждого запрещённого слова проверить соответствие словам поста.
for ForbiddenWord in self.__Settings["blacklist"]:
Expand Down
123 changes: 0 additions & 123 deletions Source/DUBLIB.py

This file was deleted.

8 changes: 4 additions & 4 deletions vtp.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
#==========================================================================================#

# Версия скрипта.
Version = "0.2.0"
Version = "0.2.1"
# Текст копирайта.
Copyright = "Copyright © DUB1401. 2022-2023."
# Обработчик запросов FastAPI.
App = FastAPI()
# Глобальные настройки.
Settings = {
"token": "",
"group-id": "",
"target-id": "",
"source": "vk-group-wall",
"clean-tags": True,
"parse-mode": None,
Expand All @@ -54,8 +54,8 @@
raise Exception("Incorrect Telegram bot's token.")

# Проверка корректности заданного пароля.
if type(Settings["group-id"]) != str or len(Settings["group-id"]) == 0:
raise Exception("Incorrect group ID.")
if type(Settings["target-id"]) != str or len(Settings["target-id"]) == 0:
raise Exception("Incorrect group or channel ID.")

# Установка информирующего сообщения в случае отсутствия кода подтверждения сервера.
if type(Settings["confirmation-code"]) != str or len(Settings["confirmation-code"]) == 0:
Expand Down

0 comments on commit 03e1633

Please sign in to comment.