Commands

Message Receive

Indicates that the command will trigger when a message is recieved in a server the bot is in.

Private Message

Indicates that the command will trigger when a message is recieved through direct message with the bot.

Member Join

Indicates the command will trigger when a member joins a server the bot is in.

Member Leave

Indicates the command will trigger when a member leaves a server the bot is in.

Member Ban

Indicates the command will trigger when a member is banned from a server the bot is in.

Reaction Add

Indicates the command will trigger when a reaction is added to a message in a server the bot is in. Command field for this type must be filled with an emoji or name of a custom emoji to trigger, or * can be used so it always triggers.

Command

The string (or emoji for Reaction Add) that will cause the actions of the command to happen. If * is placed in this field the command's actions will always happen.

Command Description

An optional description you can write to remember what your command does.

Phrase

Message Receive, Private Message

The command string can be anywhere in the message to activate the command.

Requires Role

Message Receive, Reaction Add

The command will only activate with the given role.

Requires Administrator Privilege

Message Receive, Reaction Add

The command will only activate if the user who calls it has admin privileges.

Send Channel Message

Message Receive, Member Join, Member Leave, Member Ban, Reaction Add

Sends a messsage in the channel where the command is called.

Send Channel Message Embed

Message Receive, Member Join, Member Leave, Member Ban, Reaction Add

Creates an embed. Image URL and Thumbnail URL must be valid if used.

Send in specific channel

Message Receive, Member Join, Member Leave, Member Ban, Reaction Add

Overrides what channel the channel message and embed actions get sent to.

Send Private Message

Message Receive, Private Message, Member Join, Member Leave, Member Ban, Reaction Add

Sends a private message to the user who called the command.

Send Private Message Embed

Message Receive, Private Message, Member Join, Member Leave, Member Ban, Reaction Add

Creates an embed. Image URL and Thumbnail URL must be valid if used.

React to received message

Message Receive, Private Message

Reacts to the message that triggered the command. If you're using a custom emoji, then just use the name of it.

Ignore error messages

Message Receive, Private Message, Member Join, Member Leave, Member Ban, Reaction Add

Ignores most error messages that are not fatal to the functions of the command.

Require specific message ID

Reaction Add

Requires a specific message ID for the React Add type command to function.

Delete if contains

Message Receive

Removes the message if it contains a certain string. Different strings must be separated with |.

Delete command message after

Message Receive

Deletes the message that called the command.

Delete X messages

Message Receive

Deletes the number indicated in the field amount of messsages.

NSFW only

Message Receive, Reaction Add

The command can only be called in NSFW channels.

Kick

Message Receive

Kicks a user. Requires kicking permissions. Usage: if command is "kick" usage is "kick @user"

Ban

Message Receive

Bans a user. Requires banning permissions. Usage: if command is "ban" usage is "kban @user"

Voice Mute

Message Receive

Voice mutes a user if called first time, else unmutes them. Requires muting permissions. Usage: if command is "mute" usage is "mute @user"

Assign/Remove Role

Message Receive, Member Join, Reaction Add

Assigns a role when called the if user has the role, else it removes the role.

What is it?

This is the file that is outputted when you export your commands. You could upload and send it to other people to use with the app, but you could also use these commands as the basis for a bot you decide to write yourself. I've tried to describe what each value is and what it is used for here.

channelMessage

A nonempty channel message is sent when the command runs. An empty value disables this action.

command

The command that the message must equal inorder for the command to trigger. This will be an emoji or name of custom emoji for the react add type.

commandDescription

A description of the command.

deleteAfter

If the message that triggered the command should be deleted afterwards.

deleteIfStrings

A nonempty pipe-separated list of strings enables conditional deletion of matching messages.

deleteNum

A positive number enables bulk deletion and determines how many messages are deleted. Zero disables it.

ignoreErrorMessage

If the command should ignore error messages.

isBan

If the command should ban someone.

isKick

If the command should kick someone.

isNSFW

If the command is NSFW and should only be sent in NSFW channels.

isVoiceMute

If the command should voice mute a user.

phrase

If the command should activate if there is more than just the command in the recieved message.

privateMessage

A nonempty private message is sent to the relevant user when the command runs. An empty value disables this action.

reaction

