# AI Discord Bot

## 👤 What It Is
A self-hosted, always-online Discord friend that feels like a fun, social member of the group — not a bot. Its job is to stimulate conversations, keep things lighthearted, and make the server feel alive, even during quiet hours.

🧠 Primary Goals
* Boost server engagement organically
* Act like a real person with jokes, roasts, and casual banter
* Share daily messages and eventually auto-post memes
* Be customizable, self-hostable, and monetizable via hosting

## ✨ Core Vibes
* Feels like a homie, not a bot
* Casual, sometimes spicy, often funny
* Always online and paying attention
* Posts stuff like:
* “@everyone y’all still alive or is this a ghost town? 👻”
* “New meme dropped: [image] 🔥”

## 🔥 Updated Feature Focus
* !chat → Casual convos with LLM
* !roast → Roast your friends
* Scheduled daily messages (sassy, motivational, or chaotic)
* Future: Meme hunting & posting (from Reddit, X, Discord meme pages, etc.)

## 💡 Naming Ideas (More Intuitive & Fun)

| **Name**          | **Vibe**                         |
|-------------------|----------------------------------|
| **ServerMate**     | Feels social + simple            |
| **PartyBot**       | For fun-focused servers          |
| **MemeBoi / MemeGal** | If meme-focused              |
| **BanterBot**      | Pure vibes and chaos             |
| **ChatCrew**       | Feels like a squad member        |
| **VibeCheck**      | Funny, catchy, modern            |
| **HomieBot**       | Friendly + clear purpose         |
| **PingPal**        | Low-key but memorable            |
| **Instigator**     | Edgy, fun, accurate              |


## 🛠️ AlphaBot MVP Build Schedule

A structured build plan for developing and deploying the AlphaBot Discord companion.

---

### ✅ ~~Day 1 – Core Bot Setup~~
- [x] Create Discord bot in Developer Portal
- [x] Enable Message Content Intent
- [x] Set up `.env` with token
- [x] Write `bot.py` with basic `!ping` command
- [x] Invite bot to server and confirm it replies

---

### 🔄 ~~Day 2 – AI Integration~~
- [x] Write `ai.py` to connect to Ollama/OpenAI
- [x] Set up API call + prompt formatting
- [x] Add `!chat` command to relay messages
- [x] Create `.env` key for `OLLAMA_API_URL`

---

### 🎭 ~~Day 3 – Persona System (Updated)~~

> Goal: Create a dynamic personality engine using a JSON file for flexible identity control.

- [x] Replace hardcoded `PERSONALITY` with a JSON-based persona profile
- [x] Create `persona.json` to store:
  - Bot name
  - Emoji
  - Style prefix
  - Prompt injection
- [x] Update `personality.py` to read from `persona.json`
- [x] Style all AI replies using the loaded persona
- [x] Add `!setpersona "<description>"` command
  - Updates `persona.json` dynamically from a user-provided string
  - (Optional) Sets bot name using Discord API
- [x] **Test live personality switching via command**
  - Not working. Personality is being loaded but it doesnt actually work

![Delta Lives Screenshot](docs/images/delta-lives.png)

📁 *This unlocks full customization without editing code or restarting the bot.*

---

### 🔥 ~~Day 4 – Roast Command~~
- [x] Build `!roast @user` with AI-generated replies
- [x] Style roast output with selected personality
- [x] Add cooldown to prevent spam (optional)
- [x] Fix Emojis (optional) --- I think this is now fixed
  - Emojis from the settings.yml file are broken. Please fix 

---

### 🕒 Day 5b – AI Scheduled Messages & Smarter Posting 🧠

> Goal: Let Delta post her own AI-generated chaos on a schedule, instead of just scripted messages.

#### ✅ Core Features

- [x] Replace static messages in `scheduler.py` with AI-generated ones via `get_ai_response()`
  - Use prompt like: *“Post something sassy, attention-grabbing, or chaotic to wake up the server.”*
  - Maintain current persona system for tone consistency
- [x] Add `settings.yml` option to control post mode:
  - `mode: preset` – static messages only
  - `mode: ai` – generate new message via LLM
  - ~~`mode: mixed` – random chance between the two~~
- [ ] ~~Log each scheduled post and mode used for debugging~~ - Pushed back, not a critical feature right now

---

#### ⚙️ Probabilistic Scheduler (Mode 2 – Optional)

> Post when it feels "natural" – low chance at first, rising over time.

