Телеграм-бот для удобного учета личных финансов. Сохраняет в Базу Данных статью затрат, категорию затрат и стоимость.
- Мультимодальный ввод: Бот принимает как текстовые сообщения, так и голосовые заметки (через Yandex SpeechKit).
- ИИ-парсинг: Использование модели DeepSeek для извлечения сущностей (категория, сумма, дата) из неструктурированного текста.
- Автоматическая отчетность: Генерация наглядных таблиц с расходами за выбранный период.
- Валидация данных: Строгая проверка типов через Pydantic перед записью в базу данных.
- Надежное логирование: Вся работа системы фиксируется через Loguru для быстрого мониторинга и отладки.
- Python 3.12.7
- pyTelegramBotAPI — взаимодействие с Telegram
- SQLAlchemy — работа с базой данных
- OpenAI — интеграция с DeepSeek AI
- PrettyTable — формирование отчетов и сводных таблиц
- Loguru — логирование данных
- Requests — API запросы к Яндекс
- Pydantic — валидация данных
- YandexSpeechKit — перевод голоса в текст
- Ruff — Линтинг и форматирование кода
- Клонируйте репозиторий:
git clone [https://github.com/ваш_логин/count_bot.git] cd count_bot - Создайте и активируйте виртуальное окружение:
python -m venv venv source venv/bin/activate # Для Linux/macOS venv\Scripts\activate # Для Windows
- Установите зависимости:
pip install -r requirements.txt
-
Создайте в корне проекта файл
.env. -
Добавьте в него следующие переменные:
DEEPSEEK_API_KEY = ваш_ключ_deepseek TOKEN_TELEGRAMM = ваш_токен_телеграм_бота AUTH (OAuth-токен): токен_к_сервисам_яндекса FOLDER_ID = Идентификатор_каталога DATABASE_URL = испольщзуемая база, попробуйте начать с sqlite 'sqlite:///count_bot.sqlite'
Получить OAuth-токен Идентификатор_каталога
Пользователь: Купил продукты на 1500 и заехал на мойку 500 Бот:
✅ Данные сохранены!
+-----------+----------+-------+
| Категория | Товар | Цена |
+-----------+----------+-------+
| продукты | продукты | 1500 |
| транспорт | мойка | 500 |
+-----------+----------+-------+
Пользователь: (Голосовое): «Купил лошадь за сто рублей Бот:
✅ Данные сохранены!
+-----------+--------+-------+
| Категория | Товар | Цена |
+-----------+--------+-------+
| животные | лошадь | 100 |
+-----------+--------+-------+
Пользователь: Покажи расходы за неделю Бот:
+-----------+--------+
| Категория | Сумма |
+-----------+--------+
| животные | 100 |
+-----------+--------+
|продукты | 1500 |
+-----------+--------+
|Итого | 1600 |
+-----------+--------+
count_bot/
├── alembic/ # Миграции базы данных (хранение истории изменений)
├── app/ # Основной код приложения
│ ├── main.py # Точка входа, запуск бота
│ ├── telebot_config.py # Конфигурация и хендлеры Telegram
│ ├── service.py # Бизнес-логика (MainService)
│ ├── crud.py # Операции с базой данных (SQLAlchemy CRUD)
│ ├── models.py # SQLAlchemy модели (Описание таблиц)
│ ├── schemas.py # Pydantic схемы (Валидация данных)
│ ├── validators.py # Логика предварительной проверки сообщений
│ ├── table_factory.py # Генерация визуальных отчетов (таблиц)
│ ├── constants.py # Текстовые константы и настройки приложения
│ ├── loguru_config.py # Инициализация и настройка логгера
│ ├── deepseek_config.py # Интеграция с ИИ DeepSeek
│ └── yandex_speech_kit_config.py # Интеграция с Yandex SpeechKit
├── logs/ # Логи приложения (создаются автоматически)
├── .pre-commit-config.yaml # Конфигурация хуков (Ruff, линтеры)
├── alembic.ini # Конфигурация Alembic
├── requirements.txt # Зависимости проекта
├── ruff.toml # Настройки линтера Ruff
└── README.md # Документация
Файл базы данных (count_bot.sqlite) будет доступен в корне после выполнения миграции: alembic upgrade head
- Аслан Лигус — Идея и разработка — @Aslan_Ligus
Этот проект распространяется под лицензией MIT — подробности см. в файле LICENSE.