- Added ALLOWED_USERNAMES and ADMIN_USERNAMES to .env.example for user access control. - Implemented validation of Telegram Web App initData in a new telegram_auth.py module. - Enhanced API to check user access before fetching duties. - Updated README with instructions for configuring miniapp access. - Modified .dockerignore and .gitignore to include data directory and database files.
Duty Teller (Telegram Bot)
A minimal Telegram bot boilerplate using python-telegram-bot v22 with the Application API.
Get a bot token
- Open Telegram and search for @BotFather.
- Send
/newbotand follow the prompts to create a bot. - Copy the token BotFather gives you.
Setup
-
Clone and enter the project
cd duty-teller -
Create a virtual environment (recommended)
python -m venv venv source venv/bin/activate # Linux/macOS # or: venv\Scripts\activate # Windows -
Install dependencies
pip install -r requirements.txt -
Configure the bot
cp .env.example .envEdit
.envand setBOT_TOKENto the token from BotFather. -
Miniapp access (calendar)
To allow access to the calendar miniapp, setALLOWED_USERNAMESto a comma-separated list of Telegram usernames (without@). Users inADMIN_USERNAMESalso have access; the admin role is reserved for future bot commands and API features. If both are empty, no one can open the calendar.
Run
python main.py
The bot runs in polling mode. Send /start or /help to your bot in Telegram to test.
Run with Docker
Ensure .env exists (e.g. cp .env.example .env) and contains BOT_TOKEN.
-
Dev (volume mount; code changes apply without rebuild):
docker compose -f docker-compose.dev.yml up --buildStop with
Ctrl+Cordocker compose -f docker-compose.dev.yml down. -
Prod (no volume; runs the built image; restarts on failure):
docker compose -f docker-compose.prod.yml up -d --buildFor production deployments you may use Docker secrets or your orchestrator’s env instead of a
.envfile.
Project layout
main.py– Builds theApplication, registers handlers, runs polling.config.py– LoadsBOT_TOKEN,ALLOWED_USERNAMES,ADMIN_USERNAMESfrom env; exits ifBOT_TOKENis missing.handlers/– Command and error handlers; add new handlers here.requirements.txt– Pinned dependencies (PTB with job-queue, python-dotenv).
To add commands, define async handlers in handlers/commands.py (or a new module) and register them in handlers/__init__.py.