# 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 //notify` - **Описание.** Используется, чтобы отправить уведомление в указанный канал. Вместо `` указывается код канала, получаемый при помощи команды `!channel_code`, выполненной в комнате Matrix. - **Тело запроса.** Тело запроса представляет собой `json` объект: ```json { "service": "<название сервиса, передаётся только если разрешено>", "subservice": "<название подсервиса>", "text": "<текст уведомления>", "urgent": false } ``` - **Тело ответа.** Тело ответа представляет собой `json` объект. В случае успеха в нём будут все поля, перечисляемые ниже. В случае провала - только поле `error`, содержащее текстовое описание ошибки. ```json { "error": null, "notification_id": "<здесь будет Notification ID>" } ``` - ``