80 lines
3.8 KiB
Markdown
80 lines
3.8 KiB
Markdown
# 2026-matrix-csonac
|
||
|
||
Реализация CSoNaC (Centralized System of Notification and Control) для Matrix.
|
||
Раньше был бот с таким же функционалом, но для Telegram. Telegram больше не в
|
||
почёте, и теперь у меня всё в локальном Matrix, поэтому бот тоже перенесён сюда.
|
||
|
||
## Подготовка окружения
|
||
|
||
1. Клонируйте репозиторий и перейдите в его директорию
|
||
```bash
|
||
git clone https://git.tyukalov.su/nikita/2026-matrix-csonac.git
|
||
cd 2026-matrix-csonac
|
||
```
|
||
2. Создайте `venv`, активируйте его
|
||
```bash
|
||
python3 -m venv .venv
|
||
. .venv/bin/activate
|
||
```
|
||
5. Запустите приложение чтобы сгененерировать конфиг
|
||
```bash
|
||
python main.py
|
||
```
|
||
6. Отредактируйте конфиг
|
||
7. Запустите приложение ещё раз, чтобы авторизоваться
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
## Запуск
|
||
|
||
Для запуска приложения вы можете либо активировать `venv`, либо просто использовать полный путь до интерпретатора Python:
|
||
```bash
|
||
~/2026-matrix-downloader/.venv/bin/python main.py
|
||
```
|
||
```bash
|
||
. .venv/bin/activate
|
||
python main.py
|
||
```
|
||
|
||
## Как работает этот бот
|
||
|
||
Этот бот запускает веб-сервер, используя `web_host` и `web_port` из файла
|
||
конфигурации.
|
||
|
||
> Не открывайте доступ к серверу напрямую! Используйте reverse proxy, например,
|
||
> `nginx`. Это также позволит вам использовать защищённое соединение, что
|
||
> исключит возможность применения атаки Man-in-the-Middle для перехвата токена.
|
||
|
||
Все запросы к веб-серверу требуют авторизации, используя HTTP заголовок
|
||
`Authorization` и схему `Bearer`. Токен авторизации генерируется посредством
|
||
взаимодействия с ботом в Matrix.
|
||
|
||
> Для каждого сервиса, использующего службу, рекомендуется генерировать свой
|
||
> собственный токен. Это позволит отозвать токен только для одной службы, если
|
||
> он будет украден.
|
||
|
||
Доступные эндпоинты:
|
||
- `POST /<channel>/notify`
|
||
- **Описание.** Используется, чтобы отправить уведомление в указанный канал.
|
||
Вместо `<channel>` указывается код канала, получаемый при помощи команды
|
||
`!channel_code`, выполненной в комнате Matrix.
|
||
- **Тело запроса.** Тело запроса представляет собой `json` объект:
|
||
```json
|
||
{
|
||
"service": "<название сервиса, передаётся только если разрешено>",
|
||
"subservice": "<название подсервиса>",
|
||
"text": "<текст уведомления>",
|
||
"urgent": false
|
||
}
|
||
```
|
||
- **Тело ответа.** Тело ответа представляет собой `json` объект. В случае
|
||
успеха в нём будут все поля, перечисляемые ниже. В случае провала - только
|
||
поле `error`, содержащее текстовое описание ошибки.
|
||
```json
|
||
{
|
||
"error": null,
|
||
"notification_id": "<здесь будет Notification ID>"
|
||
}
|
||
```
|
||
- `` |