c0f085650183b9b9f22aa4f161cb4250c7bb0ac7
Bot can now fetch and read the text content of URLs shared in chat. Uses httpx for async HTTP and BeautifulSoup to strip HTML noise. Output is capped at 8000 chars to avoid blowing the context window. Co-Authored-By: DadBot <dadbot@localhost>
DadBot
A Discord bot with a persistent personality, long-term memory, and a simulated inner life. Runs through LiteLLM so you can point it at any model.
Features
- Persistent personality — DadBot can rewrite his own personality prompt via a tool call. Changes persist to
personality.txtand are logged topersonality_changelog.txt. - User dossiers — Automatically builds and maintains a per-user fact file (
dossiers.json) from conversation history. - Self-reflection — When idle, DadBot runs a private reflection session: explores a topic from
topics.txt, updates his reflection notes, and may refine his personality. - Life simulation — Alternates with reflection sessions to run scripted life events (
life_events.json) as a two-LLM dialogue. Outcomes are summarised intolife_history.txtand can influence personality. - Web search — Connected to a SearXNG MCP server for live web search during conversations and reflections.
- Image support — Handles image attachments in messages (base64-encoded, passed to the model as vision input).
- Multi-message replies — Use
[SPLIT]in model output to send multiple Discord messages with natural word-count-based pacing. - Rolling context — Per-channel message history with a configurable window (
MAX_CONTEXT).
Requirements
- Python 3.11+
- A running LiteLLM proxy
- A running SearXNG MCP instance (optional but expected)
- A Discord bot token
Setup
- Copy
.env.exampleto.envand fill in your values:
DISCORD_TOKEN=your_discord_bot_token
LITELLM_BASE_URL=http://your-litellm-host:4000/v1
LITELLM_API_KEY=your_key
MODEL=your-chat-model
BACKGROUND_MODEL=your-background-model # defaults to MODEL if unset
SYSTEM_PROMPT=...
MAX_CONTEXT=20
MCP_URL=http://mcp-searxng:4001/mcp
- Install dependencies:
pip install -r requirements.txt
- Run:
python bot.py
Docker
docker compose up -d
The compose file expects an external Docker network named aiplayground_litellm_internal and mounts all persistent data files from the project directory.
Configuration
| Variable | Default | Description |
|---|---|---|
MODEL |
gpt-4 |
Model for chat and reflection |
BACKGROUND_MODEL |
MODEL |
Model for background tasks (life sim, reflection) |
MAX_CONTEXT |
20 |
Rolling message history per channel |
SYSTEM_PROMPT |
You are a helpful assistant. |
Base system prompt |
MCP_URL |
http://mcp-searxng:4001/mcp |
SearXNG MCP endpoint |
REFLECTION_IDLE_MIN |
(see bot.py) | Minutes of inactivity before background task fires |
REFLECTION_MAX_TURNS |
5 |
Max LLM turns per reflection session |
LIFE_SIM_MAX_TURNS |
6 |
Max turns per life simulation event |
Data Files
| File | Purpose |
|---|---|
personality.txt |
DadBot's current personality prompt (editable by the bot) |
dossiers.json |
Per-user and self fact store |
reflection_notes.txt |
Notes DadBot saves for future reflection sessions |
reflection_log.txt |
Full transcripts of past reflection sessions |
personality_changelog.txt |
Log of every personality change with reasoning |
topics.txt |
One topic per line — exploration pool for reflection sessions |
used_topics.json |
Tracks which topics have been used |
life_events.json |
Ordered list of life events to simulate |
used_life_events.json |
Tracks which life events have been played |
life_history.txt |
Summaries of completed life events |
life_sim_log.txt |
Full transcripts of life simulation sessions |
Languages
Python
99.6%
Dockerfile
0.4%