Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
BOT_TOKEN=8482833220:AAHfq8pv_jBNCoeljUBtP7rgMvb26dji1mw
45 changes: 45 additions & 0 deletions QUICKSTART.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# 🚀 Быстрый старт

## 1. Установка
```bash
# Скачайте файлы проекта
# Установите зависимости
pip3 install python-dotenv python-telegram-bot schedule

# Или используйте автоматическую установку
chmod +x install.sh
./install.sh
```

## 2. Настройка
1. Откройте файл `.env`
2. Убедитесь, что токен бота правильный:
```
BOT_TOKEN=8482833220:AAHfq8pv_jBNCoeljUBtP7rgMvb26dji1mw
```

## 3. Запуск
```bash
python3 run_bot.py
```

## 4. Использование
1. Найдите бота в Telegram: `@DobbyRossBot`
2. Отправьте `/start`
3. Начните использовать меню!

## 🎯 Ваши привычки уже настроены:
- 🌅 4:10 - Просыпаюсь
- 🦷 4:20 - Почистить зубы и умыться
- 💪 17:00 - Отжимания 50 раз
- 📚 18:00 - Урок польского 10 мин

## 🔧 Команды:
- `/start` - начать работу
- `/ai` - анализ от ИИ
- `/stats` - статистика

## 🆘 Если что-то не работает:
1. Проверьте логи: `tail -f bot.log`
2. Убедитесь, что Python 3.8+ установлен
3. Проверьте интернет-соединение
148 changes: 146 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,146 @@
# Dobby-v01
my Dobby
# 🤖 ИИ-Помощник для управления делами и привычками

Персональный Telegram бот с открытым исходным кодом для автоматизации ваших дел, отслеживания привычек и планирования задач с использованием ИИ.

## ✨ Возможности

- 🤖 **ИИ-помощник** - запоминает ваши привычки, расписание и предпочтения
- ⏰ **Умные напоминания** - автоматические уведомления в нужное время
- 📋 **Управление привычками** - создание, отслеживание и отметка выполнения
- 📅 **Планирование** - создание планов с различными типами повторения
- 📊 **Анализ паттернов** - ИИ анализирует ваши привычки и дает рекомендации
- 🎯 **Интерактивное меню** - удобная навигация через кнопки
- 💡 **Персонализированные советы** - адаптивные рекомендации на основе вашего поведения

## 🚀 Быстрый старт

### Автоматическая установка
```bash
chmod +x install.sh
./install.sh
```

### Ручная установка
1. Клонируйте репозиторий
2. Установите зависимости:
```bash
pip3 install python-dotenv python-telegram-bot schedule
```

3. Запустите бота:
```bash
python3 run_bot.py
```

## 📱 Использование

1. Найдите бота в Telegram: `@DobbyRossBot`
2. Отправьте команду `/start`
3. Используйте интерактивное меню:
- **📋 Мои привычки** - просмотр и управление привычками
- **📅 Мои планы** - просмотр планов
- **➕ Создать план** - добавление новых планов
- **⚙️ Настройки** - конфигурация бота
- **📊 Статистика** - анализ вашей активности

### Команды бота
- `/start` - начать работу с ботом
- `/ai` - получить анализ от ИИ-помощника
- `/stats` - показать статистику

## 🎯 Примеры использования

### Ваши привычки (как в примере)
- 🌅 **4:10** - Просыпаюсь
- 🦷 **4:20** - Почистить зубы и умыться
- 💪 **17:00** - Отжимания 50 раз
- 📚 **18:00** - Урок польского 10 мин

### Типы планов
- 🔄 **Ежедневно** - повторяющиеся задачи
- 📅 **Еженедельно** - задачи на неделю
- 📆 **Ежемесячно** - долгосрочные планы
- 🎯 **Один раз** - разовые задачи

## 🧠 ИИ-функции

### Анализ паттернов
- Определение наиболее активных часов
- Анализ типов привычек (здоровье, обучение, работа)
- Расчет процента выполнения задач

### Персонализированные рекомендации
- Советы по оптимизации расписания
- Мотивационные сообщения
- Адаптивные напоминания

### Обучение на основе взаимодействий
- Запоминание предпочтений пользователя
- Анализ успешности различных подходов
- Постоянное улучшение рекомендаций

## 📁 Структура проекта

