Discord Bot
Arcade.dev LLM tools for Discord
3.0.1Discord Bot Toolkit
The Discord Bot toolkit lets Arcade agents interact with Discord as a bot account — reading and writing messages, managing threads, and inspecting server structure across any server the bot has joined.
Capabilities
- Reading content: Fetch individual messages, channels, servers, and users by ID; list recent messages (newest-first), pinned messages, active threads, and channel lists (filterable by type); search messages by text and/or author within a channel or across a whole server (local scan of recent history, not full Discord search).
- Writing and moderation: Post new messages, reply to existing messages (including inside threads), edit bot-authored messages, delete messages (irreversible), pin and unpin messages.
- Thread and forum management: Start threads from a message, as a standalone text-channel thread, or as a forum/media post; list all active (non-archived) threads in a server.
- Reactions: Add or remove the bot's own emoji reactions; removing a reaction the bot never added is a safe no-op rather than an error.
- Mention safety: All send, reply, edit, thread-seed, and update operations suppress
@everyone,@here, and role mentions so automated posts never accidentally ping a whole server. - Graceful not-found handling: Missing messages, channels, servers, and users return a structured
not_foundstatus instead of raising exceptions, letting callers branch without try/catch; genuine permission errors still surface as errors.
Secrets
DISCORD_BOT_TOKEN — The bot token that authenticates all API calls as your Discord bot account. To obtain it: open the Discord Developer Portal, select your application (or create one), navigate to Bot in the left sidebar, and click Reset Token (or Copy if a token is already visible). The token is shown only once; store it immediately. Ensure the bot has been added to each target server with appropriate permissions (e.g. Read Messages, Send Messages, Manage Messages for the tools you use). If you need the Message Content intent to read full message bodies, enable it under Bot → Privileged Gateway Intents in the portal — without it, content is empty for messages the bot did not receive directly. See Discord's bot documentation for full details.
Store secrets in Arcade at https://api.arcade.dev/dashboard/auth/secrets. For general guidance on wiring secrets into tools, see https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets.
Available tools(19)
| Tool name | Description | Secrets | |
|---|---|---|---|
Delete a message from a Discord channel. This cannot be undone. | 1 | ||
Get a single Discord channel's name, type, and topic.
A missing channel (e.g. one that was deleted) is not an error: the result's ``status``
is ``not_found`` so the caller can branch without a try/catch. A genuine permission
problem is still raised. | 1 | ||
Fetch a single Discord message by id.
A missing message (e.g. one that was deleted) is not an error: the result's ``status``
is ``not_found`` so the caller can branch without a try/catch. A genuine permission
problem is still raised. | 1 | ||
Get a single Discord server's name, owner, and member count.
A server the bot cannot resolve (it is not a member, or the id is wrong) is not an
error: the result's ``status`` is ``not_found`` so the caller can branch without a
try/catch. A genuine permission problem is still raised. | 1 | ||
Resolve a user id (such as a message author_id) into a human-readable name.
Pass server_id to fold in the user's nickname in that server. Use this to turn the opaque
author_id on messages into a name without leaving the agent. A user id that resolves to no
account is not an error: the result's ``status`` is ``not_found`` so the caller can branch. | 1 | ||
List a Discord server's currently active (non-archived) threads. | 1 | ||
List the channels in a Discord server, optionally filtered by type. | 1 | ||
Read a channel's or thread's recent messages, newest first. | 1 | ||
List the pinned messages in a Discord channel. | 1 | ||
List the Discord servers the bot is a member of and can act in. | 1 | ||
Pin a message in a Discord channel so the team can find it later. | 1 | ||
Add an emoji reaction to a Discord message as the bot, or remove the bot's own reaction.
Removing affects only the bot's reaction; other users' reactions with the same emoji are
unaffected. Removing a reaction the bot never added is a no-op that returns ``removed``
False, so the caller can tell that case apart from a real removal. | 1 | ||
Reply to an existing Discord message so the answer stays tied to the question.
To reply inside a thread, pass the thread id as channel_id and a message id from
inside the thread as message_id. A thread's own id is its starter message, which lives
in the parent channel, not inside the thread. | 1 | ||
Find messages by text and/or author in one channel or across a whole server.
Use a single call with server_id to answer "I remember a message but not where" without
looping channels yourself; a server-wide search covers text and announcement channels plus
active threads and forum posts. Discord's bot API has no server-side message search, so
this scans recent messages locally and covers the most recent ``max_scan`` messages, not
full history. Matching reads ``content``, which is empty for messages the bot cannot see
in full without the Message Content intent. | 1 | ||
Post a new message to a Discord channel as the bot.
Posts with @everyone, @here, and role mentions suppressed so a routine update never
pings the whole server. | 1 | ||
Start a thread from a message, standalone in a text channel, or as a forum/media post.
Discord seeds forum and media posts from the create call but does not accept an opening
body for text-channel threads, so for those this posts ``content`` as a follow-up opening
message in one call. Mentions in ``content`` are suppressed so seeding never pings the
server. | 1 | ||
Unpin a previously pinned message in a Discord channel. | 1 | ||
Edit a message the bot posted. The bot can only edit its own messages.
Edits suppress @everyone, @here, and role mentions, so correcting an earlier post never
pings the whole server (Discord re-parses mentions in edited content by default).
Editing a message authored by someone else is not an error: it returns a result whose
``status`` is ``not_author`` so the caller can pivot (e.g. post a new message) without
its tool chain aborting. | 1 | ||
Return the authenticated Discord bot's own user identity.
Use this to verify the configured bot token and confirm which bot account the tools
act as. It is a verification helper, not a required preamble to the other tools. | 1 |