原始内容
Narumi's Telegram Bot
A Telegram bot built with aiogram and OpenAI Agents. Provides chat assistance, URL summarization, translation, article rewriting, finance lookups, and YouTube search via a set of slash commands.
Requirements
- Python
>=3.14 uv
Quick Start
# 1. Install dependencies
uv sync
# 2. Create .env (see Environment Variables below)
cp .env.example .env
# edit .env and fill in BOT_TOKEN and model access credentials
# 3. Run the bot
uv run bot
The CLI requires .env in the working directory and will fail immediately if it is missing.
Environment Variables
Required:
BOT_TOKEN=your_telegram_bot_token
Required for LLM features — choose one mode:
# Option A: direct OpenAI
OPENAI_API_KEY=your_openai_api_key
# Option B: OpenAI-compatible proxy (e.g. local Bifrost)
OPENAI_BASE_URL=http://127.0.0.1:8080/openai/v1
# OPENAI_API_KEY can be empty when the proxy does not require it
Optional:
BOT_WHITELIST=comma,separated,chat_ids # restrict access to specific chat IDs
DEVELOPER_CHAT_ID=123456789 # receives error notifications
OPENAI_MODEL=gpt-5-mini
OPENAI_TEMPERATURE=0.0
AGENT_MAX_CACHE_SIZE=50
AGENT_REPLY_ENABLED=false # set true to route replies to bot messages into /a
MAX_MESSAGE_LENGTH=1000
MCP_CONNECT_TIMEOUT=30
MCP_CLEANUP_TIMEOUT=10
MCP_SERVER_TIMEOUT=300
SHUTDOWN_TIMEOUT=20
FIRECRAWL_API_KEY=... # enables Firecrawl MCP
SERPAPI_API_KEY=... # enables SerpAPI MCP
LOGFIRE_TOKEN=... # enables Logfire observability
See .env.example for a complete template.
Commands
| Command | Description |
|---|---|
/help |
Show built-in help |
/a, /gpt |
Chat with the agent |
/model |
Show the current model |
/setmodel <name> |
Set model at runtime (gpt-4.1, gpt-5-mini, gpt-5-nano, gpt-5.1-codex-mini, gpt-5.3-codex, gpt-5.4) |
/s |
Summarize a URL |
/jp, /tc, /en |
Translate message text to Japanese, Traditional Chinese, or English |
/t |
Query ticker data (Yahoo Finance + TWSE) |
/yt |
Search YouTube |
/f, /w |
Rewrite text into article format |
/echo |
Echo the message |
Additional interactions:
- Set
AGENT_REPLY_ENABLED=trueto route replies to bot messages into the chat agent. - Sending a
.pdfor.htmlfile triggers rewrite processing.
MCP Configuration
MCP servers are configured in config/*.json. The default config is loaded automatically:
uv run bot # uses config/default.json
uv run bot --config config/custom.json # uses a custom config
Always-enabled MCP servers: playwright, yfmcp
Optional MCP servers (activated when the corresponding API key is set): Firecrawl (FIRECRAWL_API_KEY), SerpAPI (SERPAPI_API_KEY)
Project Layout
src/bot/
agents/ # LLM agents and conversation memory
callbacks/ # Telegram command handlers
core/ # prompt and response shaping
tools/ # external data integrations
utils/ # shared utilities
bot.py # dispatcher and routing
cli.py # CLI entrypoint
settings.py # Pydantic settings (reads from .env)
tests/ # pytest suite (mirrors src/bot/ structure)
config/ # MCP server config files
docs/ # project documentation
Development
uv run ruff check src # lint
uv run ty check src # type check
prek run -a # run all pre-commit hooks
Testing
uv run pytest -v -s tests # full test suite
uv run pytest -v -s --cov=src tests # with coverage
uv run pytest tests/<path>.py -v # single file
License
MIT. See LICENSE.