Telegram‑бот для быстрых процентных расчётов от заданной суммы (комиссия/кэшбэк/доля) и расчёта дохода/штрафа по годовой ставке в пересчёте на день / неделю / 30 дней.
Изначально бот делался под внутренние рабочие задачи в Тинькофф (ныне Т‑Банк).
Репозиторий полезен как небольшой учебный/портфолио‑проект: Telegram Bot + конфиг через.env+ логирование + тесты.
- Расчёт суммы процентов от заданной базы.
- Пересчёт годовой процентной ставки в:
- доход (или штраф) за 1 день
- за 7 дней
- за 30 дней
- Диалоговый сценарий в Telegram (
/start, ввод суммы, затем ввод процента). - Токен бота не хранится в коде, подтягивается из окружения (
.env).
- Python (3.12+).
pip- Telegram Bot Token (через BotFather)
# 1) Клонировать репозиторий
git clone <repo-url>
cd <repo-dir>
# 2) Виртуальное окружение
python -m venv .venv
# Linux/macOS:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
# 3) Зависимости
pip install -r requirements.txtВ корне есть файл .env example — скопируй его в .env и заполни токен.
cp ".env example" .envpython Percents_Per_Day_Bank.py- Открой бота в Telegram:
http://t.me/Percents_Per_Day_bot - Нажми
/start - Введи сумму (целым числом)
- Введи годовую процентную ставку (целым числом)
- Получи расчёт за 1 / 7 / 30 дней
В разработке
pytest -q.
├── lib/
│ ├── __init__.py
│ ├── exceptions.py
│ ├── project_log.py
│ └── secrets.py
├── tests/
│ ├── conftest.py
│ └── test_bot_flow.py
├── Percents_Per_Day_Bank.py
├── requirements.txt
├── pyproject.toml
├── setup.cfg
├── README.md
├── Makefile
└── .env example
Я фиксирую изменения, связанные с безопасностью:
- 2025-09-31 — Security rotation:
Issued a new bot token and revoked the previous one.
Практика безопасности:
- токены не хранятся в коде;
- старые токены своевременно отзывались;
- доступы пересматриваются по мере развития проекта.
- Сейчас ввод проверяется через
.isdigit(), поэтому дробные значения (например1000.50) не пройдут. - В коде используются глобальные переменные (
Deposit_Amountи т.д.) — для масштабирования лучше хранить состояние на пользователя (например, через FSM/Storage). - Ошибки при отсутствии токена сейчас заканчиваются
raiseбез явного типа исключения — лучше поднять свойExceptionизlib/exceptions.py.
- Поддержка дробных сумм/ставок (
decimal.Decimal), локали и разделителя. - Более строгая валидация ввода (диапазоны, отрицательные значения).
- FSM (состояния диалога) вместо глобальных переменных.
- Dockerfile / deploy (Webhook/long polling).
- CI: линтеры + тесты (GitHub Actions).
Eugenii Petrov — epoy74@gmail.com