A Telegram bot that helps you manage your reading list with automatic metadata extraction and reading time estimates.
- Go to supabase.com and create a free account
- Create a new project
- Go to the SQL Editor and run this to create the table:
CREATE TABLE reading_items (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
url TEXT NOT NULL,
title TEXT,
source TEXT,
author TEXT,
estimated_minutes INTEGER,
word_count INTEGER,
status TEXT DEFAULT 'unread',
tags TEXT[],
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
read_at TIMESTAMPTZ,
thumbnail_url TEXT
);- Go to Project Settings > API and copy:
- Project URL (looks like
https://xxxxx.supabase.co) anonpublic key
- Project URL (looks like
- Open Telegram and message @BotFather
- Send
/newbot - Follow the prompts to name your bot
- Copy the bot token
cd reading-list-bot
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create .env file from template
cp .env.example .envEdit .env with your credentials:
TELEGRAM_BOT_TOKEN=your_token_here
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your_anon_key_here
WEEKLY_READING_BUDGET=300
python test_connection.pyQuick run (stops when terminal closes):
python bot.pyRun persistently with tmux (recommended):
# Start a new tmux session
tmux new -s bot
# Inside tmux, run the bot
source venv/bin/activate
python bot.py
# Detach from tmux: press Ctrl+B, then D
# The bot keeps running in the backgroundtmux commands:
tmux attach -t bot # Reattach to session
tmux ls # List all sessions
tmux kill-session -t bot # Stop the botNote: The bot stops when your computer sleeps or shuts down.
Once the bot is running, open Telegram and start a chat with your bot.
| Command | Description |
|---|---|
| Send a URL | Saves the article with metadata |
/list |
Show your unread items (top 10) |
/show <id> |
Show full details for an item |
/stats |
View weekly reading progress |
/random |
Get a random item to read |
/oldest |
Get your oldest unread item |
/done <id> |
Mark an item as completed |
/tag <id> <tags> |
Add comma-separated tags |
/modify <id> "New title" |
Update an item's title |
/search <keyword> |
Search titles and URLs |
/archive <id> |
Archive an item |
/remove <id> |
Delete an item permanently |
/save <url> [title] |
Save a URL with an optional custom title |
/help |
Show help message |
- See an interesting article on your phone? Share the URL to your bot
- The bot extracts the title and estimates reading time
- Later, run
/listto see what's waiting - Use
/randomwhen you have time to read something - Run
/done <id>when finished - Check
/statsto see your weekly progress - Use
/modify <id> "New title"orurl | New titleto fix titles
The bot tracks your reading against a weekly budget (default: 300 minutes = 5 hours).
Change the budget in .env:
WEEKLY_READING_BUDGET=420 # 7 hours