Telegram-бот для управления квестами и задачами с интеграцией Windsurf AI.
HumanOS — это мотивационный Telegram-бот, который помогает превратить ваши цели в увлекательные квесты. Бот поддерживает:
- ✅ Создание квестов разных типов (физические, интеллектуальные, ментальные, произвольные)
- 📈 Отслеживание прогресса с частичным выполнением задач
- 📅 Дедлайны и напоминания для квестов
- 🤖 AI-генерация квестов через Windsurf AI на основе ваших целей
- 💬 Комментарии к квестам для дополнительных заметок
- 📊 Статистика выполнения (в разработке)
- Python 3.11+
- aiogram 3.13.1 — асинхронный фреймворк для Telegram Bot API
- aiohttp — асинхронные HTTP-запросы для AI интеграции
- aiosqlite — асинхронная работа с SQLite
- python-dotenv — управление переменными окружения
- loguru — продвинутое логирование
git clone <your-repo-url>
cd HumanOSWindows:
python -m venv venv
venv\Scripts\activateLinux/Mac:
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtСкопируйте .env.example в .env:
copy .env.example .env # Windows
cp .env.example .env # Linux/MacОтредактируйте файл .env и укажите свои данные:
# Токен Telegram-бота (получить у @BotFather)
BOT_TOKEN=your_telegram_bot_token_here
# API ключ для Windsurf AI (опционально)
WINDSURF_API_KEY=your_windsurf_api_key_here
# URL API Windsurf AI
WINDSURF_API_URL=https://api.windsurf.ai/v1/chat/completions
# Путь к базе данных SQLite
DATABASE_PATH=quests.db
# Уровень логирования (DEBUG, INFO, WARNING, ERROR)
LOG_LEVEL=INFO- Откройте Telegram и найдите @BotFather
- Отправьте команду
/newbot - Следуйте инструкциям для создания бота
- Скопируйте полученный токен в файл
.env
Если вы хотите использовать AI-генерацию квестов:
- Получите API ключ от Windsurf AI
- Укажите его в
.envфайле в переменнойWINDSURF_API_KEY - При необходимости измените
WINDSURF_API_URL
Примечание: Бот будет работать и без AI, но функция /quest будет недоступна.
python main.pyВы увидите сообщение:
✅ Бот запущен и готов к работе!
📊 База данных: quests.db
🤖 AI: Включен/Выключен
Нажмите Ctrl+C в терминале.
/start— Запуск бота и главное меню/help— Справка по командам/add_task— Быстрое добавление задачи/quest— Создание квеста через AI (требуется API ключ)/progress— Просмотр прогресса по всем квестам
- 💪 Физические задачи — с количественным значением (например, пробежать 50 км)
- 📚 Интеллектуальные задачи — с количественным значением (например, прочитать 10 книг)
- 🧠 Ментальные задачи — с процентом выполнения 0-100% (например, медитация)
- 🎯 Произвольные задачи — с процентом выполнения 0-100% (любые другие цели)
- Нажмите кнопку "🤖 AI Квест" или используйте команду
/quest - Опишите свою цель, например: "Хочу похудеть на 5 кг"
- Бот сгенерирует персональный квест с советами и рекомендациями
- Квест автоматически добавится в ваш список
HumanOS/
├── main.py # Точка входа приложения
├── config.py # Конфигурация и переменные окружения
├── database_async.py # Асинхронная работа с базой данных
├── ai_client.py # Интеграция с Windsurf AI
├── handlers.py # Обработчики команд и callback-кнопок
├── requirements.txt # Зависимости проекта
├── .env.example # Пример файла с переменными окружения
├── .env # Ваши переменные окружения (не в git)
├── README.md # Документация
├── quests.db # База данных SQLite (создается автоматически)
└── bot.log # Лог-файл (создается автоматически)
- Откройте
handlers.py - Добавьте новый обработчик с декоратором
@router.message(Command("your_command")) - Реализуйте логику команды
- Создайте клавиатуру в функции
get_*_keyboard() - Добавьте обработчик с декоратором
@router.callback_query(F.data == "your_callback")
Все методы базы данных асинхронные. Примеры:
# Создание квеста
quest_id, error = await db.create_quest(
user_id=user_id,
title="Название",
quest_type="physical",
target_value=100
)
# Получение квестов пользователя
quests = await db.get_user_quests(user_id)
# Обновление прогресса
quest = await db.update_quest_progress(user_id, quest_id, new_value)Решение: Проверьте, что файл .env существует и содержит корректный токен бота.
Решение: Убедитесь, что WINDSURF_API_KEY установлен в .env файле. Если не нужен AI, просто не используйте команду /quest.
Решение:
- Проверьте, что бот запущен (
python main.py) - Убедитесь, что токен бота корректный
- Проверьте логи в файле
bot.log
Решение:
# Обновите pip
python -m pip install --upgrade pip
# Установите зависимости заново
pip install -r requirements.txt --force-reinstallЛоги сохраняются в двух местах:
- Консоль — цветной вывод в реальном времени
- bot.log — файл с ротацией (максимум 10 MB, хранится 7 дней)
Уровень логирования настраивается в .env через переменную LOG_LEVEL.
- ✅ Валидация пользовательского ввода на SQL-инъекции
- ✅ Ограничение длины текстовых полей (500 символов)
- ✅ Токены и API ключи хранятся в
.env(не в коде) - ✅ Файл
.envдобавлен в.gitignore
Если вы хотите улучшить проект:
- Создайте fork репозитория
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Сделайте commit изменений (
git commit -m 'Add amazing feature') - Отправьте изменения в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Этот проект распространяется под лицензией MIT.
Если у вас возникли вопросы или проблемы:
- Проверьте раздел "Решение проблем" выше
- Посмотрите логи в
bot.log - Создайте Issue в репозитории
Сделано с ❤️ для достижения целей и саморазвития