Bot Maker For Discord

Bot Maker For Discord

Not enough ratings
Official Guide - Bot Maker for Discord's Basics
By Rat
Simple How-To Guide
The Basics of Bot Maker For Discord
2
   
Award
Favorite
Favorited
Unfavorite
Basics
Setup
When you first open the app - you'll be greeted by the project manager.

Hit the "Create" button to create a bot.
You'll be prompted with this interface:
Fill everything in, then hit "Create".

You'll be seeing something like this now - just click your project and it'll open in a new window!
note: if this is your first time using the app, loading your bot might take a bit

You should see the main editor now, it looks like this:

You'll have to leave that interface aside for a moment since we need to create the bot in itself (registering it on Discord).

Head to the Discord Developer Portal[discord.com]
You'll be seeing something close to this:

Click "New Application" at the upper right corner of the screen. Give it a name, read the terms & conditions and proceed!

Now go to the "Bot" tab - this is where we set up our bot.

Discord only shows a bot's token when you reset it. Therefore, to get your bot's token, scroll down a bit and look for a "Reset Token" button. Once you find it, press it.
After resetting it, copy the token and head back to the app's settings with it
Now paste it in the "Token" field (CTRL+V while the field is selected)

Additionally, if you don't plan to mess around with your intents, go back to the Developer Portal and scroll down a bit again until you find "Privileged Gateway Intents" and enable them all
Save the changes and you'll be good to go!

Let's test if your bot is working:
Go to the top bar, look for "Bot (Offline)" and click it!
Hit "Bot Log", something like the following should appear:
If it says the exact same for you, congratulations! If not, join the support server[discord.gg] so we can figure it out together

To add your bot to your Discord server, follow these steps:
Go to your "Installation" page
Scroll down until you find "Guild Install" (guild = discord server)
Click the "Scopes" dropdown and add "bot" to it.
You'll be requested to add permissions - give your bot what you think it needs.
Afterwards, copy the link and paste it in discord. Click it from within discord and select "Add To Server" from what pops up

Editor's Basics
What everything does
Commands: obviously, your bot's commands
Actions: what happens when the selected command runs. Actions run in chronological order!
Command trigger: this one's important - go read the "Commands" category!

Actions
Actions are literally an item that does something, it takes action! Commands and events do the things you tell them to do via actions; Obviously, that means that each command (or event) has its own set of actions.

Create a command and then create an action within it (look at the "What everything does" picture/map).

