Discord Interactive

Send Discord Components v2 interactive messages (buttons, selects, modals, rich layouts) via the message tool.

MIT-0 · Free to use, modify, and redistribute. No attribution required.
1 · 187 · 1 current installs · 1 all-time installs
byLinn@MuseLinn
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (Discord interactive components) match the SKILL.md and reference files. There are no unrelated environment variables, binaries, or install steps requested that would be disproportionate to sending interactive Discord messages.
Instruction Scope
The instructions are scoped to constructing component payloads, sending/editing messages via the message tool, and handling the resulting inbound interaction text. There are no instructions to read arbitrary system files, environment variables, or to transmit data to unexpected endpoints. Note: examples show using components to confirm destructive actions (e.g., deleting files) — that is a valid usage pattern but requires cautious agent policies.
Install Mechanism
No install spec and no code files — instruction-only skill. This minimizes write-to-disk and supply-chain risk.
Credentials
Skill declares no required environment variables, credentials, or config paths. The examples reference Discord IDs, URLs, and attachment:// filenames only, which are appropriate for the stated functionality.
Persistence & Privilege
Skill does not request always:true or other elevated persistence. It is user-invocable and allows normal autonomous invocation (platform default); nothing here indicates it would modify other skills or system-wide settings.
Assessment
This skill is coherent and focuses only on building and handling Discord interactive messages. Before installing: (1) confirm you trust agents that will use this skill because examples show workflows where a button click leads the agent to perform actions (including destructive ones); enforce safeguards/confirmation for destructive operations, (2) restrict interactive buttons using allowedUsers where appropriate, (3) treat modal-submitted form data as potentially sensitive and validate/sanitize it before using, and (4) test these components in a non-production channel to verify behavior and avoid accidental actions.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.1.1
Download zip
latestvk979scwr324sp9y9ng1djdhm85835bva

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

🔘 Clawdis

SKILL.md

Discord Interactive Components (Components v2)

Send rich, interactive messages in Discord using the message tool's components parameter. This replaces plain text with buttons, select menus, modals, and structured layouts.

When to Use Components v2

ALWAYS prefer components over plain text when:

  • You need user confirmation → buttons (Yes/No, Approve/Reject)
  • You need user selection → select menus (agents, priorities, options)
  • You want structured information display → text blocks + sections + separators
  • You want to collect form data → modals with text inputs, selects, checkboxes
  • You want visual distinction → accent-colored containers

Use plain text when:

  • Simple conversational response, no actions needed
  • Quick one-liner answer

Quick Reference

The components parameter is an object with this structure:

{
  // Top-level fields
  text: "Optional top-level text (rendered as first TextDisplay)",
  reusable: true,  // Keep buttons/selects active for multiple clicks (default: single-use)
  container: {
    accentColor: "#3498db",  // Left border color (hex string or number)
    spoiler: false
  },
  // Content blocks (rendered in order inside the container)
  blocks: [
    { type: "text", text: "Markdown text block" },
    { type: "section", text: "Main text", accessory: { type: "thumbnail", url: "https://..." } },
    { type: "separator", spacing: "small", divider: true },
    { type: "actions", buttons: [{ label: "Click me", style: "success" }] },
    { type: "actions", select: { type: "string", placeholder: "Choose...", options: [...] } },
    { type: "media-gallery", items: [{ url: "https://...", description: "..." }] },
    { type: "file", file: "attachment://report.pdf" }
  ],
  // Optional modal form (auto-generates a trigger button)
  modal: {
    title: "Form Title",
    triggerLabel: "Open Form",
    fields: [{ type: "text", label: "Your name" }]
  }
}

Quick Start — Confirmation

// message tool call
{
  action: "send",
  channel: "discord",
  target: "channel:CHANNEL_ID",
  components: {
    text: "**Confirm action?**",
    reusable: false,
    container: { accentColor: "#3498db" },
    blocks: [
      {
        type: "actions",
        buttons: [
          { label: "Yes", style: "success" },
          { label: "No", style: "secondary" }
        ]
      }
    ]
  }
}

No custom_id needed — OpenClaw generates unique IDs automatically. When the user clicks, you receive a message like Clicked "Yes".

Key Differences from Raw Discord API

What you might expectWhat OpenClaw actually uses
type: "container" wrappercontainer: { accentColor: "..." } config object
type: "text_display"type: "text" in blocks
type: "action_row" with nested componentstype: "actions" with buttons or select
Manual custom_id on buttonsAuto-generated — just set label and style
accent_color: 0x3498dbaccentColor: "#3498db" (hex string preferred)
type: "string_select"select: { type: "string", ... } inside actions block

Block Types Summary

Block TypePurposeSee
textMarkdown textcomponents.md
sectionText + optional thumbnail/buttoncomponents.md
separatorDivider linecomponents.md
actionsButtons or select menucomponents.md
media-galleryImage gallerycomponents.md
fileFile attachmentcomponents.md

Handling Interactions

When a user clicks a button or selects an option, OpenClaw delivers it as a normal inbound message:

  • Button click → Clicked "Yes".
  • Select → Selected option_a from "Pick an option".

No special callback handling needed — just read the incoming message text. See handling.md for patterns.

Important Rules

  • No custom_id — OpenClaw auto-generates unique IDs for all interactive elements
  • No embeds — Components v2 and embeds cannot coexist in the same message
  • reusable: true — Set this to allow buttons/selects to be clicked multiple times
  • allowedUsers — Optionally restrict who can click a button (array of Discord user IDs)
  • Actions block — Must have EITHER buttons OR select, never both
  • Max 5 buttons per actions block, max 1 select per actions block

Examples

See references/examples.md for complete scenarios:

  • Yes/No confirmation
  • Agent/option selection
  • Status card with actions
  • Modal form collection
  • Multi-step workflow

Files

5 total
Select a file
Select a file to preview.

Comments

Loading comments…