repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
public Clawd ADK gateway launch mirror
stars
latest
clone command
git clone gitlawb://did:key:z6Mkq5mY...iFZ5/my-project-publ...git clone gitlawb://did:key:z6Mkq5mY.../my-project-publ...2fa351d6docs: add automaton and perps launch sources16d ago| #1 | --- |
| #2 | name: discord |
| #3 | description: Use when you need to control Discord from Clawdbot via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, create/edit/delete channels and categories, fetch permissions or member/role/channel info, or handle moderation actions in Discord DMs or channels. |
| #4 | --- |
| #5 | |
| #6 | # Discord Actions |
| #7 | |
| #8 | ## Overview |
| #9 | |
| #10 | Use `discord` to manage messages, reactions, threads, polls, and moderation. You can disable groups via `discord.actions.*` (defaults to enabled, except roles/moderation). The tool uses the bot token configured for Clawdbot. |
| #11 | |
| #12 | ## Inputs to collect |
| #13 | |
| #14 | - For reactions: `channelId`, `messageId`, and an `emoji`. |
| #15 | - For fetchMessage: `guildId`, `channelId`, `messageId`, or a `messageLink` like `https://discord.com/channels/<guildId>/<channelId>/<messageId>`. |
| #16 | - For stickers/polls/sendMessage: a `to` target (`channel:<id>` or `user:<id>`). Optional `content` text. |
| #17 | - Polls also need a `question` plus 2–10 `answers`. |
| #18 | - For media: `mediaUrl` with `file:///path` for local files or `https://...` for remote. |
| #19 | - For emoji uploads: `guildId`, `name`, `mediaUrl`, optional `roleIds` (limit 256KB, PNG/JPG/GIF). |
| #20 | - For sticker uploads: `guildId`, `name`, `description`, `tags`, `mediaUrl` (limit 512KB, PNG/APNG/Lottie JSON). |
| #21 | |
| #22 | Message context lines include `discord message id` and `channel` fields you can reuse directly. |
| #23 | |
| #24 | **Note:** `sendMessage` uses `to: "channel:<id>"` format, not `channelId`. Other actions like `react`, `readMessages`, `editMessage` use `channelId` directly. |
| #25 | **Note:** `fetchMessage` accepts message IDs or full links like `https://discord.com/channels/<guildId>/<channelId>/<messageId>`. |
| #26 | |
| #27 | ## Actions |
| #28 | |
| #29 | ### React to a message |
| #30 | |
| #31 | ```json |
| #32 | { |
| #33 | "action": "react", |
| #34 | "channelId": "123", |
| #35 | "messageId": "456", |
| #36 | "emoji": "✅" |
| #37 | } |
| #38 | ``` |
| #39 | |
| #40 | ### List reactions + users |
| #41 | |
| #42 | ```json |
| #43 | { |
| #44 | "action": "reactions", |
| #45 | "channelId": "123", |
| #46 | "messageId": "456", |
| #47 | "limit": 100 |
| #48 | } |
| #49 | ``` |
| #50 | |
| #51 | ### Send a sticker |
| #52 | |
| #53 | ```json |
| #54 | { |
| #55 | "action": "sticker", |
| #56 | "to": "channel:123", |
| #57 | "stickerIds": ["9876543210"], |
| #58 | "content": "Nice work!" |
| #59 | } |
| #60 | ``` |
| #61 | |
| #62 | - Up to 3 sticker IDs per message. |
| #63 | - `to` can be `user:<id>` for DMs. |
| #64 | |
| #65 | ### Upload a custom emoji |
| #66 | |
| #67 | ```json |
| #68 | { |
| #69 | "action": "emojiUpload", |
| #70 | "guildId": "999", |
| #71 | "name": "party_blob", |
| #72 | "mediaUrl": "file:///tmp/party.png", |
| #73 | "roleIds": ["222"] |
| #74 | } |
| #75 | ``` |
| #76 | |
| #77 | - Emoji images must be PNG/JPG/GIF and <= 256KB. |
| #78 | - `roleIds` is optional; omit to make the emoji available to everyone. |
| #79 | |
| #80 | ### Upload a sticker |
| #81 | |
| #82 | ```json |
| #83 | { |
| #84 | "action": "stickerUpload", |
| #85 | "guildId": "999", |
| #86 | "name": "clawdbot_wave", |
| #87 | "description": "Clawdbot waving hello", |
| #88 | "tags": "👋", |
| #89 | "mediaUrl": "file:///tmp/wave.png" |
| #90 | } |
| #91 | ``` |
| #92 | |
| #93 | - Stickers require `name`, `description`, and `tags`. |
| #94 | - Uploads must be PNG/APNG/Lottie JSON and <= 512KB. |
| #95 | |
| #96 | ### Create a poll |
| #97 | |
| #98 | ```json |
| #99 | { |
| #100 | "action": "poll", |
| #101 | "to": "channel:123", |
| #102 | "question": "Lunch?", |
| #103 | "answers": ["Pizza", "Sushi", "Salad"], |
| #104 | "allowMultiselect": false, |
| #105 | "durationHours": 24, |
| #106 | "content": "Vote now" |
| #107 | } |
| #108 | ``` |
| #109 | |
| #110 | - `durationHours` defaults to 24; max 32 days (768 hours). |
| #111 | |
| #112 | ### Check bot permissions for a channel |
| #113 | |
| #114 | ```json |
| #115 | { |
| #116 | "action": "permissions", |
| #117 | "channelId": "123" |
| #118 | } |
| #119 | ``` |
| #120 | |
| #121 | ## Ideas to try |
| #122 | |
| #123 | - React with ✅/⚠️ to mark status updates. |
| #124 | - Post a quick poll for release decisions or meeting times. |
| #125 | - Send celebratory stickers after successful deploys. |
| #126 | - Upload new emojis/stickers for release moments. |
| #127 | - Run weekly “priority check” polls in team channels. |
| #128 | - DM stickers as acknowledgements when a user’s request is completed. |
| #129 | |
| #130 | ## Action gating |
| #131 | |
| #132 | Use `discord.actions.*` to disable action groups: |
| #133 | - `reactions` (react + reactions list + emojiList) |
| #134 | - `stickers`, `polls`, `permissions`, `messages`, `threads`, `pins`, `search` |
| #135 | - `emojiUploads`, `stickerUploads` |
| #136 | - `memberInfo`, `roleInfo`, `channelInfo`, `voiceStatus`, `events` |
| #137 | - `roles` (role add/remove, default `false`) |
| #138 | - `channels` (channel/category create/edit/delete/move, default `false`) |
| #139 | - `moderation` (timeout/kick/ban, default `false`) |
| #140 | ### Read recent messages |
| #141 | |
| #142 | ```json |
| #143 | { |
| #144 | "action": "readMessages", |
| #145 | "channelId": "123", |
| #146 | "limit": 20 |
| #147 | } |
| #148 | ``` |
| #149 | |
| #150 | ### Fetch a single message |
| #151 | |
| #152 | ```json |
| #153 | { |
| #154 | "action": "fetchMessage", |
| #155 | "guildId": "999", |
| #156 | "channelId": "123", |
| #157 | "messageId": "456" |
| #158 | } |
| #159 | ``` |
| #160 | |
| #161 | ```json |
| #162 | { |
| #163 | "action": "fetchMessage", |
| #164 | "messageLink": "https://discord.com/channels/999/123/456" |
| #165 | } |
| #166 | ``` |
| #167 | |
| #168 | ### Send/edit/delete a message |
| #169 | |
| #170 | ```json |
| #171 | { |
| #172 | "action": "sendMessage", |
| #173 | "to": "channel:123", |
| #174 | "content": "Hello from Clawdbot" |
| #175 | } |
| #176 | ``` |
| #177 | |
| #178 | **With media attachment:** |
| #179 | |
| #180 | ```json |
| #181 | { |
| #182 | "action": "sendMessage", |
| #183 | "to": "channel:123", |
| #184 | "content": "Check out this audio!", |
| #185 | "mediaUrl": "file:///tmp/audio.mp3" |
| #186 | } |
| #187 | ``` |
| #188 | |
| #189 | - `to` uses format `channel:<id>` or `user:<id>` for DMs (not `channelId`!) |
| #190 | - `mediaUrl` supports local files (`file:///path/to/file`) and remote URLs (`https://...`) |
| #191 | - Optional `replyTo` with a message ID to reply to a specific message |
| #192 | |
| #193 | ```json |
| #194 | { |
| #195 | "action": "editMessage", |
| #196 | "channelId": "123", |
| #197 | "messageId": "456", |
| #198 | "content": "Fixed typo" |
| #199 | } |
| #200 | ``` |
| #201 | |
| #202 | ```json |
| #203 | { |
| #204 | "action": "deleteMessage", |
| #205 | "channelId": "123", |
| #206 | "messageId": "456" |
| #207 | } |
| #208 | ``` |
| #209 | |
| #210 | ### Threads |
| #211 | |
| #212 | ```json |
| #213 | { |
| #214 | "action": "threadCreate", |
| #215 | "channelId": "123", |
| #216 | "name": "Bug triage", |
| #217 | "messageId": "456" |
| #218 | } |
| #219 | ``` |
| #220 | |
| #221 | ```json |
| #222 | { |
| #223 | "action": "threadList", |
| #224 | "guildId": "999" |
| #225 | } |
| #226 | ``` |
| #227 | |
| #228 | ```json |
| #229 | { |
| #230 | "action": "threadReply", |
| #231 | "channelId": "777", |
| #232 | "content": "Replying in thread" |
| #233 | } |
| #234 | ``` |
| #235 | |
| #236 | ### Pins |
| #237 | |
| #238 | ```json |
| #239 | { |
| #240 | "action": "pinMessage", |
| #241 | "channelId": "123", |
| #242 | "messageId": "456" |
| #243 | } |
| #244 | ``` |
| #245 | |
| #246 | ```json |
| #247 | { |
| #248 | "action": "listPins", |
| #249 | "channelId": "123" |
| #250 | } |
| #251 | ``` |
| #252 | |
| #253 | ### Search messages |
| #254 | |
| #255 | ```json |
| #256 | { |
| #257 | "action": "searchMessages", |
| #258 | "guildId": "999", |
| #259 | "content": "release notes", |
| #260 | "channelIds": ["123", "456"], |
| #261 | "limit": 10 |
| #262 | } |
| #263 | ``` |
| #264 | |
| #265 | ### Member + role info |
| #266 | |
| #267 | ```json |
| #268 | { |
| #269 | "action": "memberInfo", |
| #270 | "guildId": "999", |
| #271 | "userId": "111" |
| #272 | } |
| #273 | ``` |
| #274 | |
| #275 | ```json |
| #276 | { |
| #277 | "action": "roleInfo", |
| #278 | "guildId": "999" |
| #279 | } |
| #280 | ``` |
| #281 | |
| #282 | ### List available custom emojis |
| #283 | |
| #284 | ```json |
| #285 | { |
| #286 | "action": "emojiList", |
| #287 | "guildId": "999" |
| #288 | } |
| #289 | ``` |
| #290 | |
| #291 | ### Role changes (disabled by default) |
| #292 | |
| #293 | ```json |
| #294 | { |
| #295 | "action": "roleAdd", |
| #296 | "guildId": "999", |
| #297 | "userId": "111", |
| #298 | "roleId": "222" |
| #299 | } |
| #300 | ``` |
| #301 | |
| #302 | ### Channel info |
| #303 | |
| #304 | ```json |
| #305 | { |
| #306 | "action": "channelInfo", |
| #307 | "channelId": "123" |
| #308 | } |
| #309 | ``` |
| #310 | |
| #311 | ```json |
| #312 | { |
| #313 | "action": "channelList", |
| #314 | "guildId": "999" |
| #315 | } |
| #316 | ``` |
| #317 | |
| #318 | ### Channel management (disabled by default) |
| #319 | |
| #320 | Create, edit, delete, and move channels and categories. Enable via `discord.actions.channels: true`. |
| #321 | |
| #322 | **Create a text channel:** |
| #323 | |
| #324 | ```json |
| #325 | { |
| #326 | "action": "channelCreate", |
| #327 | "guildId": "999", |
| #328 | "name": "general-chat", |
| #329 | "type": 0, |
| #330 | "parentId": "888", |
| #331 | "topic": "General discussion" |
| #332 | } |
| #333 | ``` |
| #334 | |
| #335 | - `type`: Discord channel type integer (0 = text, 2 = voice, 4 = category; other values supported) |
| #336 | - `parentId`: category ID to nest under (optional) |
| #337 | - `topic`, `position`, `nsfw`: optional |
| #338 | |
| #339 | **Create a category:** |
| #340 | |
| #341 | ```json |
| #342 | { |
| #343 | "action": "categoryCreate", |
| #344 | "guildId": "999", |
| #345 | "name": "Projects" |
| #346 | } |
| #347 | ``` |
| #348 | |
| #349 | **Edit a channel:** |
| #350 | |
| #351 | ```json |
| #352 | { |
| #353 | "action": "channelEdit", |
| #354 | "channelId": "123", |
| #355 | "name": "new-name", |
| #356 | "topic": "Updated topic" |
| #357 | } |
| #358 | ``` |
| #359 | |
| #360 | - Supports `name`, `topic`, `position`, `parentId` (null to remove from category), `nsfw`, `rateLimitPerUser` |
| #361 | |
| #362 | **Move a channel:** |
| #363 | |
| #364 | ```json |
| #365 | { |
| #366 | "action": "channelMove", |
| #367 | "guildId": "999", |
| #368 | "channelId": "123", |
| #369 | "parentId": "888", |
| #370 | "position": 2 |
| #371 | } |
| #372 | ``` |
| #373 | |
| #374 | - `parentId`: target category (null to move to top level) |
| #375 | |
| #376 | **Delete a channel:** |
| #377 | |
| #378 | ```json |
| #379 | { |
| #380 | "action": "channelDelete", |
| #381 | "channelId": "123" |
| #382 | } |
| #383 | ``` |
| #384 | |
| #385 | **Edit/delete a category:** |
| #386 | |
| #387 | ```json |
| #388 | { |
| #389 | "action": "categoryEdit", |
| #390 | "categoryId": "888", |
| #391 | "name": "Renamed Category" |
| #392 | } |
| #393 | ``` |
| #394 | |
| #395 | ```json |
| #396 | { |
| #397 | "action": "categoryDelete", |
| #398 | "categoryId": "888" |
| #399 | } |
| #400 | ``` |
| #401 | |
| #402 | ### Voice status |
| #403 | |
| #404 | ```json |
| #405 | { |
| #406 | "action": "voiceStatus", |
| #407 | "guildId": "999", |
| #408 | "userId": "111" |
| #409 | } |
| #410 | ``` |
| #411 | |
| #412 | ### Scheduled events |
| #413 | |
| #414 | ```json |
| #415 | { |
| #416 | "action": "eventList", |
| #417 | "guildId": "999" |
| #418 | } |
| #419 | ``` |
| #420 | |
| #421 | ### Moderation (disabled by default) |
| #422 | |
| #423 | ```json |
| #424 | { |
| #425 | "action": "timeout", |
| #426 | "guildId": "999", |
| #427 | "userId": "111", |
| #428 | "durationMinutes": 10 |
| #429 | } |
| #430 | ``` |
| #431 | |
| #432 | ## Discord Writing Style Guide |
| #433 | |
| #434 | **Keep it conversational!** Discord is a chat platform, not documentation. |
| #435 | |
| #436 | ### Do |
| #437 | - Short, punchy messages (1-3 sentences ideal) |
| #438 | - Multiple quick replies > one wall of text |
| #439 | - Use emoji for tone/emphasis 🦞 |
| #440 | - Lowercase casual style is fine |
| #441 | - Break up info into digestible chunks |
| #442 | - Match the energy of the conversation |
| #443 | |
| #444 | ### Don't |
| #445 | - No markdown tables (Discord renders them as ugly raw `| text |`) |
| #446 | - No `## Headers` for casual chat (use **bold** or CAPS for emphasis) |
| #447 | - Avoid multi-paragraph essays |
| #448 | - Don't over-explain simple things |
| #449 | - Skip the "I'd be happy to help!" fluff |
| #450 | |
| #451 | ### Formatting that works |
| #452 | - **bold** for emphasis |
| #453 | - `code` for technical terms |
| #454 | - Lists for multiple items |
| #455 | - > quotes for referencing |
| #456 | - Wrap multiple links in `<>` to suppress embeds |
| #457 | |
| #458 | ### Example transformations |
| #459 | |
| #460 | ❌ Bad: |
| #461 | ``` |
| #462 | I'd be happy to help with that! Here's a comprehensive overview of the versioning strategies available: |
| #463 | |
| #464 | ## Semantic Versioning |
| #465 | Semver uses MAJOR.MINOR.PATCH format where... |
| #466 | |
| #467 | ## Calendar Versioning |
| #468 | CalVer uses date-based versions like... |
| #469 | ``` |
| #470 | |
| #471 | ✅ Good: |
| #472 | ``` |
| #473 | versioning options: semver (1.2.3), calver (2026.01.04), or yolo (`latest` forever). what fits your release cadence? |
| #474 | ``` |
| #475 |