Files
loyal_companion/README.md

210 lines
6.5 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
## 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.).
### 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 |
## 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
└── 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
alembic/ # Database migrations
```
## License
MIT