diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d1eec72 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +# Version control +.git +.gitignore + +# Python +__pycache__ +*.pyc +*.pyo +*.pyd +*.egg-info +*.egg +dist/ +build/ +*.whl + +# Virtual environments +bot-env/ +.venv/ +env/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# OS files +.DS_Store +Thumbs.db + +# Token (sensitive!) +.token + +# Docker files (avoid recursive builds) +Dockerfile +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ab89b6c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# ---- Base image ---- +FROM python:3.12-slim + +# Set working directory +WORKDIR /app + +# Install system dependencies (if needed by native extensions) +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + && rm -rf /var/lib/apt/lists/* + +# Copy and install Python dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy plugin assets +COPY plugins/pepe/pepes.txt ./plugins/pepe/pepes.txt + +# Copy the rest of the application +COPY . . + +# Create a non-root user for security +RUN useradd -m -s /bin/bash botuser && chown -R botuser:botuser /app +USER botuser + +# Expose nothing by default (Discord bot doesn't need a public port) + +# Run the bot +CMD ["python", "main.py"] diff --git a/README.md b/README.md index c949062..0c1c4d5 100644 --- a/README.md +++ b/README.md @@ -1 +1,169 @@ -Dankbot, now even danker! +# 🐸 Dank Bot + +A Discord bot built with [discord.py](https://github.com/Rapptz/discord.py), featuring a plugin-based architecture for extensible functionality. + +## Features + +- **Plugin System**: Easily add new features by dropping a plugin into the `plugins/` directory +- **BotChat Plugin**: AI-powered chat responses with configurable prompts +- **Pepe Plugin**: Classic Pepe meme reactions +- **Logging**: Full command and message logging via Python's `logging` module + +## Current Plugins + +| Plugin | Description | +|--------|-------------| +| `botchat` | AI chat plugin with prompt templates and censorship support | +| `pepe` | Pepe meme reaction plugin | + +## Prerequisites + +- [Python 3.12+](https://www.python.org/downloads/) +- A [Discord Bot Token](https://discord.com/developers/docs/topics/oauth2#bot) +- A Discord application with the `MESSAGE CONTENT INTENT` enabled + +## Quick Start (Docker) + +### 1. Create a token file + +Create a `.token` file with your Discord bot token: + +```bash +echo "YOUR_DISCORD_BOT_TOKEN_HERE" > .token +``` + +### 2. Build and run + +```bash +# Build the Docker image +docker build -t dank-bot . + +# Run the bot +docker run -d \ + --name dank-bot \ + --env DISCORD_TOKEN=$(cat .token) \ + dank-bot +``` + +> **Note:** The bot reads its token from a `.token` file at runtime. Mount it as a volume: +> ```bash +> docker run -d \ +> --name dank-bot \ +> -v $(pwd)/.token:/app/.token:ro \ +> dank-bot +> ``` + +## Prerequisites (Local) + +- [Python 3.12+](https://www.python.org/downloads/) +- [pip](https://pip.pypa.io/) + +## Local Setup + +### 1. Create a token file + +Create a `.token` file with your Discord bot token: + +```bash +echo "YOUR_DISCORD_BOT_TOKEN_HERE" > .token +``` + +### 2. Install dependencies + +```bash +pip install -r requirements.txt +``` + +### 3. Run the bot + +```bash +python main.py +``` + +## Project Structure + +``` +dank-bot-py/ +├── main.py # Bot entry point +├── requirements.txt # Python dependencies +├── start.sh # Quick start script +├── .token # Discord bot token (DO NOT COMMIT) +├── .gitignore +├── .dockerignore +├── Dockerfile +├── README.md +└── plugins/ + ├── botchat/ # AI chat plugin + │ ├── plugin.py + │ ├── settings.yaml + │ └── prompts/ # Prompt templates + │ ├── default.txt + │ ├── default-censored.txt + │ ├── summarize.txt + │ └── summarize-search.txt + └── pepe/ # Pepe meme plugin + ├── plugin.py + └── pepes.txt +``` + +## Adding a New Plugin + +1. Create a new directory under `plugins/` +2. Add a `plugin.py` file with your bot extension code +3. The bot will auto-discover and load it on startup + +## Commands + +| Command | Description | +|---------|-------------| +| `!help` | List available commands | +| `!chat ` | Send a message to the AI chat (via botchat plugin) | +| `!pepe` | Trigger a Pepe meme reaction | + +## Configuration + +- **BotChat**: Edit `plugins/botchat/settings.yaml` for plugin settings +- **Prompts**: Modify files in `plugins/botchat/prompts/` to customize AI behavior +- **Token**: Store in `.token` (never commit this file) + +## Docker + +### Build + +```bash +docker build -t dank-bot . +``` + +### Run + +```bash +docker run -d \ + --name dank-bot \ + --restart unless-stopped \ + -v $(pwd)/.token:/app/.token:ro \ + dank-bot +``` + +### Logs + +```bash +docker logs -f dank-bot +``` + +### Stop + +```bash +docker stop dank-bot +``` + +## Environment Variables + +| Variable | Description | Default | +|----------|-------------|---------| +| `LOG_LEVEL` | Logging verbosity | `INFO` | + +## Security + +- **Never commit your `.token` file** — it's included in `.gitignore` for this reason +- The Docker image runs as a non-root user (`botuser`) for added security +- Use Docker volume mounts for sensitive files instead of baking them into the image