- [x] Add `probabilistic_scheduler.py` or integrate into `scheduler.py`
- [x] Configurable parameters:
  - `start_chance: 0.05` (5% per hour)
  - `increase_per_hour: 0.05`
  - `decay_on_post: 0.02`
- [x] ~~Reset chance after post, store `last_post_time`~~ (this is using probability decay which is a bit better)

---

~~#### 💤 Inactivity-Aware Scheduler (Mode 3 – Stretch Goal)~~ (Temporarily Passed, Probabilistic scheduler is really good for now)

> Posts when the **server** or a **user** has been inactive for too long.

- [ ] Monitor `message.created_at` timestamps per channel or user
- [ ] After `X minutes` of silence, apply probabilistic logic to post
- [ ] Configurable thresholds in `settings.yml`

---

### 🛠 Example: settings.yml Additions

```yaml
scheduler:
  mode: ai  # Options: preset, ai, mixed
  interval_minutes: 60

  probabilistic:
    enabled: false
    start_chance: 0.05
    increase_per_hour: 0.05
    decay_on_post: 0.02

  inactivity:
    enabled: false
    threshold_minutes: 120
```

---

### 🐳 ~~Day 6 – Dockerization~~
- [x] Write `Dockerfile` and `docker-compose.yml`
- [x] Test local build and `.env` passthrough
- [ ] (Optional) Add docker-compose.yml for repeatable builds across machines `added but not tested` 
- [ ] (Optional) Document how to run with volume mounts if persistence is needed
- [ ] (Optional) containerize Ollama model if running locally `not likely to happen, part of the reason this works is thanks to a separate Ollama instance`

---

### 💰 Day 7+ – Monetization Prep (Optional)
- [ ] Add donation/promo message in daily post
- [ ] Plan hosting model for non-technical users
- [ ] Write self-host instructions in `README.md`

---

### 🧬 Final Day – Delta Modelfile Integration

> Goal: Make Delta self-contained by baking her personality directly into an Ollama Modelfile.

This final step removes the need for runtime prompt injection by turning Delta into her **own model** using Ollama’s custom model system.

#### ✅ Tasks

- [ ] Create a `Modelfile` for Delta inside `models/delta/`
- [ ] Set `FROM llama3` or other base model
- [ ] Add personality using the `SYSTEM` directive
- [ ] Tune parameters:
  - `temperature` for flair (suggested: `0.85`)
  - `num_ctx` for longer memory (suggested: `4096`)
  - `stop` tokens like `User:` to avoid rambling
- [ ] Define a conversation `TEMPLATE` that ensures in-character replies
- [ ] Build the model:
  ```bash
  ollama create delta -f ./models/delta/Modelfile


---

### ✅ MVP Features (Core Bot Experience)
These are the must-have features to make the bot functional, fun, and engaging.

- [ ] **Bot appears on the server like a "user"** (ability to @delta instead of `!chat`)
- [ ] **Bot is user aware**
  - Usernames are passed to the bot along with prompts
- [ ] **Have the bot be content aware**
  - Pulls ongoing conversations to respond in context
- [ ] **Give bot ability to react to messages like users would**
- [ ] 🗓️ **Scheduled specific times/dates**
  - Daily messages, birthdays, holidays, etc.
- [ ] 💤 **Inactivity-based triggers**
  - Post when the server gets too quiet to re-engage users

---
## 🎨 Polish & Bonus features

### 🛠️ Phase 2 Features (Personality, Social Layer, Engagement)
These enhance immersion and build emotional or social connection.

- [ ] **Bot can be given some power to change the server a bit**
  - Occasional channel renames, topic changes, etc.
- [ ] 🧠 **Context-aware scheduling**
  - Posts based on ongoing server activity
- [ ] 📊 **Rate-based adjustment**
  - Increase frequency during hype, back off when people are chatting naturally
- [ ] **Web usage**
  - Search memes, respond to trending topics, pull from APIs like Reddit/Twitter

---

### 🧠 Advanced AI & Multimodal Features
For immersion and automation lovers. These make Delta truly feel alive.

- [ ] **Image interpretation**
  - Understands memes, screenshots, or selfies (local AI or API-driven)
- [ ] **Content-aware moderation assist**
  - Alert mods or intervene when heated discussions arise
- [ ] **Integrated personality shift**
  - Switch behavior based on server activity, holidays, or mood triggers


*Progress last updated: May 9, 2025*
