Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,23 @@ A lightweight, secure, cloud-native ACP harness that bridges Discord and any [Ag

## Quick Start

### 1. Create a Discord Bot
### Prerequisites

Before running openab, enable these in the [Discord Developer Portal](https://discord.com/developers/applications):

1. **Bot → Privileged Gateway Intents**:
- ✅ Message Content Intent
- ✅ Server Members Intent
2. **OAuth2 → URL Generator → Bot Permissions**:
- Send Messages, Embed Links, Attach Files
- Read Message History, Add Reactions

See [docs/discord-bot-howto.md](docs/discord-bot-howto.md) for a detailed step-by-step guide.

### 1. Create a Discord Bot

Follow the [prerequisites](#prerequisites) above, then create your bot.

### 2. Install with Helm (Kiro CLI — default)

```bash
Expand Down
23 changes: 21 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ mod format;
mod reactions;
mod stt;

use serenity::gateway::GatewayError;
use serenity::prelude::*;
use std::collections::HashSet;
use std::path::PathBuf;
use std::sync::Arc;
use tracing::info;
use tracing::{error, info};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
Expand Down Expand Up @@ -98,7 +99,25 @@ async fn main() -> anyhow::Result<()> {
});

info!("starting discord bot");
client.start().await?;
match client.start().await {
Err(serenity::Error::Gateway(GatewayError::DisallowedGatewayIntents)) => {
error!(
"Discord rejected privileged intents. \
Enable MESSAGE CONTENT INTENT at: \
https://discord.com/developers/applications → Bot → Privileged Gateway Intents"
);
std::process::exit(1);
}
Err(serenity::Error::Gateway(GatewayError::InvalidAuthentication)) => {
error!(
"Discord rejected bot token. \
Verify your bot_token in config.toml is correct and has not been reset."
);
std::process::exit(1);
}
Err(e) => return Err(e.into()),
Ok(_) => {}
}

// Cleanup
cleanup_handle.abort();
Expand Down