A nonempty emoji ID, name, or Unicode emoji enables the reaction action.

requiredRole

A nonempty role ID or name restricts the command to members with that role.

roleToAssign

A nonempty role ID or name enables the role-assignment action.

specificChannel

A nonempty channel ID or name routes channel messages and embeds to that channel.

specificMessage

For Reaction Add commands, a nonempty message ID restricts the trigger to that message.

type

The command type.
TYPE_MESSAGE_RECEIVED = 0
TYPE_PM_RECEIVED = 1
TYPE_MEMBER_JOIN = 2
TYPE_MEMBER_LEAVE = 3
TYPE_MEMBER_BAN = 4
TYPE_REACTION_ADD = 5

channelEmbed

A channel embed template. At least one title, description, footer, image, or thumbnail field enables this action; color alone does not.

privateEmbed

A private embed template. At least one title, description, footer, image, or thumbnail field enables this action; color alone does not.

Cooldown fields

cooldown?: number is the duration in seconds. Zero or an omitted value disables the cooldown.

cooldownType?: "User" | "Server" | "Global" selects whether usage is tracked per user, per server, or across every server.

cooldownMessage?: string is an optional BCFD template used when blocked. It can include $cooldownRemaining(). Without a custom message, the app sends its standard remaining-time response.

Reply and typing fields

channelMessageAsReply?: boolean and channelEmbedAsReply?: boolean send the corresponding response as a Discord reply when a triggering message exists.

channelMessageTyping?: boolean and channelEmbedTyping?: boolean keep the typing indicator active while that response is being prepared.

These fields apply to channel responses. Event commands without a triggering message fall back to a normal channel send.

channelWhitelist and serverWhitelist

channelWhitelist?: string and serverWhitelist?: string contain comma-separated Discord IDs. When nonempty, the command runs only in a listed channel or server.

Use numeric Discord IDs, not names or mentions. Enable Developer Mode in Discord to copy IDs.

startsWith and phrase

startsWith: true matches when a message begins with the command and allows arguments after it. phrase: true matches the command text anywhere in a message. With both false, the message must equal the command.

Use $args(index), $argsCount, or $messageAfterCommand with Starts With commands.

Canonical command JSON example

{
  "id": "app-assigned",
  "channelMessage": "Hello $name!",
  "command": "!hello",
  "commandDescription": "Greets the caller",
  "deleteAfter": false,
  "deleteIfStrings": "",
  "deleteNum": 0,
  "ignoreErrorMessage": false,
  "isBan": false,
  "isKick": false,
  "isNSFW": false,
  "requiredRole": "",
  "roleToAssign": "",
  "specificChannel": "",
  "specificMessage": "",
  "isVoiceMute": false,
  "isAdmin": false,
  "phrase": false,
  "startsWith": false,
  "privateMessage": "",
  "reaction": "",
  "type": 0,
  "channelEmbed": { "title": "", "description": "", "hexColor": "", "imageURL": "", "thumbnailURL": "", "footer": "" },
  "privateEmbed": { "title": "", "description": "", "hexColor": "", "imageURL": "", "thumbnailURL": "", "footer": "" },
  "cooldown": 0,
  "cooldownType": "",
  "cooldownMessage": "",
  "channelMessageAsReply": false,
  "channelEmbedAsReply": false,
  "channelMessageTyping": false,
  "channelEmbedTyping": false,
  "channelWhitelist": "",
  "serverWhitelist": ""
}

The app assigns id during creation. Existing IDs cannot be edited.

Payload-backed actions are enabled by their content: nonempty message, role, reaction, channel, message-ID, or delete-filter fields; a positive deleteNum; or an embed with visible content. Clear the payload (or set deleteNum to zero) to disable that action.

Template context and failure behavior

User values require a caller, member values require server membership, mentioned values require a mention, and server or channel values require the corresponding Discord context. A value normally becomes empty when its context is unavailable.

Channel management requires Manage Channels. Role assignment requires Manage Roles and the bot's role must be above the target role. Kick, ban, and voice mute require their matching Discord permissions and valid targets.

Functions that reject invalid arguments or Discord operations return text beginning with [BCFD Error:. Lint templates before saving, but also account for runtime permission and context failures.

The BCFD interpreter uses exact, case-sensitive keyword names in both eval scope modes.