```
├── bot.py # Основной файл бота
├── database.py # Управление базой данных SQLite
├── scheduler.py # Система напоминаний
├── ai_memory.py # ИИ-модуль для анализа и обучения
├── config.py # Конфигурация и настройки
├── run_bot.py # Скрипт запуска
├── demo.py # Демонстрационный скрипт
├── install.sh # Скрипт автоматической установки
├── requirements.txt # Зависимости Python
├── .env # Переменные окружения
└── README.md # Документация
```

## 🛠 Технологии

- **Python 3.8+** - основной язык программирования
- **python-telegram-bot** - библиотека для Telegram API
- **SQLite** - база данных для хранения данных
- **Schedule** - планировщик задач
- **Asyncio** - асинхронное программирование

## 🔧 Настройка

### Переменные окружения (.env)
```
BOT_TOKEN=ваш_токен_бота
```

### Конфигурация (config.py)
- Настройка часового пояса
- Дефолтные привычки
- Параметры базы данных

## 📊 Демонстрация

Запустите демонстрационный скрипт для тестирования:
```bash
python3 demo.py
```

## 🤝 Вклад в проект

Этот проект с открытым исходным кодом! Вы можете:
- Добавлять новые функции
- Улучшать ИИ-алгоритмы
- Исправлять ошибки
- Предлагать новые идеи

## 📄 Лицензия

Проект распространяется под лицензией MIT.

## 🆘 Поддержка

Если у вас возникли вопросы или проблемы:
1. Проверьте логи в файле `bot.log`
2. Убедитесь, что все зависимости установлены
3. Проверьте правильность токена бота

---

**Создано с ❤️ для повышения продуктивности и организации вашей жизни!**
Binary file added __pycache__/ai_memory.cpython-313.pyc
Binary file not shown.
Binary file added __pycache__/config.cpython-313.pyc
Binary file not shown.
Binary file added __pycache__/database.cpython-313.pyc
Binary file not shown.
184 changes: 184 additions & 0 deletions ai_memory.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
import json
import logging
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from database import DatabaseManager

class AIMemory:
def __init__(self, db_manager: DatabaseManager):
self.db = db_manager
self.logger = logging.getLogger(__name__)
self.user_patterns = {}

def analyze_user_patterns(self, user_id: int) -> Dict:
"""Анализировать паттерны пользователя"""
habits = self.db.get_habits()
user_data = self.db.get_user_data(user_id)

patterns = {
'most_active_hours': [],
'completion_rate': 0.0,
'favorite_habit_types': [],
'wake_up_pattern': user_data.get('wake_up_time', '04:10') if user_data else '04:10',
'suggestions': []
}

# Анализируем время выполнения привычек
habit_times = [habit['time'] for habit in habits]
patterns['most_active_hours'] = self._analyze_time_patterns(habit_times)

# Анализируем процент выполнения
completed_count = 0
for habit in habits:
if self.db.get_habit_status(habit['id']) == 'completed':
completed_count += 1

if habits:
patterns['completion_rate'] = completed_count / len(habits)

# Анализируем типы привычек
patterns['favorite_habit_types'] = self._analyze_habit_types(habits)

# Генерируем предложения
patterns['suggestions'] = self._generate_suggestions(patterns)

return patterns

def _analyze_time_patterns(self, times: List[str]) -> List[str]:
"""Анализировать временные паттерны"""
hour_counts = {}

for time_str in times:
hour = int(time_str.split(':')[0])
hour_counts[hour] = hour_counts.get(hour, 0) + 1

# Сортируем по количеству привычек в час
sorted_hours = sorted(hour_counts.items(), key=lambda x: x[1], reverse=True)
return [f"{hour}:00" for hour, count in sorted_hours[:3]]

def _analyze_habit_types(self, habits: List[Dict]) -> List[str]:
"""Анализировать типы привычек"""
types = {
'health': ['зубы', 'умыться', 'отжимания', 'спорт', 'тренировка'],
'learning': ['урок', 'изучение', 'чтение', 'польский', 'английский'],
'work': ['работа', 'проект', 'задача', 'встреча'],
'personal': ['медитация', 'отдых', 'хобби', 'семья']
}

type_counts = {category: 0 for category in types.keys()}

for habit in habits:
habit_name_lower = habit['name'].lower()
for category, keywords in types.items():
if any(keyword in habit_name_lower for keyword in keywords):
type_counts[category] += 1

# Возвращаем топ-3 категории
sorted_types = sorted(type_counts.items(), key=lambda x: x[1], reverse=True)
return [category for category, count in sorted_types[:3] if count > 0]

def _generate_suggestions(self, patterns: Dict) -> List[str]:
"""Генерировать предложения на основе паттернов"""
suggestions = []

