From claudeclaw
Adds Discord bot channel to ClaudeClaw: merges code from qwibitai/claudeclaw-discord repo, validates with npm build and vitest, guides interactive bot token setup and .env config.
npx claudepluginhub sbusso/claudeclawThis skill uses the workspace's default tool permissions.
This skill adds Discord support to ClaudeClaw, then walks through interactive setup.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
This skill adds Discord support to ClaudeClaw, then walks through interactive setup.
Check if src/channels/discord.ts exists. If it does, skip to Phase 3 (Setup). The code changes are already in place.
Use AskUserQuestion to collect configuration:
AskUserQuestion: Do you have a Discord bot token, or do you need to create one?
If they have one, collect it now. If not, we'll create one in Phase 3.
git remote -v
If discord is missing, add it:
git remote add discord https://github.com/qwibitai/claudeclaw-discord.git
git fetch discord main
git merge discord/main || {
git checkout --theirs package-lock.json
git add package-lock.json
git merge --continue
}
This merges in:
src/channels/discord.ts (DiscordChannel class with self-registration via registerChannel)src/channels/discord.test.ts (unit tests with discord.js mock)import './discord.js' appended to the channel barrel file src/channels/index.tsdiscord.js npm dependency in package.jsonDISCORD_BOT_TOKEN in .env.exampleIf the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.
npm install
npm run build
npx vitest run src/channels/discord.test.ts
All tests must pass (including the new Discord tests) and build must be clean before proceeding.
If the user doesn't have a bot token, tell them:
I need you to create a Discord bot:
- Go to the Discord Developer Portal
- Click New Application and give it a name (e.g., "Andy Assistant")
- Go to the Bot tab on the left sidebar
- Click Reset Token to generate a new bot token — copy it immediately (you can only see it once)
- Under Privileged Gateway Intents, enable:
- Message Content Intent (required to read message text)
- Server Members Intent (optional, for member display names)
- Go to OAuth2 > URL Generator:
- Scopes: select
bot- Bot Permissions: select
Send Messages,Read Message History,View Channels- Copy the generated URL and open it in your browser to invite the bot to your server
Wait for the user to provide the token.
Add to .env:
DISCORD_BOT_TOKEN=<their-token>
Channels auto-enable when their credentials are present — no extra configuration needed.
Sync to container environment:
mkdir -p data/env && cp .env data/env/env
The container reads environment from data/env/env, not .env directly.
Service name: Derived from the directory name:
com.claudeclaw.<dirname>(macOS) /claudeclaw-<dirname>(Linux). For example, if cwd ismy-assistant, the service iscom.claudeclaw.my-assistant. Determine the correct service name before running service commands below.
npm run build
launchctl kickstart -k gui/$(id -u)/com.claudeclaw
Tell the user:
To get the channel ID for registration:
- In Discord, go to User Settings > Advanced > Enable Developer Mode
- Right-click the text channel you want the bot to respond in
- Click Copy Channel ID
The channel ID will be a long number like
1234567890123456.
Wait for the user to provide the channel ID (format: dc:1234567890123456).
The channel ID, name, and folder name are needed. Use npx tsx setup/index.ts --step register with the appropriate flags.
For a main channel (responds to all messages):
npx tsx setup/index.ts --step register -- --jid "dc:<channel-id>" --name "<server-name> #<channel-name>" --folder "discord_main" --trigger "@${ASSISTANT_NAME}" --channel discord --no-trigger-required --is-main
For additional channels (trigger-only):
npx tsx setup/index.ts --step register -- --jid "dc:<channel-id>" --name "<server-name> #<channel-name>" --folder "discord_<channel-name>" --trigger "@${ASSISTANT_NAME}" --channel discord
Tell the user:
Send a message in your registered Discord channel:
- For main channel: Any message works
- For non-main: @mention the bot in Discord
The bot should respond within a few seconds.
tail -f logs/claudeclaw.log
DISCORD_BOT_TOKEN is set in .env AND synced to data/env/envsqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE 'dc:%'"launchctl list | grep claudeclawThis is the default behavior for non-main channels (requiresTrigger: true). To change:
requiresTrigger to falseIf the bot connects but can't read messages, ensure:
If you can't copy the channel ID:
The Discord bot supports:
<@botId> → ClaudeClaw trigger format)