Files
2026-matrix-csonac/README.md
Nikita Tyukalov, ASUS, Linux 2c05443c89 Initial commit
2026-08-17 03:33:54 +03:00

80 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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>"
}
```
- ``