Discord Action

Drives a Discord server from a flow. Seventeen operations grouped the way the panel groups them — messages, channels, threads, direct messages, and members & roles — so a flow can post a release note, open a thread for the discussion, and hand someone a role when they react.

Setup

Pick a Discord credential: a bot token, an OAuth connection, or an incoming webhook. The kind you pick decides which operations are available — a webhook can post, but it cannot read a message or move a role, so the operation list narrows to match.


Mode — action or AI toolkit

The Mode selector decides who drives the node. In Action mode you pick one operation and fill its fields, and the node does that every time it runs. In AI toolkit mode the operations become tools an AI Node can call, and the model chooses which one and with what arguments.

Toolkit mode is opt-in per node, and it is what makes this node show up in an AI Node's tool picker. A node left in Action mode is invisible to agents.

Operations

The Operation dropdown decides what the node does and which fields appear under it. These are the exact values the API validates against:

ValueIn the dropdownWhat it does
sendMessageSend messagePost text/embed to a channel or thread. Optional reply-to + threadId.
editMessageEdit messageEdit content/embeds of a message the bot owns.
deleteMessageDelete messageDelete by id. Messages from other users need Manage Messages.
getMessageGet messageFetch a single message plus its reactions and attachments.
addReactionAdd reactionReact as the bot. Custom emoji format: name:id.
removeReactionRemove reactionRemove the reaction the bot itself added.
pinMessagePin messagePin a message in its channel. Needs Manage Messages.
createChannelCreate channelCreate text/voice/forum/announcement/category in a guild.
editChannelEdit channelRename, change topic, slowmode, parent category.
deleteChannelDelete channelPermanently deletes a channel — irreversible.
getChannelGet channelFetch the full config and permissions of a channel.
listChannelsList channelsIterate every channel in a guild — output is iterable.
createThreadCreate threadOff a message OR standalone (public/private/announcement).
sendDMSend DMDirect message a user by id. Silently dropped if DMs disabled.
addRoleAdd role to memberThe role of the bot must be ABOVE the target role in the hierarchy.
removeRoleRemove role from memberSame hierarchy rule applies.
getMemberGet memberFetch the nick, roles, joined_at and user object of a member.

Gotchas

  • Role hierarchy is enforced by Discord, not by us. The bot's own highest role has to sit above the role it is adding or removing. Same permissions, wrong order, and the call fails.
  • Deleting other people's messages needs Manage Messages. The bot can always delete its own.
  • A DM to a user with DMs disabled is dropped silently — Discord returns success. If delivery matters, post in a channel instead.
  • Custom emoji use the name:id form in reactions, not the :name: you type in the client.
  • Deleting a channel is irreversible. There is no trash in Discord.
  • listChannels returns an iterable payload, so a Loop or Aggregator downstream fans out over the channels with no glue.