init auth and main function

This commit is contained in:
Yuriy Yuriev
2026-05-14 16:15:58 +07:00
commit 27c53e897e
47 changed files with 5750 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
# PythonBot Backend
Бэкенд сервис с **FastAPI** + **Telegram Bot** и асинхронной очередью задач.
## Возможности
- 🚀 FastAPI REST API с авто-документацией (Swagger)
- 🤖 Telegram бот для создания и мониторинга задач
- ⚡ Асинхронная очередь задач с воркерами
- 🔔 Уведомления о завершении задач в Telegram
## Структура проекта
```
PythonBot/
├── Bot.py # Точка входа — запускает FastAPI + Telegram бота
├── main.py # FastAPI приложение + эндпоинты
├── bot.py # Telegram бот (aiogram)
├── tasks.py # Очередь задач + воркеры
├── config.py # Настройки (pydantic-settings)
├── requirements.txt
├── .env.example
└── README.md
```
## Быстрый старт
### 1. Установка зависимостей
```bash
pip install -r requirements.txt
```
### 2. Настройка
```bash
cp .env.example .env
# Отредактируйте .env — укажите BOT_TOKEN от @BotFather
```
### 3. Запуск
```bash
python Bot.py
```
Сервис запустится на `http://localhost:8000`
## API эндпоинты
| Метод | Путь | Описание |
|-------|------|----------|
| `POST` | `/tasks` | Создать задачу |
| `GET` | `/tasks` | Список задач (фильтр: `?status=pending`) |
| `GET` | `/tasks/{id}` | Статус задачи |
| `POST` | `/tasks/{id}/cancel` | Отменить задачу |
| `GET` | `/health` | Проверка здоровья |
### Примеры запросов
```bash
# Создать echo-задачу
curl -X POST http://localhost:8000/tasks \
-H "Content-Type: application/json" \
-d '{"name": "My Echo", "task_type": "echo", "params": {"message": "Hello!"}}'
# Создать задачу решения капчи
curl -X POST http://localhost:8000/tasks \
-H "Content-Type: application/json" \
-d '{
"name": "Solve CF Turnstile",
"task_type": "captcha_solve",
"params": {
"url": "https://example.com/page-with-captcha",
"captcha_type": "cloudflare_turnstile"
}
}'
# Список задач
curl http://localhost:8000/tasks
# Статус задачи
curl http://localhost:8000/tasks/{task_id}
# Swagger UI
open http://localhost:8000/docs
```
## Telegram бот
Получите токен у **@BotFather** и укажите в `.env`:
```
BOT_TOKEN=123456:ABC-DEF...
```
### Команды бота
| Команда | Описание |
|---------|----------|
| `/start` | Приветствие + список команд |
| `/echo <текст>` | Создать echo-задачу |
| `/delay <текст> [сек]` | Отложенное сообщение |
| `/sum <a> <b>` | Сумма двух чисел |
| `/captcha <url> [тип]` | Решение капчи на странице |
| `/tasks` | Список ваших задач |
| `/task <id>` | Статус задачи |
| `/help` | Справка |
## Типы задач
| Тип | Параметры | Описание |
|-----|-----------|----------|
| `echo` | `message: str` | Вернуть сообщение |
| `delayed_message` | `message: str, delay: int` | Ответить через N секунд |
| `sum` | `a: int, b: int` | Сложить два числа |
| `captcha_solve` | `url: str, captcha_type: str` | Решить капчу на странице |
## Добавление своих задач
1. Опишите асинхронную функцию в `main.py`:
```python
async def my_task(arg1: str, arg2: int) -> str:
await asyncio.sleep(2)
return f"Result: {arg1} {arg2}"
```
2. Добавьте в реестр в `main.py`:
```python
TASK_REGISTRY = {
"echo": echo_task,
"delayed_message": delayed_task,
"sum": sum_task,
"my_task": my_task, # ←
}
```
3. Обновите фабрику `create_task()` аналогично.
## Конфигурация
| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `HOST` | `0.0.0.0` | Хост FastAPI |
| `PORT` | `8000` | Порт FastAPI |
| `DEBUG` | `false` | Режим разработки (reload) |
| `BOT_TOKEN` | `` | Токен Telegram бота |
| `MAX_WORKERS` | `3` | Количество воркеров |
| `TASK_TIMEOUT` | `300` | Таймаут задачи (сек) |
| `CAPTCHA_SOLVER` | `click` | Тип решателя: `click` \| `2captcha` \| `10captcha` |
| `CAPTCHA_MAX_ATTEMPTS` | `3` | Макс. попыток решения |
| `CAPTCHA_ATTEMPT_DELAY` | `5` | Задержка между попытками (сек) |
| `TWO_CAPTCHA_API_KEY` | `` | API ключ 2Captcha |
| `TEN_CAPTCHA_API_KEY` | `` | API ключ 10Captcha |
## Лиценхия
MIT