Tutorials

Learn how to build and manage your bot with our tutorials.

Button Verification

We'll be making a simple button verification flow. Your bot will send an embed message with the button. When the button is clicked, the member will be admitted to the server!

You should configure your server permissions so that all channels are hidden except for one channel. Then create a   role that allows access to those channels again.

Discord OAuth

This tutorial explains the process of setting up Discord OAuth with your bot to access additional information about your bot's users.

Dropdown

In this tutorial, we will be building a simple dropdown that allows users to select their favorite color.

Flow triggers decide what action will start your flow. In this case, we want the dropdown to appear after we send a message with a slash command.

Set an appropriate command name and description.

We're using as the command name and as the description, but you can set it to anything you want.

The user will be selecting their favorite color from the dropdown, not from the command itself, so we don't need to set any command options.

Now that we have the Slash Command trigger, we need to add the dropdown. To do this, we'll use the Embed Dropdown Builder block.

Click the Add Block button, and select Embed Dropdown Builder.

Once you add the block, set a custom ID (we used fav-color and set the type to text.) You can also set the placeholder value to something like You can leave everything else blank.

Now that we have the Embed Dropdown Builder block, we need to add the options to the dropdown. To do this, add Add Option to Dropdown Builder blocks to the flow.

For each option, select the dropdown, and provide a label, value, and emoji. We created 3 options for red, green, and blue. You can copy/paste these emojis: :red_circle: :large_green_circle: :large_blue_circle:.

Pro tip: use the Duplicate button on the Add Option to Dropdown Builder block to easily create more.

Now that we have the dropdown, we need to send it to the user. To do this, we'll use the Embed Reply to Interaction block.

Click the Add Block button, and select Embed Reply to Interaction.

Once you add the block, find the Dropdown Builder Data field, click Insert Variable, and add the Dropdown Data output from the Embed Dropdown Builder block.

You also need to set the Content or Body fields to something, so we used as a prompt.

Now that we have the dropdown, we need to create a new flow that will handle the user's selection.

To do this, go to the Components page and create a new flow. We'd suggest calling it something like Favorite Color Dropdown Handler.

Once you've created the new flow, you need to set the trigger to Dropdown Select.

Set the Dropdown ID to the same ID you used in the Embed Dropdown Builder block, which is in our case.

Now that we have the Dropdown Select trigger, we need to send a message back to the user with their selection. To do this, we'll use the Text Reply to Interaction block.

Click the Add Block button, and select Text Reply to Interaction.

Once you add the block, find the Message Content field, click Insert Variable, and add the Dropdown Values output from the Dropdown Select trigger.

For our example, we used as the message content.

Go over to Discord to test it out. It should pop up in the slash command menu, and you should be able to select a color from the dropdown and get a reply.

If you're confused or have any issues, ask on the or in our . We're happy to help!

Modals

This video Tutorial goes over how to use modals in inventor.

This guide will walk you through creating a modal system in Discord with commands and flows. We'll cover how to call a modal, handle its submission, and send data with modals.

Create the Flow

Your calling flow is now complete. This flow triggers the modal.

Create the Flow

Now, when the modal is submitted, the bot will respond with an embed containing the entered nickname.

Run the command in Discord. The modal should appear with a field labeled Nickname.

Submit the Modal

This section explains how to pass data dynamically using the modal ID.

Add a Get Current Date and Time Block before the Modal Reply to Interaction Block. We'll be using the output with the current time in HH:MM:SS format.

Edit the Modal Custom ID input of the block.

Test the Command

Submit the Modal

Open the modal, wait 10 seconds, then submit it.

Notice that the time in the message footer will show when the modal first appears on-screen, rather than when it was submitted. This is because we are recording the time of modal creation, storing it in the modal's id, and retrieving it when the modal is submitted.

You can use this simple approach to pass all sorts of data through interactions like modals, dropdowns, buttons, and more.

User Info Command

In this tutorial, we will be building a simple slash command that shows information about a user.

Flow triggers decide what action will start your flow. In this case, because we're making a user info command, we want to trigger our flow with a slash command.

Pick Slash Command from the trigger list.

Set an appropriate command name and description.

We're using user-info as the command name and Get information about a user. as the description, but you can set it to anything you want.

