ReviewBot/README.md
Raykov-MS cb4bb4a399 E2E
2026-02-28 20:07:50 +03:00

86 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.

# CodeReview Bot (MVP)
Реализовано в текущем MVP:
- Регистрация в Telegram: `/register <git_email> <gitea_login>`
- Период недоступности: `/away <YYYY-MM-DD> <YYYY-MM-DD>`
- Webhook Gitea по PR:
- при создании PR без ревьюера бот назначает доступного участника с минимальной нагрузкой
- ставит метку `auto-assigned` (best effort)
- отправляет уведомление назначенному ревьюеру в личные сообщения Telegram
- Ежедневное напоминание в общее время `REMINDER_TIME` (по умолчанию `09:00`)
- Техническая проверка сервиса: `GET /health`
## Запуск
```bash
python -m venv .venv
. .venv/Scripts/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8080 --reload --env-file .env
```
## Переменные окружения
- `TELEGRAM_BOT_TOKEN` - обязательно
- `TELEGRAM_WEBHOOK_SECRET` - обязательно, секрет для заголовка `X-Telegram-Bot-Api-Secret-Token`
- `GITEA_BASE_URL` - обязательно для назначения ревьюера, например `https://git.example.com`
- `GITEA_TOKEN` - обязательно для назначения/меток
- `GITEA_WEBHOOK_SECRET` - обязательно, общий секрет webhook от Gitea
- `REMINDER_TIME` - необязательно, по умолчанию `09:00`
- `AUTO_ASSIGNED_LABEL` - необязательно, по умолчанию `auto-assigned`
- `ALLOW_SELF_ASSIGN` - необязательно, по умолчанию `false` (для локального теста можно `true`)
- `TELEGRAM_ALLOWED_CHAT_IDS` - необязательно, CSV списка `chat_id`, которым можно управлять ботом
- `TELEGRAM_ALLOWED_USERNAMES` - необязательно, CSV списка Telegram username (без `@`)
- `GITEA_COUNT_REPOS` - необязательно, CSV репозиториев `org/repo` для расчета нагрузки ревьюеров
- `BOT_DB_PATH` - необязательно, по умолчанию `botreviewer.sqlite3`
## Webhook-эндпоинты
- Обновления Telegram: `POST /telegram/webhook`
- Webhook Gitea: `POST /gitea/webhook`
Для Telegram укажите URL вашего сервиса с путем `/telegram/webhook` и `secret_token`.
Для Gitea включите события `pull_request` и задайте общий секрет.
## Локальная разработка через Tuna
Если бот запущен локально, Gitea/Telegram не смогут достучаться до `localhost` без туннеля.
1. Запустите бота:
```bash
uvicorn main:app --host 0.0.0.0 --port 8080 --reload --env-file .env
```
2. Поднимите туннель в Tuna(https://my.tuna.am/) на локальный порт `8080` и получите публичный URL, например:
```text
https://example.ru.tuna.am
```
3. Проверьте доступность сервиса:
```text
https://example.ru.tuna.am/health
```
4. Настройте webhook в Gitea:
- Target URL: `https://example.ru.tuna.am/gitea/webhook`
- Method: `POST`
- Content Type: `application/json`
- Secret: тот же, что в `GITEA_WEBHOOK_SECRET`
- Events: `Pull Request` (Custom Events)
5. Настройте webhook в Telegram:
```text
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook?url=https://example.ru.tuna.am/telegram/webhook&secret_token=<TELEGRAM_WEBHOOK_SECRET>
```
6. Проверьте, что webhook установлен:
```text
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getWebhookInfo
```