Bitterbot-desktop discord
Send, read, edit, delete, and search Discord messages, reactions, polls, pins, and threads via the message tool. Use when interacting with Discord channels, sending media or embeds, creating polls or threads, managing presence, or moderating messages.
install
source · Clone the upstream repo
git clone https://github.com/Bitterbot-AI/bitterbot-desktop
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Bitterbot-AI/bitterbot-desktop "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/discord" ~/.claude/skills/bitterbot-ai-bitterbot-desktop-discord && rm -rf "$T"
manifest:
skills/discord/SKILL.mdsource content
Discord (Via message
)
messageUse the
message tool. No provider-specific discord tool exposed to the agent.
Musts
- Always:
.channel: "discord" - Respect gating:
(some default off:channels.discord.actions.*
,roles
,moderation
,presence
).channels - Prefer explicit ids:
,guildId
,channelId
,messageId
.userId - Multi-account: optional
.accountId
Guidelines
- Avoid Markdown tables in outbound Discord messages.
- Mention users as
.<@USER_ID> - Prefer Discord components v2 (
) for rich UI; use legacycomponents
only when you must.embeds
Targets
- Send-like actions:
orto: "channel:<id>"
.to: "user:<id>" - Message-specific actions:
(orchannelId: "<id>"
) +to
.messageId: "<id>"
Common Actions (Examples)
Send message:
{ "action": "send", "channel": "discord", "to": "channel:123", "message": "hello", "silent": true }
Send with media:
{ "action": "send", "channel": "discord", "to": "channel:123", "message": "see attachment", "media": "file:///tmp/example.png" }
- Optional
to suppress Discord notifications.silent: true
Send with components v2 (recommended for rich UI):
{ "action": "send", "channel": "discord", "to": "channel:123", "message": "Status update", "components": "[Carbon v2 components]" }
expects Carbon component instances (Container, TextDisplay, etc.) from JS/TS integrations.components- Do not combine
withcomponents
(Discord rejects v2 + embeds).embeds
Legacy embeds (not recommended):
{ "action": "send", "channel": "discord", "to": "channel:123", "message": "Status update", "embeds": [{ "title": "Legacy", "description": "Embeds are legacy." }] }
are ignored when components v2 are present.embeds
React:
{ "action": "react", "channel": "discord", "channelId": "123", "messageId": "456", "emoji": "✅" }
Read:
{ "action": "read", "channel": "discord", "to": "channel:123", "limit": 20 }
Edit / delete:
{ "action": "edit", "channel": "discord", "channelId": "123", "messageId": "456", "message": "fixed typo" }
{ "action": "delete", "channel": "discord", "channelId": "123", "messageId": "456" }
Poll:
{ "action": "poll", "channel": "discord", "to": "channel:123", "pollQuestion": "Lunch?", "pollOption": ["Pizza", "Sushi", "Salad"], "pollMulti": false, "pollDurationHours": 24 }
Pins:
{ "action": "pin", "channel": "discord", "channelId": "123", "messageId": "456" }
Threads:
{ "action": "thread-create", "channel": "discord", "channelId": "123", "messageId": "456", "threadName": "bug triage" }
Search:
{ "action": "search", "channel": "discord", "guildId": "999", "query": "release notes", "channelIds": ["123", "456"], "limit": 10 }
Presence (often gated):
{ "action": "set-presence", "channel": "discord", "activityType": "playing", "activityName": "with fire", "status": "online" }
Writing Style (Discord)
- Short, conversational, low ceremony.
- No markdown tables.
- Mention users as
.<@USER_ID>