- Add Living AI features overview to README - Document all Living AI configuration options - Add Living AI command toggles documentation - Add new Living AI commands (!relationship, !mood, etc.) - Update project structure to include new services - Add Living AI settings to .env.example - Add command toggles to .env.example - Update commands reference with Living AI commands - Add database files to .gitignore
279 lines
10 KiB
Markdown
279 lines
10 KiB
Markdown
# Discord AI Bot
|
|
|
|
A customizable Discord bot that responds to @mentions with AI-generated responses. Supports multiple AI providers.
|
|
|
|
## Features
|
|
|
|
- **Multi-Provider AI**: Supports OpenAI, OpenRouter, Anthropic (Claude), and Google Gemini
|
|
- **Persistent Memory**: PostgreSQL database for user and conversation storage
|
|
- **User Recognition**: Set custom names so the bot knows "who is who"
|
|
- **User Facts**: Bot remembers things about users (hobbies, preferences, etc.)
|
|
- **Web Search**: Access current information via SearXNG integration
|
|
- **Fully Customizable**: Configure bot name, personality, and behavior
|
|
- **Easy Deployment**: Docker support with PostgreSQL included
|
|
|
|
### Living AI Features
|
|
|
|
- **Autonomous Learning**: Bot automatically extracts and remembers facts from conversations
|
|
- **Mood System**: Bot has emotional states that affect its responses naturally
|
|
- **Relationship Tracking**: Bot builds relationships from Stranger to Close Friend
|
|
- **Communication Style Learning**: Bot adapts to each user's preferred style
|
|
- **Opinion Formation**: Bot develops genuine preferences on topics
|
|
- **Proactive Behavior**: Birthday wishes, follow-ups on mentioned events
|
|
- **Self-Awareness**: Bot knows its age, statistics, and history with users
|
|
- **Cross-User Connections**: Bot can identify shared interests between users
|
|
|
|
## Quick Start
|
|
|
|
### 1. Clone the repository
|
|
|
|
```bash
|
|
git clone https://github.com/your-username/discord-ai-bot.git
|
|
cd discord-ai-bot
|
|
```
|
|
|
|
### 2. Configure the bot
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Edit `.env` with your settings (see [Configuration](#configuration) below).
|
|
|
|
### 3. Run with Docker
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
This starts both the bot and PostgreSQL database. Run migrations on first start:
|
|
|
|
```bash
|
|
docker compose exec daemon-boyfriend alembic upgrade head
|
|
```
|
|
|
|
Or run locally:
|
|
|
|
```bash
|
|
python -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
python -m daemon_boyfriend
|
|
```
|
|
|
|
## Configuration
|
|
|
|
All configuration is done via environment variables in `.env`.
|
|
|
|
### Required Settings
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `DISCORD_TOKEN` | Your Discord bot token |
|
|
| `AI_PROVIDER` | `openai`, `openrouter`, `anthropic`, or `gemini` |
|
|
| `OPENAI_API_KEY` | OpenAI API key (if using OpenAI) |
|
|
| `OPENROUTER_API_KEY` | OpenRouter API key (if using OpenRouter) |
|
|
| `ANTHROPIC_API_KEY` | Anthropic API key (if using Anthropic) |
|
|
| `GEMINI_API_KEY` | Google Gemini API key (if using Gemini) |
|
|
|
|
### Bot Identity
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `BOT_NAME` | `AI Bot` | The bot's display name (used in responses) |
|
|
| `BOT_PERSONALITY` | `helpful and friendly` | Personality traits for the AI |
|
|
| `BOT_DESCRIPTION` | `I'm an AI assistant...` | Shown when mentioned without a message |
|
|
| `BOT_STATUS` | `for mentions` | Status message (shown as "Watching ...") |
|
|
| `SYSTEM_PROMPT` | (auto-generated) | Custom system prompt (overrides default) |
|
|
|
|
### AI Settings
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `AI_MODEL` | `gpt-4o` | Model to use |
|
|
| `AI_MAX_TOKENS` | `1024` | Maximum response length |
|
|
| `AI_TEMPERATURE` | `0.7` | Response creativity (0.0-2.0) |
|
|
| `MAX_CONVERSATION_HISTORY` | `20` | Messages to remember per user |
|
|
|
|
### Database (PostgreSQL)
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `DATABASE_URL` | (none) | PostgreSQL connection string |
|
|
| `POSTGRES_PASSWORD` | `daemon` | Password for docker-compose PostgreSQL |
|
|
| `CONVERSATION_TIMEOUT_MINUTES` | `60` | Minutes before starting new conversation |
|
|
|
|
When `DATABASE_URL` is set, the bot uses PostgreSQL for persistent storage. Without it, the bot falls back to in-memory storage (data lost on restart).
|
|
|
|
### Web Search (SearXNG)
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `SEARXNG_URL` | (none) | SearXNG instance URL |
|
|
| `SEARXNG_ENABLED` | `true` | Enable/disable web search |
|
|
| `SEARXNG_MAX_RESULTS` | `5` | Max search results to fetch |
|
|
|
|
When configured, the bot automatically searches the web for queries that need current information (news, weather, etc.).
|
|
|
|
### Living AI Settings
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `LIVING_AI_ENABLED` | `true` | Master switch for all Living AI features |
|
|
| `MOOD_ENABLED` | `true` | Enable mood system |
|
|
| `RELATIONSHIP_ENABLED` | `true` | Enable relationship tracking |
|
|
| `FACT_EXTRACTION_ENABLED` | `true` | Enable autonomous fact extraction |
|
|
| `FACT_EXTRACTION_RATE` | `0.3` | Probability of extracting facts (0.0-1.0) |
|
|
| `PROACTIVE_ENABLED` | `true` | Enable proactive messages (birthdays, follow-ups) |
|
|
| `CROSS_USER_ENABLED` | `false` | Enable cross-user associations (privacy-sensitive) |
|
|
| `OPINION_FORMATION_ENABLED` | `true` | Enable bot opinion formation |
|
|
| `STYLE_LEARNING_ENABLED` | `true` | Enable communication style learning |
|
|
| `MOOD_DECAY_RATE` | `0.1` | How fast mood returns to neutral per hour |
|
|
|
|
### Command Toggles
|
|
|
|
All commands can be individually enabled/disabled. When disabled, the bot handles these functions naturally through conversation.
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `COMMANDS_ENABLED` | `true` | Master switch for all commands |
|
|
| `CMD_RELATIONSHIP_ENABLED` | `true` | Enable `!relationship` command |
|
|
| `CMD_MOOD_ENABLED` | `true` | Enable `!mood` command |
|
|
| `CMD_BOTSTATS_ENABLED` | `true` | Enable `!botstats` command |
|
|
| `CMD_OURHISTORY_ENABLED` | `true` | Enable `!ourhistory` command |
|
|
| `CMD_BIRTHDAY_ENABLED` | `true` | Enable `!birthday` command |
|
|
| `CMD_REMEMBER_ENABLED` | `true` | Enable `!remember` command |
|
|
| `CMD_SETNAME_ENABLED` | `true` | Enable `!setname` command |
|
|
| `CMD_WHATDOYOUKNOW_ENABLED` | `true` | Enable `!whatdoyouknow` command |
|
|
| `CMD_FORGETME_ENABLED` | `true` | Enable `!forgetme` command |
|
|
|
|
### Example Configurations
|
|
|
|
**Friendly Assistant:**
|
|
```env
|
|
BOT_NAME=Helper Bot
|
|
BOT_PERSONALITY=friendly, helpful, and encouraging
|
|
BOT_DESCRIPTION=I'm here to help! Ask me anything.
|
|
BOT_STATUS=ready to help
|
|
```
|
|
|
|
**Technical Expert:**
|
|
```env
|
|
BOT_NAME=TechBot
|
|
BOT_PERSONALITY=knowledgeable, precise, and technical
|
|
BOT_DESCRIPTION=I'm a technical assistant. Ask me about programming, DevOps, or technology.
|
|
BOT_STATUS=for tech questions
|
|
```
|
|
|
|
**Custom System Prompt:**
|
|
```env
|
|
BOT_NAME=GameMaster
|
|
SYSTEM_PROMPT=You are GameMaster, a Dungeon Master for text-based RPG adventures. Stay in character, describe scenes vividly, and guide players through exciting quests. Use Discord markdown for emphasis.
|
|
```
|
|
|
|
## Discord Setup
|
|
|
|
1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
|
|
2. Create a new application
|
|
3. Go to **Bot** and create a bot
|
|
4. Enable these **Privileged Gateway Intents**:
|
|
- Server Members Intent
|
|
- Message Content Intent
|
|
5. Copy the bot token to your `.env` file
|
|
6. Go to **OAuth2** → **URL Generator**:
|
|
- Select scope: `bot`
|
|
- Select permissions: `Send Messages`, `Read Message History`, `View Channels`
|
|
7. Use the generated URL to invite the bot to your server
|
|
|
|
## Usage
|
|
|
|
Mention the bot in any channel:
|
|
|
|
```
|
|
@YourBot what's the weather like?
|
|
@YourBot explain quantum computing
|
|
@YourBot help me write a poem
|
|
```
|
|
|
|
### Memory Commands
|
|
|
|
Users can manage what the bot remembers about them:
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `!setname <name>` | Set your preferred name |
|
|
| `!clearname` | Reset to Discord display name |
|
|
| `!remember <fact>` | Tell the bot something about you |
|
|
| `!whatdoyouknow` | See what the bot remembers |
|
|
| `!forgetme` | Clear all facts about you |
|
|
|
|
Admin commands:
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `!setusername @user <name>` | Set name for another user |
|
|
| `!teachbot @user <fact>` | Add a fact about a user |
|
|
|
|
### Living AI Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `!relationship` | See your relationship level with the bot |
|
|
| `!mood` | See the bot's current emotional state |
|
|
| `!botstats` | Bot shares its self-awareness statistics |
|
|
| `!ourhistory` | See your history with the bot |
|
|
| `!birthday <date>` | Set your birthday for the bot to remember |
|
|
|
|
**Note:** When commands are disabled, the bot handles these naturally through conversation:
|
|
- Ask "what do you know about me?" instead of `!whatdoyouknow`
|
|
- Say "call me Alex" instead of `!setname Alex`
|
|
- Ask "how are you feeling?" instead of `!mood`
|
|
- Say "my birthday is March 15th" instead of `!birthday`
|
|
|
|
## AI Providers
|
|
|
|
| Provider | Models | Notes |
|
|
|----------|--------|-------|
|
|
| OpenAI | gpt-4o, gpt-4-turbo, gpt-3.5-turbo | Official OpenAI API |
|
|
| OpenRouter | 100+ models | Access to Llama, Mistral, Claude, etc. |
|
|
| Anthropic | claude-3-5-sonnet, claude-3-opus | Direct Claude API |
|
|
| Gemini | gemini-2.0-flash, gemini-1.5-pro | Google AI API |
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
src/daemon_boyfriend/
|
|
├── bot.py # Main bot class
|
|
├── config.py # Configuration
|
|
├── cogs/
|
|
│ ├── ai_chat.py # Mention handler
|
|
│ ├── memory.py # Memory commands
|
|
│ └── status.py # Health/status commands
|
|
├── models/
|
|
│ ├── user.py # User, UserFact, UserPreference
|
|
│ ├── conversation.py # Conversation, Message
|
|
│ ├── guild.py # Guild, GuildMember
|
|
│ └── living_ai.py # BotState, UserRelationship, etc.
|
|
└── services/
|
|
├── ai_service.py # AI provider factory
|
|
├── database.py # PostgreSQL connection
|
|
├── user_service.py # User management
|
|
├── persistent_conversation.py # DB-backed history
|
|
├── providers/ # AI providers
|
|
├── searxng.py # Web search service
|
|
├── mood_service.py # Mood system
|
|
├── relationship_service.py # Relationship tracking
|
|
├── fact_extraction_service.py # Autonomous learning
|
|
├── communication_style_service.py # Style learning
|
|
├── opinion_service.py # Opinion formation
|
|
├── proactive_service.py # Scheduled events
|
|
├── self_awareness_service.py # Bot self-reflection
|
|
└── association_service.py # Cross-user connections
|
|
schema.sql # Database schema
|
|
project-vision.md # Living AI design document
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|