You should click the Sync Command button once you're done to sync the command with Discord. We don't need to change any other options for this command.

We want the person running the flow to be able to select a specific user that they want to retrieve information about. To do this, we'll click the Add Option button on our slash command.

For the option type, we'll select User. We'll also set a basic option name and description. This will allow the user to select a user from a menu on Discord.

Set the option to required, since the user needs to select who they would like information on.

\

Now that we have the user that the command was run on, we need to get information about that user. To do this, we'll use the Get Server Member block.

Click the Add Block button, and select Get Server Member.

Now that we have the Get Server Member block, we need to insert the server ID and user ID variables into the block.

Click on the Insert Variable button under the Server ID field, and select Slash Command, then Server ID.

Click on the Insert Variable button under the User ID field, and select Slash Command, then user ID. This may be called something different if you set a different option name.

\

Now that we have all the necessary information about the user, we can send the information back to the user. To do this, we'll use the Embed Reply to Interaction block.

Click the Add Block button, and select Embed Reply to Interaction.

Now that we have the Embed Reply to Interaction block, we need to insert the user variables into the block.

There are a lot of ways to design your embed, and you can use any of the variables from the Get Server Member block.

In the example below, we used the User Username, User ID, User Global Name, Member Nickname, Member Joined At (Unix), User Avatar URL, and User Accent Color variables.

Go over to Discord to test it out. It should pop up in the slash command menu.

If you're confused or have any issues, ask in the or on the . We're happy to help!

Databases

This video tutorial goes over how to save data using databases in inventor.

This tutorial will guide you through creating a database, looking up user points, and updating points in the database using flows. Follow these steps to build and test your setup.

On your dashboard sidebar, find and click on the Database tab.

In the top-right corner, click the New Database button.

Name the database points and click Create Database.

You'll be redirected to the database editor. Here, add the following columns:

Your database is now ready.

Create a Flow

Add a block and configure it as follows:

If no points are saved yet, the response may show a blank value. Don't worry, this will be updated in the next step.

Create a Flow

Add a block to the flow and configure it as follows:

Add a block and configure it to increment the points:

Add a block and configure it as follows:

Write a response to the user like "Added one point".

Test the Command

Run in Discord. The bot should add a point in the database, and respond with your message.

Use to verify the update. The bot should now respond with the user's new points total.

Now your bot can track and update points for users with simple commands! Use this setup to build more features that interact with your database.

Create a Bot

This video tutorial goes over creating your first Inventor bot and setting up a ping command.

Conditional Reply

In this tutorial, we will be building a simple flow that replies to a message if it contains a specific word.

This flow uses the content of messages to conditionally send replies, which requires the Message Content intent to be enabled on your bot.

If you haven't already, please enable the intent on the (select your bot, go the the Bot tab on the sidebar, and enable . Then you can go to the page on Inventor and enable the intent.

Flow triggers decide what action will start your flow. In this case, because we're making a conditional reply, we want to trigger our flow when a message is sent.

Pick Message Sent from the trigger list.

Now that we have the Message Create trigger, we need to check if the message contains a specific word. To do this, we'll use the If Statement block.

Click the Add Block button, and select If Statement.

On the left side of the if statement, use the insert variable menu to insert the Message Content variable from the Message Sent trigger.

For this example, we'll check if the message contains the word hello, but you can write in any word on the right side that you want to check for.

In the middle of the if statement, pick the comparison operator contains from the dropdown.

Now that we have the If Statement block, we need to send a message if the message contains the word hello. To do this, we'll use the Send Message block.

Click the Add Block button, and select Send Message.

Once you add the block, you can customize the message that will be sent and the channel that it will be sent in. For this example, we used the channel from the original Message Sent trigger, and set the new message to reply to the old one.

Now that we have the Send Message block, we need to move it into the If Statement block. To do this, click and drag the Send Message block into the Drag area under the If Statement block.

Once the Send Message block is nested inside the If Statement block, it will only run if the if statement passes (which happens when the message contains the word hello).

Go over to Discord to test it out. It should reply to any message that contains the word hello.

If you're confused or have any issues, ask on the or in our . We're happy to help!

Buttons

In this tutorial, we will be building a simple button that sends a message when clicked.

