Skip to content

Commit

Permalink
Add: systemd documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
DUB1401 committed Jun 20, 2023
1 parent 36ccbca commit a4b0b77
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 17 deletions.
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ pip install pyTelegramBotAPI
pip install fastapi
pip install uvicorn
```
3. Настроить скрипт путём редактирования _Settings.json_. Обязательно указать: токен бота Telegram (можно узнать у [@BotFather](https://t.me/BotFather)) и ID группы Telegram (можно получить, переслав сообщение из группы боту [Chat ID Bot](https://t.me/chat_id_echo_bot)).
4. При необходимости, например в случае использования скрипта на хостинге активного сайта, настроить переадресацию [Nginx](https://nginx.org/). Также путём редактирования файла _MessageEditor.py_ можно задать пользовательский скрипт обработки постов.
3. Настроить скрипт путём редактирования _Settings.json_. Для добавления пользовательского скрипта обработки постов можно внести изменения в файл _MessageEditor.py_.
4. При необходимости, например в случае использования скрипта на хостинге активного сайта, настроить переадресацию [Nginx](https://nginx.org/) на свободный порт.
5. Провести валидацию сервера согласно данному [руководству](https://dev.vk.com/api/callback/getting-started#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20Callback%20API). Код подтверждения перед верификацией занести в файл настроек _Settings.json_. По умолчанию скрипт слушает `{HOST}/vtp/vk-group-wall`.
6. Открыть директорию со скриптом в терминале. Можно использовать метод `cd` и прописать путь к папке, либо запустить терминал из проводника. Активировать автопостер командой `uvicorn vtp:App --host [IP] --port [PORT]`.
6. Открыть директорию со скриптом в терминале. Можно использовать метод `cd` и прописать путь к папке, либо запустить терминал из проводника. Активировать автопостер командой `uvicorn vtp:App --host {IP} --port {PORT}`.
7. Для автоматического запуска службы рекомендуется провести инициализацию скрипта через [systemd](https://github.com/systemd/systemd) (пример [здесь](https://github.com/DUB1401/VK-Telegram-Poster/tree/main/systemd)) на Linux или путём добавления его в автозагрузку на Windows.

# Settings.json
Expand All @@ -34,7 +34,9 @@ ___
```JSON
"parse-mode": null
```
Указывает способ форматирования сообщения, отправляемого в группу Telegram. Поддерживаются: _MarkdownV2_, _HTML_.
Указывает способ форматирования сообщения, отправляемого в группу Telegram.

Поддерживаются: _MarkdownV2_, _HTML_.
___
```JSON
"confirmation-code": ""
Expand Down
8 changes: 6 additions & 2 deletions Source/Callback.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ class Callback:
# >>>>> СВОЙСТВА <<<<< #
#==========================================================================================#

# Глобальные настройки.
__Settings = dict()
# Callback-запрос.
__CallbackRequest = None
# Экземпляр бота.
__TelegramBot = None
# Глобальные настройки.
__Settings = dict()

#==========================================================================================#
# >>>>> МЕТОДЫ <<<<< #
Expand All @@ -23,6 +23,10 @@ class Callback:
# Экранирует символы при использовании MarkdownV2 разметки.
def __EscapeCharacters(self, Post: str) -> str:
Post = Post.replace('.', "\.")
Post = Post.replace('#', "\#")
Post = Post.replace('!', "\!")
Post = Post.replace('.', "\.")
Post = Post.replace('-', "\-")

return Post

Expand Down
19 changes: 19 additions & 0 deletions systemd/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# systemd
**systemd** – это подсистема инициализации и управления службами в Linux. С её помощью возможна настройка автоматического запуска сервисов и мониторинга ресурсов.

## Порядок инициализации
1. Открыть файл _vtp.service_ и подставить в него данные о директории скрипта, а также IP и свободном порте. При необходимости произвести дополнительную настройку юнита.
2. Поместить _vtp.service_ в директорию `/etc/systemd/system`.
3. Запустить терминал и последовательно выполнить следующие команды:
```
systemctl daemon-reload
systemctl start vtp
systemctl enable vtp
systemctl status vtp
```
**Примечание:** В некоторых случаях для выполнения вышеперечисленных комманд необходимо дополнительно получить права суперпользователя. Для этого добавьте `sudo` в начале каждой строки.

4. Проверить появившийся в терминале статус сервиса. Он должен выглядеть так: `Active: active (running)`.
5. Выполнить в терминале `curl {HOST}/vtp/{SOURCE}` и убедиться в работоспособности автопостера.

_Copyright © DUB1401. 2022-2023._
17 changes: 6 additions & 11 deletions vtp.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
#!/usr/bin/python
# uvicorn vtp:App --reload --host 95.217.12.58 --port 444

from starlette.responses import Response, JSONResponse
from MessageEditor import MessageEditor
from starlette.responses import Response
from starlette.requests import Request
from Source.Callback import Callback
from fastapi import FastAPI
from typing import Union

import telebot
import json
import sys
import os
Expand All @@ -27,12 +23,14 @@
# >>>>> ЧТЕНИЕ НАСТРОЕК <<<<< #
#==========================================================================================#

# Обработчик запросов FastAPI.
App = FastAPI()
# Глобальные настройки.
Settings = {
"token": "",
"group-id": "",
"source": "vk-group-wall",
"parse-mode": "MarkdownV2",
"parse-mode": None,
"confirmation-code": None
}

Expand All @@ -56,13 +54,10 @@
if type(Settings["confirmation-code"]) != str or len(Settings["confirmation-code"]) == 0:
Settings["confirmation-code"] = "Confirmation code not found in settings file."

# Обработчик запросов FastAPI.
App = FastAPI()

# Проверяет доступность сервера через браузер.
@App.get("/vtp/{Source}")
def CheckServer(Source: str):
return JSONResponse(content = {"source": Source, "status": "OK"})
return Response(content = "OK")

# Обрабатывает запросы от серверов ВКонтакте по Callback API.
@App.post("/vtp/" + Settings["source"])
Expand All @@ -79,7 +74,7 @@ async def SendMessageToGroup(CallbackRequest: Request):

# Если тип запроса – новый пост.
if RequestData["type"] == "wall_post_new":
ObjectCallback = Callback(Settings, RequestData)
Callback(Settings, RequestData)

# Если нет поля типа, выбросить исключение.
else:
Expand Down

0 comments on commit a4b0b77

Please sign in to comment.