Meme Wrangler Bot
Telegram bot that accepts memes (photos, GIF animations, videos) from the owner's private messages and schedules them into a channel at the next available slot among 11:00, 16:00, 21:00.
Setup
Option 1: Run with Docker (Recommended)
The easiest way to run the bot is using Docker:
-
Set up environment variables:
cp .env.example .env nano .env # Edit with your bot credentialsThe compose stack expects PostgreSQL credentials, so populate
POSTGRES_DB,POSTGRES_USER, andPOSTGRES_PASSWORD(defaults provided). Backups are protected by a built-in SHA-256 hash; optionally defineMEMEBOT_BACKUP_PASSWORD_HASHto replace it. -
Run with Docker Compose:
docker-compose up -d -
View logs:
docker-compose logs -f -
Stop the bot:
docker-compose down
For detailed Docker deployment instructions, including remote server deployment, see DOCKER_DEPLOY.md.
Option 2: Run Locally
- Create a virtualenv and install dependencies:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
-
Provision a PostgreSQL database (local Docker container or managed instance) and note the connection string.
-
Set environment variables:
export TELEGRAM_BOT_TOKEN=123:ABC
export OWNER_ID=123456789
export CHANNEL_ID=@yourchannel # or -1001234567890
export DATABASE_URL=postgresql://meme:meme@localhost:5432/meme_wrangler
# Optional: where JSON backups are written
# export MEMEBOT_BACKUP_DIR=/path/to/backups
# export MEMEBOT_BACKUP_PASSWORD_HASH=<sha256 hash of your backup secret>
- Run the bot:
python bot.py
How it works
- Owner sends a photo/video/animation in the bot's DM.
- Bot stores the Telegram file_id and schedules it for the next available slot: 11:00, 16:00, 21:00 IST (India Standard Time). If there's an existing scheduled meme, new ones are scheduled after the last one using the same cycle.
- A background task posts due memes into the configured channel at the scheduled IST times.
Docker Implementation
This project includes full Docker support for easy deployment:
- Dockerfile: Creates a lightweight Python container with all dependencies
- docker-compose.yml: Simplifies running the bot alongside PostgreSQL with coordinated configuration
- Persistent storage:
pgdatavolume keeps the database cluster while./backupsstores exported JSON backups - Auto-restart: Container automatically restarts if it crashes
- Logging: Configured with log rotation (10MB max, 3 files)
The Docker implementation ensures consistent behavior across different environments and simplifies deployment to production servers.
Notes
- All times are in IST (India Standard Time, UTC+5:30) regardless of the server's timezone.
- Stored timestamps are Unix timestamps (UTC).
- Make sure the bot is admin in the channel to post messages.
- When using Docker Compose, PostgreSQL data lives in the
pgdatavolume and JSON backups are written to./backups/. - Use
/backup <secret>to export the full meme catalog (scheduled + posted) and/restore <secret>(replying to a backup file) to import it again. Validation happens against a baked-in SHA-256 hash; overrideMEMEBOT_BACKUP_PASSWORD_HASHif you need to supply your own hash. - Every new meme DM automatically triggers a fresh JSON backup stored under
./backups/(Compose) or the directory pointed toMEMEBOT_BACKUP_DIR.