The default action is "Send Message". But what if you don't want to send a message and instead do anything else? Well, for that, hit the "Change Action" button from the top bar
Once search opens, you'll be greeted with this interface:
I recommend just flicking through the available actions (they're all in folders, please open folders and read their contents, not their labels) and memorizing the general naming scheme. By the way: don't get intimidated by some of the action names -- yes, they're pretty weird (what is an anchor!? why can i call them?!) but you'll eventually get the mist of it all.

Ping-pong command
In case you're still confused about the main interface, let's create a simple ping pong command!
Hit the create command buttont:
Give the command a name
I called mine "Ping".


Alright, let's create an action now!
The default action is "Send Message" which is exactly what we're looking for!
To edit the action, double click it (or click it once and hit the edit button to the left of the create action button)
Once you double click, the action editor should pop up:

Let's replace the message content with "pong!" and make it reply to the command message instead of sending to the command channel.

Click the "Send To" dropdown to select a target. To reply to the command message, select "Command Message"

If you've done everything right, this should be what you're seeing:
Now Save & Exit out of the action! Simply hit CTRL+Q or the save&exit button (protip: you can customize keybinds!)

Let's apply the changes to the bot - we'll have to restart it.
Simply hit CTRL+Q twice on the main editor or turn the bot off & back on.

Shall we test it now?
Commands
Command Triggers
Text Command - Chat message preceded by the bot's prefix and the command name. Example: "!help"
Message Content - Chat message that incudes the command name. Example: imagine my command's name is "hello", and somebody sent a message with this content: "well hello there!"
Slash Command - command handled by Discord; the user has to begin their message with "/" & select it from the list that appears in order to use it.
Message Command - command handled by Discord; right click a message, select "Apps" and look for your command's name.
User Command - command handled by Discord; right click an user, select "Apps" and look for your command's name.

Installable commands
Installable commands can be used anywhere regardless if the bot is added or not. This includes group DMs, servers (that allow it) and DMs. Denote installable commands can only be handled by Discord.

Important
Installable commands cannot access servers. They can be ran in a server and send an interaction reply but they will not be able to do stuff that requires permissions (that are gained via inviting the bot)

Let's head to the Discord Developer Portal[discord.com]!
Go to your application, find the installation page
From there, make sure that "User Install" is toggled on.
Afterwards, scroll down until you find the "Install Link" section
Copy it and paste it in Discord
Afterwards, click it and you'll be good to go!
Alright, now that we made our bot capable to create installable commands, let's create some.
Head to BMD, create a new command, and give it a trigger of either: User Command, Message Command or Slash Command - you can't install a text command nor a message-content triggered command
I chose to make my command a slash command - but it isn't installable yet.
To make it installable, you have to open the permissions editor.

From there, you have to do a single thing set "installable" to "Yes"

IMPORTANT
You have to restart (CTRL+R) Discord and your bot for any newly made slash/user/message commands.
Variables
Variables are basically things with a name that contain some sort of data/value. They are a way to store stuff. Nothing less, nothing more.

They come in multiple forms:
Temporary Variables - Usable per-command. These are deleted when a command finishes running. If two commands run simultaneously, they will have different temporary variables.
---
Server Variables - Usable anywhere. They will be on a per-server basis. If a command runs from a server called "Server 1" and overwrites the value of any server variable, commands ran in the same server can access the new value of the respective variable. These are deleted when your bot restarts but you can use the "Save Variables" action to save them across restarts.
---
Global Variables - Usable anywhere. These don't care about servers, every server shares just one set of global variables. These are deleted when your bot restarts but you can use the "Save Variables" action to save them across restarts.


Command Parameters & the variables they output
Assuming your command's parameters look like this:
The variable the parameter is storing, in this case, the variable called "parameter", will be temporary. You will be able to access them from any action by right clicking to insert them in a text input or, if the action allows for it, select it in an input that asks for a variable (e.g. the "Delete Variable" action)

Let's try to add it to a send message action!
Simply right click any text input to bring the variable menu up
Select the variable from the menu -- you'll afterwards see it present when the message gets sent!
Do not make this common mistake:
This is how it's done:

Using variables created by actions
Some actions have options that start with "Store" (e.g. "Store User As", "Store As", "Store Message As", etc.)
These options create variables accessible to the actions after the one that creates the variable, as actions run in the same order as you place them.
Let's store the message we were sending earlier as something, we'll afterwards use the variable to delete it in 5 seconds.
(See the "Store Message As" input)
Now, let's create a wait action. Let's make it wait for 5 seconds.
Afterwards, let's create an action to delete the message. "Delete Message"
If you've done everything right, this is how your actions should look (I placed mine in an action container for no reason, don't worry about the interface):

