# Duty Teller (Telegram Bot) A minimal Telegram bot boilerplate using [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) v22 with the `Application` API. ## Get a bot token 1. Open Telegram and search for [@BotFather](https://t.me/BotFather). 2. Send `/newbot` and follow the prompts to create a bot. 3. Copy the token BotFather gives you. ## Setup 1. **Clone and enter the project** ```bash cd duty-teller ``` 2. **Create a virtual environment (recommended)** ```bash python -m venv venv source venv/bin/activate # Linux/macOS # or: venv\Scripts\activate # Windows ``` 3. **Install dependencies** ```bash pip install -r requirements.txt ``` 4. **Configure the bot** ```bash cp .env.example .env ``` Edit `.env` and set `BOT_TOKEN` to the token from BotFather. ## Run ```bash 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): ```bash docker compose -f docker-compose.dev.yml up --build ``` Stop with `Ctrl+C` or `docker compose -f docker-compose.dev.yml down`. - **Prod** (no volume; runs the built image; restarts on failure): ```bash docker compose -f docker-compose.prod.yml up -d --build ``` For production deployments you may use Docker secrets or your orchestrator’s env instead of a `.env` file. ## Project layout - `main.py` – Builds the `Application`, registers handlers, runs polling. - `config.py` – Loads `BOT_TOKEN` from env; exits if 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`.