ReviewBot/README.md
Raykov-MS 7b7788edcc MVP
2026-02-20 21:30:12 +03:00

82 lines
3.2 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` - обязательно
- `GITEA_BASE_URL` - обязательно для назначения ревьюера, например `https://git.example.com`
- `GITEA_TOKEN` - обязательно для назначения/меток
- `GITEA_WEBHOOK_SECRET` - необязательно, но рекомендуется
- `REMINDER_TIME` - необязательно, по умолчанию `09:00`
- `AUTO_ASSIGNED_LABEL` - необязательно, по умолчанию `auto-assigned`
- `ALLOW_SELF_ASSIGN` - необязательно, по умолчанию `false` (для локального теста можно `true`)
- `BOT_DB_PATH` - необязательно, по умолчанию `botreviewer.sqlite3`
## Webhook-эндпоинты
- Обновления Telegram: `POST /telegram/webhook`
- Webhook Gitea: `POST /gitea/webhook`
Для Telegram укажите URL вашего сервиса с путем `/telegram/webhook`.
Для 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
```
6. Проверьте, что webhook установлен:
```text
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getWebhookInfo
```