Variables from events
Say you have a "Member Join Server" event.. what do you do if you want to perhaps send a message welcoming them?
First off, store the member in the event (every variable name is absolutely up to you, you don't have to name any the same way that I do, but make sure you use them accordingly!):
Okay, now that you stored the member, let's get their name - create a "Get Member Info" action.
Now.. let's send that name in a message! Create a "Send Message" action.
To specify the member's name, make sure to right click the "Message Content" text box.
Afterwards, select the "name" variable (or whatever name you gave it). If done right, you should see the following:

Now, you just have to specify a channel. You can simply provide the ID of your general channel or whatever channel you want to send the "welcome" message to.

That's it, that's how simple variables are to use. If you have any more questions, leave them in our Discord server's support forum!
Quick Links (Specific Guides)
We know that you can't wait to make your bot, but it's best to take in some examples first. Check these guides out!

Awaiting for a message and checking if the message's content is a number

Rotating statuses
Getting information about something
Simply put...
You can get information about anything using the respective Get [...] Info actions for that thing.

You can get a member's id, banner, profile picture & more by using the "Get Member Info" action;
You can get a server's name, icon, member count, members & more via the "Get Server info" action;

You get the drill! The most commonly used Get [...] Info actions (this does not include all of the Get [...] Info actions available in the app) are:[/b]
  • Get Member Info
  • Get Server Info
  • Get Channel Info
  • Get Message Info
  • Get Role Info
  • Get Bot Info (for information tied to your bot and the process running it)
  • & more!
Fixing "Interaction did not respond" or "Something went wrong"
Important! Based on your error & layout, your mileage may vary!

Fix 1 - Simply replying
Create a "Send Message" action and respond with anything. Make sure the "if possible, reply to interaction" option is toggled on!

Fix 2 - "DiscordRESTError: Unknown interaction on post"
You have taken a while to respond to the interaction. Create a "Defer Interaction" action at the beginning of your actions -- make sure to toggle on the "if possible, defer current interaction" option.

Fix 3 - Anything else
You can send your error to ChatGPT and it could possibly tell you what it's about. If you prefer to avoid it or if it gets it wrong, you can always ask that in our support forum!

Parameters Autocompletion
Important: Parameters can only be used by Slash commands!

Autocompletion is basically the same as parameter options but with a twist: it can be modified on-the-fly (meaning that every keystroke allows you to show a different set of options)

This is probably what you're seeing right now: In order to enable autocompletion, we need to toggle on autocomplete. This is really simple, just make sure the toggle is set to "Yes"

Afterwards, hit the "Autocompletion" tile (the one that says "0 Actions").

This is what you should be seeing if everything has been done correctly:

Store Input As
If you don't know what storage inputs do, head to the "Variables" section of this guide.
The input is what the user has typed into the parameter.

Store Autocompletion Interaction As
This is what your autocompletion interaction will be stored as. As of writing this guide, this has no real purpose except for getting the user running the interaction (use the Get Interaction Info) action.

Actions
These will run every keystroke! The input variable will be created before they run so that you can use it within them. Within your actions, you need to create a list which you'll later use as your Result List.

Results List
The results list has to be a variable that was created within your parameter's autocompletion actions.

In this example, I made a create list action and defined the input's variable:
But, in order to provide autocompletion with its results, we need to create a list of results. Thankfully, we don't need to think much of that! Let's convert every letter of the input into a list element:
denote the create list action is not required now that the convert text to list action is already creating a list for us

Just for the sake of "why not", let's create a result that displays the user's input
We also have to populate the Result List variable

Now, let's give it a try! Restart your bot to publish the changes to Discord & CTRL+R your Discord client to clear its command cache.
Rejection Scenarios
Rejection scenarios are found within the Permissions pane.
Remember, events do NOT have permissions!

Rejection scenarios have two sets of actions:

Not Within Limit
This scenario is executed if the command was ran outside of your set limit - for example, if you set your limit to servers and the user runs the command in their DMs, the rejection scenario will run. Vice versa.
Setting the command's limit to "Nothing" will obsolete this scenario.

Missing Permissions
Say I toggled on the "Administrator" permissions requirement. If somebody without administrator permissions runs the command, the Missing Permissions scenario will run.
Toggling on the installable option will obsolete this since installable commands don't have access to servers therefore can't access server members & their permissions.
Logic
Hey! If you haven't yet read the Variables category, I recommend you read it first!

You can create comparisons and run things based on those comparisons.
Let's use Check Variable as an example:

Now, let's imagine that the value of the temporary variable called "Variable" is "Rat"

Explanation of each option:
Continue Actions
Doesn't affect anything - keeps going.

Stop Actions
Stops every action under "Check Variable" (greyed out actions won't run).

Skip Actions
Skips # actions.
Action #3 (the greyed out one) won't run.

Jump to Action
Jumps to a specific action. (Greyed out actions won't run)

Everything else is pretty self-explanatory.
If you want to stop a command's actions from within check variable's "Run Actions" condition, just create a "Stop Actions Out Of Container"
Send Message Tricks
At the core of every command lays the send message action. There's a lot more going on than meets the eye going on in this action.

The "Send To" field
In the case of text commands, this field will contain a "Command Message" option. This signifies that it'll reply to that specific message. If you want to give a reply ping to the person you're replying to, go inside options & toggle on "Allow Mentions"
Similarily, you can also reply to a message if you have its variable & fill in the "Send To" field with it.

Don't Send
This is here for a VERY specific reason: Webhooks! See the "Webhooks" section for more.

Options -> Message To Update
This is used if you want to edit an existing message. Just fill it in with your message's variable! Bots can only edit their own messages.
Components V2
Find components v2 under "Send Advanced Message" (the action)
Webhooks
[work in progress]
Anchors
Anchors are a way to reference a specific point in a command or event. An anchor that isn't self contained will run every action placed after it when it is called.
The anchors that you call will use the same variables as the place that you're calling them from, not as the place where they're created (unless the two places are the same).

Creating Anchors

You can create an anchor at any time by simply adding a "Create Anchor" action anywhere.

Now, the actions below this anchor will run every time you call the anchor via the "Call Anchor" action
In this case, the only action that will run when you call the anchor is the "Send Message" action that sends "Hello World". If your run the command containing the anchor, both messages will be sent (as anchors do not stop any actions before them).

That's all! If you need anchors that exclusively run when called, use the "Create Self-Contained Anchor" action.
Lists
What are lists?
They're a mean of storing multiple values in a variable and accessing them via their position rather than name. For storing multiple values in a variable and accessing them via their set name, see the Data (simply data, nothing else) actions - they work similarly to user/server/channel data but they're bound to a variable rather than an entity on Discord!

Here's a list:
  • Bleh
  • meh
  • hawk tuah
  • talk tuah

This list has four items/elements. List element positions start at zero, so if you took the item at position zero (0), you'd get back "Bleh" -- at position one (1), you'd get meh (and so on).

Enough talking - let's create a list!
As you can see, I've stored my list in the "List" temporary variable, remember that for later!

Now that we have a list, we should probably give it some elements, right? Let's make a "Create List Element" action:
You can see that I added it to the "List" temporary variable & offered it a value of "Element 1 at Index 0". The index is the equivalent of a position. As I said before, the first item will have their position equivalent to zero (0).
To get that item, you can use the "Get List Element" action. I'll show you how to use it, just keep reading!

Okay, but what about not making my own lists and instead getting pre-made varying lists of varying things, such as a list of messages from a channel or a member's roles. There's something in store for you!
Let's create a "Get Channel Info" action and get the messages from the channel. I'll store it as "Messages List" (but frankly you can just call it "Messages")

Now that you have your list, let's see what you can do with it:

You can get any message, such as the first, using the "Get List Element" action to afterwards use it in any subsequent actions (Delete Message, Add Reaction, etc)

But lists are even more special than this!

You can also loop through them - basically, you can run a few actions for every item of the list and store that item of the list every time those actions start running. You can use that for things such as reacting to every message in a channel. Here's how:
First, create a "Loop Through List" action and fill it in
Let's explain a bit:
  • The iteration is a repetition of something. If you have five list elements, the iteration actions will run five times.
  • The iteration value is the value of the list element per the iteration. For the first iteration, the iteration value will be the value of your first item in the list. For the second iteration, it'll be the value of your second item in the list. Etc.
  • The iteration index is the position of the list element per the iteration. For the first iteration, it'll be 0. For the second, it'll be 1. Etc.

To prove that you can do a whole lot of stuff with this, you can have your bot react with "💗" to every message, just follow these steps:
Create an "Add Reaction" action in your iteration actions (For Each Iteration, Run)
Set it up to be like this (make sure the message variable is in accordance with how you stored the iteration value, as that will be the message we're currently iterating upon!)

Now, this is how it should look (overall):

That's basically it!

Please don't get discouraged if you don't understand lists at first, they're a relatively abstract concept. Try lists yourself and you'll eventually figure it out, I'm sure it'll click!
Commonly Met Issues
Interaction failed
AKA "Interaction/Application did not respond"
Solution: Create a send message action inside your component / command. At the very bottom of send message, toggle on "if possible, reply to the current interaction".

Bot Won't Turn On
Solution: Look at the top bar of the app. Click on bot, afterwards select "Bot Log". If it's a commonly met error, a google search should do the trick.

Slash Commands Aren't Showing Up
Solution: Check your bot log (refer to problem above this) - nothing in there? great! then restart discord via CTRL+R
[User / Member / Etc] Data
What is data?
Data (not to be confused with the Data-specific actions) is a storage form usable across restarts that keeps everything contained and tidy. It's also the official way of implementing persistent storage into your bot.

To clear out any confusion, this part of the guide does not talk about the outlined actions

Okay, let's get to explaining. Let's use a "Store User Data" action. It'll have three inputs - one for the user, one for the data name and one for the data's value.

You might wonder what a "data name" is;
To put it short, it's an access key or a differentiator from every other data stored for the respective user. For example, here's the following two actions:
(these are in the same order as they are shown)

Now, I've stored some user data surrounding the command author. The data's name is "test" and I set it's value to "hello"

In the example I offered, the value of the "variable" temporary variable will be "hello" - so, if we were to put the variable (using right-click variable insertion) in a Send Message action, the content would equal "hello".

That's basically it - you're free to go & try for yourself!
Mapping Lists
Mapping a role list to a role ID list

Say we had a list of a member's roles:

What if I wanted it to get a list of role IDs instead?
You'll have to map the list. Simply put, this is what every option of the action means:
List
You'll have to provide a variable leading to a list. In this guide's case, it's a temporary variable called "Roles"

Store Iteration Index As / Store Iteration Value As / Iterations
Every list has multiple items. Mapping the list will run the actions in the "For Each Iteration, Run" box for every separate item. You'll obviously need to use that item to get your desired property from the item and map it later on. If this doesn't make sense yet, it will, just keep reading!

Mapped Value of Iteration
As I just said, the actions in "For Each Iteration, Run" will run per list item. You have to make those actions output something, BMD won't guess what you want to become your iteration's map value.


Basically, doing what's done above will make the mapped list be one of IDs. So, if you were to store it, you're going to get the command author's list of role IDs.
4 Comments
rare.sage 9 Dec, 2024 @ 9:35am 
Idk if the rizzler could handle this shit tbh
Rat  [author] 23 Nov, 2024 @ 7:07am 
i agree it's so skibidi
Dill Doe 11 May, 2024 @ 10:39am 
This guide is skibidibi sigma ohio rizz
devvyyxyz 7 Oct, 2023 @ 4:04pm 
W rizz in this guide i must say