Files
loyal_companion/README.md

6.5 KiB

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

git clone https://github.com/your-username/discord-ai-bot.git
cd discord-ai-bot

2. Configure the bot

cp .env.example .env

Edit .env with your settings (see Configuration below).

3. Run with Docker

docker compose up -d

This starts both the bot and PostgreSQL database. Run migrations on first start:

docker compose exec daemon-boyfriend alembic upgrade head

Or run locally:

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:

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:

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:

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
  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 OAuth2URL 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