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.