# CodeReview Bot (MVP) Реализовано в текущем MVP: - Регистрация в Telegram: `/register ` - Период недоступности: `/away ` - 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` - `AUTO_ASSIGN_REVIEWERS_COUNT` - необязательно, по умолчанию `2` (сколько ревьюеров назначать автоматически) - `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/setWebhook?url=https://example.ru.tuna.am/telegram/webhook&secret_token= ``` 6. Проверьте, что webhook установлен: ```text https://api.telegram.org/bot/getWebhookInfo ```