Телеграм-бот на Python для учёта инвестиций в Bitcoin (BTC) и золото.
- ✅ Визуальный интерфейс с интерактивными кнопками
- ✅ Главное меню для быстрой навигации
- ✅ Регистрация пользователей через
/start - ✅ Добавление покупок через интерактивный диалог с подсказками
- ✅ Автоматический расчёт количества актива, средней цены, текущей стоимости и прибыли/убытка
- ✅ Портфель с цветовой индикацией (зелёный = прибыль, красный = убыток)
- ✅ Графики статистики (рост инвестиций, история цен, распределение активов)
- ✅ Детальная статистика по каждому активу
- ✅ Обновление текущих цен через CoinGecko API
- ✅ Автоматические уведомления о ценах - бот отправляет уведомления при значительных изменениях цен
- ✅ Резерв для покупок - установите резерв и отслеживайте его в портфеле
- ✅ Проверка резерва - предупреждение при превышении резерва при покупке
- ✅ SQLite база данных для хранения данных
Бот оптимизирован для быстрой работы и стабильности:
- ⚡ Асинхронные запросы к API для получения цен (httpx)
- 💾 Кэширование цен на 5 минут для уменьшения нагрузки на API
- 🔄 Пакетное обновление цен - все активы обновляются одновременно
- 🛡️ Улучшенная обработка ошибок при работе с Telegram и API
- 📊 Оптимизированные вычисления портфеля (взвешенная средняя цена)
- 📝 Детальное логирование всех операций в файл
bot.log - 🎯 Безопасные методы отправки сообщений с обработкой сетевых ошибок
- ⚙️ Асинхронное создание графиков для ускорения ответов
-
Клонируйте репозиторий или скачайте файлы
-
Установите зависимости:
pip install -r requirements.txt-
Для работы графиков установите Google Chrome:
Графики создаются с помощью библиотеки Plotly, которая требует установленный Google Chrome.
Вариант 1 (рекомендуется): Установите Chrome вручную:
- Linux/Docker: Установите Chrome или Chromium:
# Ubuntu/Debian sudo apt-get update && sudo apt-get install -y chromium-browser # Или используйте официальный скрипт Plotly: plotly_get_chrome
- Windows: Скачайте и установите Chrome с официального сайта
- macOS: Установите Chrome через Homebrew или скачайте с официального сайта
Вариант 2: Используйте автоматическую установку через Plotly:
python -c "import plotly; plotly.io.kaleido.scope.chromium_args += ['--no-sandbox', '--disable-setuid-sandbox']" plotly_get_chromeПримечание: Если Chrome не установлен, графики не будут создаваться, но бот продолжит работать и покажет текстовую статистику.
- Linux/Docker: Установите Chrome или Chromium:
-
Настройте токен бота:
- Получите токен у @BotFather в Telegram
- Откройте файл
.envи заменитеyour_bot_token_hereна ваш токен:BOT_TOKEN=ваш_токен_здесь - Файл
.envуже добавлен в.gitignoreи не будет закоммичен в репозиторий
python main.pyRailway автоматически определит Dockerfile и установит все зависимости, включая Chrome для графиков.
Шаги для развертывания:
-
Подключите репозиторий к Railway:
- Зайдите на railway.app
- Создайте новый проект
- Выберите "Deploy from GitHub repo" и подключите ваш репозиторий
-
Настройте переменные окружения:
- В настройках проекта Railway добавьте переменную окружения:
BOT_TOKEN=ваш_токен_здесь - Опционально можно добавить:
DATABASE_NAME=wealth_logger.db
- В настройках проекта Railway добавьте переменную окружения:
-
Railway автоматически:
- ✅ Обнаружит Dockerfile
- ✅ Установит все Python зависимости из
requirements.txt - ✅ Установит Google Chrome и Chromium для графиков
- ✅ Настроит все необходимые системные библиотеки
- ✅ Запустит бота
-
После деплоя:
- Бот будет автоматически запускаться при каждом обновлении кода
- Все зависимости, включая Chrome, будут установлены автоматически
- Графики будут работать без дополнительной настройки
Примечание: Railway использует Dockerfile для сборки образа. Все зависимости, включая Chrome, устанавливаются автоматически при деплое.
/start- Начать работу с ботом (открывает главное меню)/menu- Открыть главное меню с кнопками/buy- Добавить покупку (открывает интерактивный диалог)
- ➕ Добавить покупку - Интерактивный диалог для добавления покупки
- 📊 Портфель - Просмотр портфеля с цветовой индикацией прибыли/убытка и учётом резерва
- 📈 Статистика - Графики роста, истории цен и распределения активов
- 🔄 Обновить цены - Обновление текущих цен через API
- ⚙️ Настройки - Управление уведомлениями и резервами
🔔 Уведомления о ценах:
- Включите/выключите автоматические уведомления
- Установите порог изменения цены (по умолчанию 5%)
- Бот проверяет цены каждые 10 минут и отправляет уведомления при превышении порога
💰 Резерв для покупок:
- Установите сумму резерва для будущих покупок
- Резерв отображается в портфеле отдельной строкой
- При добавлении покупки бот предупреждает, если сумма превышает доступный резерв
- 🟢 Зелёная индикация - прибыль
- 🔴 Красная индикация - убыток
- 📊 Графики - визуализация роста инвестиций и распределения активов
- 💡 Подсказки - краткие пояснения после каждого действия
- BTC (Bitcoin)
- Gold (Золото)
wealth-logger-bot/
├── main.py # Главный файл бота с визуальным интерфейсом
├── database.py # Работа с базой данных
├── api_client.py # Работа с API цен
├── charts.py # Создание графиков статистики
├── config.py # Конфигурация
├── .env # Токен бота (создайте этот файл)
├── .gitignore # Игнорируемые файлы
├── requirements.txt # Зависимости
└── README.md # Документация
Бот использует SQLite базу данных (wealth_logger.db), которая создаётся автоматически при первом запуске.
Таблицы:
users- информация о пользователяхtransactions- транзакции покупокprices- кэш текущих ценuser_settings- настройки пользователей (уведомления, резервы)
Для получения текущих цен используется CoinGecko API.
- Асинхронные HTTP-запросы через
httpx - Кэширование результатов на 5 минут
- Автоматический fallback на кэш БД при ошибках API
- Пакетная загрузка цен для нескольких активов одновременно
Все операции бота логируются в файл bot.log с детальной информацией:
- Запросы пользователей
- Ошибки при работе с API и Telegram
- Обновления цен
- Операции с базой данных
- Отправка уведомлений о ценах
Уровень логирования: INFO (можно изменить в main.py)
Бот автоматически проверяет изменения цен каждые 10 минут и отправляет уведомления пользователям, у которых включены уведомления.
Как это работает:
- Бот сравнивает текущую цену с предыдущей (из кэша БД)
- Если изменение превышает установленный порог (по умолчанию 5%), отправляется уведомление
- Уведомление содержит информацию о направлении изменения (рост/падение) и процент изменения
Настройка:
- Включите/выключите уведомления в настройках
- Измените порог изменения (например, 3% или 10%)
- Уведомления отправляются только для активов, которые есть в вашем портфеле
Резерв позволяет отслеживать сумму, которую вы планируете оставить для будущих покупок.
Как это работает:
- Установите сумму резерва в настройках
- Резерв отображается в портфеле отдельной строкой
- При добавлении покупки бот предупреждает, если сумма превышает доступный резерв
- Общая стоимость портфеля (с резервом) показывается в итоговой сводке
Пример:
- Резерв: $1000
- Уже вложено: $600
- Доступно для покупок: $400
MIT