Create your first flow. This flow will have a slash command, and will send the message with a button on it.

Enter a command name and description, then click "Sync Command".

Switch to the Add Block page, then add an Embed Button Builder block.

Fill in the details for only the first button. You must fill out all fields. For the dropdown fields, click the down arrow then select an option rather than typing it in. For the emoji, you can copy/paste this one ✅ or search for an online emoji directory for copy/pasting.

Be sure to set the Custom ID field to "example" (or another value, just remember it for later).

Fill in the content field, then insert the output in the Buttons field.

We've now created the first part - the user can run a slash command, and will see a button on Discord.

It's time to create the second part, which will respond to the button press.

To do this, we need to create a new flow.

This should be set to the same value we used when filling out the button builder earlier. We suggested setting this to "example".

This will reply after the user clicks the button.

Go into a Discord server with your bot and run the command, then click the button. You should get a result that looks like this:

If the command isn't showing up, make sure you synced it from the trigger page.

Tebex

This tutorial shows the process of setting up Tebex items and purchases with your Inventor bot.

Custom Blocks

This tutorial shows how to create and use a custom block.

This tutorial is divided into two parts: the first part explains how to create the custom block, and the second part demonstrates how to integrate the custom block.

In this part, we will go over how to create the custom block.

Go to the Components Tab, New Components, and select Custom Block.

Press the Blue Button to create an input.

In the popup, name the input user id.

Now create another input called message.

Next add a banner to describe the block's purpose.

Go to the Add Block page and add the Create DM Channel block. This block creates a DM channel to send a message.

In the User ID field, click Insert Variable and select the userId input from the Custom Block Inputs.

Go to the Add Block page and add the Get User block. This block fetches user details.

In the User ID field, click Insert Variable and select the userId input from the Custom Block Inputs.

Go to the Add Block page and add a Send or Edit Text Message block.

In the Channel ID field, click Insert Variable and select the channelID from the Create DM Channel block.

Click Insert Variable, select Get User, and choose Mention to add the user mention.

Press Enter, then click Insert Variable again, select Custom Block Inputs, and choose message.

For that, we need to go into the lower custom block button

Press the Blue Button to create a new output.

Now a popup appears again. Type mention user as the name of the output.

Click Insert Variable, select Get User, and choose Mention to add the user mention.

Now the custom block is complete. To use it, we need to create another flow.

In the second part of the tutorial, we will go over how to integrate the custom block.

Create a new flow and name it DM User.

Set the trigger to Slash Command.

Name the command dm-user.

Press the Grey Button to add options:

First Option: Set the type to User and name it user. Check the Required box.

Second Option: Set the type to Text, name it message, and check the Required box.

Click Sync Command to make the command available in Discord.

Drag the DM User custom block into the flow.

In the userId field, click Insert Variable, select Slash Command, and choose user ID.

In the message field, click Insert Variable, select Slash Command, and choose message.

Add a Text Reply to Interaction block after the DM User block.

In the Message Content field:

Turn the reply ephemeral to make it visible only to the user.

Go to a Discord server with your bot and run the /dm-user command. Example:

The bot should respond with:

The user should receive a DM:

Now your bot is ready to send DMs whenever the /dm-user command is used.

Ping Command

This tutorial is available in both written and video form:

(ping command starts at 0:54)

Create a new flow.

This flow will be triggered by a slash command and will send a message with the bot's ping.

Enter a name for the command. We'll call it ping. After naming it, click Sync Command to make sure the command is linked to your Discord bot.

Switch to the Add Block page and add a Discord API Ping block. This block will fetch the bot's current ping (latency).

Next, add a Text Reply to Interaction block after the API Ping block. This will be the block that sends the message back to the user when they trigger the command.

In the Message Content field, write:

"The bot's ping is"

This will be the start of your message to the user.

Now, click on Insert Variable in the message content.

Select Discord API Ping and choose Latency. This will insert the bot's ping into the message.

After the ping variable, type "ms" to indicate the value is in milliseconds.

Your flow will now look like this:

Slash Command

Go into a Discord server with your bot and run the command. The bot should respond with a message like:

The bot's ping is 94ms

If the command doesn't show up, make sure you synced it from the trigger page.

Now your bot will respond with its ping whenever the command is used!