# Предложения по времени
if patterns['completion_rate'] < 0.5:
suggestions.append("💡 Попробуйте выполнять задачи в одно и то же время каждый день")

if not patterns['most_active_hours']:
suggestions.append("⏰ Добавьте больше привычек в утренние часы для лучшего старта дня")

# Предложения по типам привычек
if 'health' not in patterns['favorite_habit_types']:
suggestions.append("🏃‍♂️ Добавьте физические упражнения для поддержания здоровья")

if 'learning' not in patterns['favorite_habit_types']:
suggestions.append("📚 Включите изучение чего-то нового в свой распорядок")

# Предложения по расписанию
wake_up_time = patterns['wake_up_pattern']
if wake_up_time == '04:10':
suggestions.append("🌅 Отличное время для пробуждения! Добавьте утреннюю рутину")

return suggestions

def get_personalized_message(self, user_id: int, context: str = "general") -> str:
"""Получить персонализированное сообщение"""
patterns = self.analyze_user_patterns(user_id)

if context == "morning":
return self._get_morning_message(patterns)
elif context == "evening":
return self._get_evening_message(patterns)
elif context == "motivation":
return self._get_motivation_message(patterns)
else:
return self._get_general_message(patterns)

def _get_morning_message(self, patterns: Dict) -> str:
"""Утреннее сообщение"""
wake_up = patterns['wake_up_pattern']
completion_rate = patterns['completion_rate']

if completion_rate >= 0.8:
return f"🌅 Доброе утро! Вы просыпаетесь в {wake_up} - отличное время! Сегодня у вас {len(self.db.get_habits())} задач. Продолжайте в том же духе! 💪"
else:
return f"🌅 Доброе утро! Время {wake_up} - пора начинать день! У вас есть {len(self.db.get_habits())} задач на сегодня. Давайте сделаем их все! 🎯"

def _get_evening_message(self, patterns: Dict) -> str:
"""Вечернее сообщение"""
completed_today = sum(1 for habit in self.db.get_habits()
if self.db.get_habit_status(habit['id']) == 'completed')
total_habits = len(self.db.get_habits())

if completed_today == total_habits:
return f"🌙 Отличный день! Вы выполнили все {total_habits} задач! Отдыхайте хорошо! 😴"
else:
remaining = total_habits - completed_today
return f"🌙 День подходит к концу. Выполнено {completed_today} из {total_habits} задач. Осталось {remaining}. Не сдавайтесь! 💪"

def _get_motivation_message(self, patterns: Dict) -> str:
"""Мотивационное сообщение"""
completion_rate = patterns['completion_rate']

if completion_rate >= 0.9:
return "🏆 Вы невероятны! Ваша дисциплина вдохновляет! Продолжайте в том же духе! ⭐"
elif completion_rate >= 0.7:
return "💪 Отличная работа! Вы на правильном пути! Еще немного усилий! 🎯"
elif completion_rate >= 0.5:
return "🌟 Хороший старт! Каждый день - новая возможность стать лучше! 💫"
else:
return "🚀 Начните с малого! Каждый шаг приближает к цели! Вы справитесь! 💪"

def _get_general_message(self, patterns: Dict) -> str:
"""Общее сообщение"""
suggestions = patterns['suggestions']
if suggestions:
return f"🤖 Ваш ИИ-помощник анализирует ваши привычки!\n\n💡 Предложения:\n" + "\n".join(suggestions)
else:
return "🤖 Ваш ИИ-помощник готов помочь! Все идет отлично! 😊"

def learn_from_interaction(self, user_id: int, action: str, success: bool):
"""Обучение на основе взаимодействий"""
if user_id not in self.user_patterns:
self.user_patterns[user_id] = {
'actions': {},
'preferences': {},
'success_rate': 0.0
}

user_pattern = self.user_patterns[user_id]

if action not in user_pattern['actions']:
user_pattern['actions'][action] = {'success': 0, 'total': 0}

user_pattern['actions'][action]['total'] += 1
if success:
user_pattern['actions'][action]['success'] += 1

# Обновляем общий процент успеха
total_actions = sum(data['total'] for data in user_pattern['actions'].values())
successful_actions = sum(data['success'] for data in user_pattern['actions'].values())
user_pattern['success_rate'] = successful_actions / total_actions if total_actions > 0 else 0.0

self.logger.info(f"Обучение для пользователя {user_id}: {action} - {'успех' if success else 'неудача'}")
Loading