Discord can be both a source and a destination. Connect your source account to read authorized new messages; use a destination webhook or bot to send messages. These credentials are not interchangeable.
| Credential | ChannelFlow field | Purpose |
|---|---|---|
| Source account token | Source accounts → Discord | Connect your source account |
| Webhook URL | Channel rule → Discord Webhook | Send to the webhook's channel |
| Bot token | Channel rule → Discord Bot | Send using your bot's permissions |
The current Discord source uses ordinary-account automation. Read Discord's official self-bot policy and the console's account notice before deciding whether to connect. A bot destination does not change how the source account operates.
1. Obtain your own source token
This method runs only in the web session of your own signed-in account. It depends on Discord internals, is not an official stable API, and can stop working after Discord updates.
-
Open Discord in your browser, sign in to the account you intend to connect, and wait for the app to load.
-
Open developer tools with
Ctrl + Shift + IorF12; on macOS useCommand + Option + I. -
Select Console. Read any paste warning and review the code before running it. Do not execute unknown or modified scripts.
-
Run this command in your own account session:
(()=>{for(let e of Object.values(webpackChunkdiscord_app.push([[Symbol()],{},e=>e.c])))try{if(!e.exports||e.exports===window)continue;if(e.exports?.getToken)return e.exports.getToken();for(let t in e.exports)if(e.exports?.[t]?.getToken&&"IntlMessagesProxy"!==e.exports[t][Symbol.toStringTag])return e.exports[t].getToken()}catch{}})(); -
If the result is a nonempty string, copy its contents without the surrounding quotes into the Discord source account token field. An empty result,
undefined, or an error is not a token; check that the app is loaded and stop if the method is incompatible with the current version.
The token is a login credential. Enter it only in the corresponding credential field. Never put it in feedback, screenshots, messages, or a public repository.
2. Connect a source and select a channel
In your instance, open Source accounts, add Discord, and enter a source name and your token. Confirm the account belongs to the intended instance. In Channel configuration, create a rule and load the channel list to select a server, channel, or thread that the account can access.
Manual selection accepts a channel ID, thread ID, or the corresponding Discord channel link. A server ID cannot replace a channel ID. Loading the list does not grant access to additional channels; check access in Discord itself if a channel is missing.
3. Configure a Discord destination
Webhook destination
An authorized server member can create a webhook under Server Settings → Integrations → Webhooks, select its destination channel, and copy the complete URL. See Discord's webhook guide.
Choose Discord Webhook in the ChannelFlow rule and enter the full URL. If using a thread or forum post, configure the target parent channel and thread as required by the form. A display name or channel link is not a webhook credential.
Bot destination
Choose Discord Bot, enter the bot token, and provide the destination channel or thread ID. The bot must be installed in the destination server and have the required channel permissions, such as viewing the channel, sending messages, and attaching files.
Create a bot through the Discord developer portal if needed, then install it through the current application installation flow. Check both installation permissions and channel overrides. Do not enter your source-account token into the bot-token field.
4. Filter and verify
Save and enable the rule. Start the Discord source, check that it is listening, and send a new message containing a unique identifier. Match the Delivery record with the message actually received in the destination channel. For bot-authored source messages, also check the source's receive-bot-messages setting.
To receive only announcements, add trigger keywords one per line. Any trigger match satisfies that keyword condition; block keywords exclude unwanted content. Sender restrictions require the sender's real user ID. Filters apply before replacements and prefixes, so adding an announcement prefix does not make unrelated source text match.
Common problems and operating limits
- No channel in the list: check the source account's existing channel access.
- No delivery record: check the selected source, channel ID, enabled rule, keywords, sender restrictions, and bot-message setting.
- Destination permission error: check the webhook or bot, channel overrides, and thread position.
- Missing old messages: sources receive new events by default. Discord history recovery must be enabled separately and is bounded by time, count, and account access.
- Media or edit/delete differences: verify the actual destination capability with a dedicated test; successful text delivery does not prove that every attachment or sync operation works.
For other target platforms, the detailed Feishu and DingTalk guides are currently in Chinese.
