2a6c1cd6337052f5ec1a68cf9f873e2d9991ab0c
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. Установка зависимостей
pip install -r requirements.txt
2. Настройка
cp .env.example .env
# Отредактируйте .env — укажите BOT_TOKEN от @BotFather
3. Запуск
python Bot.py
Сервис запустится на http://localhost:8000
API эндпоинты
| Метод | Путь | Описание |
|---|---|---|
POST |
/tasks |
Создать задачу |
GET |
/tasks |
Список задач (фильтр: ?status=pending) |
GET |
/tasks/{id} |
Статус задачи |
POST |
/tasks/{id}/cancel |
Отменить задачу |
GET |
/health |
Проверка здоровья |
Примеры запросов
# Создать 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 |
Решить капчу на странице |
Добавление своих задач
- Опишите асинхронную функцию в
main.py:
async def my_task(arg1: str, arg2: int) -> str:
await asyncio.sleep(2)
return f"Result: {arg1} {arg2}"
- Добавьте в реестр в
main.py:
TASK_REGISTRY = {
"echo": echo_task,
"delayed_message": delayed_task,
"sum": sum_task,
"my_task": my_task, # ←
}
- Обновите фабрику
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
Description
Languages
Python
100%