Skip to content

Modules

Module maker

Your own automations: a trigger, a few conditions, a list of actions over the modules the bot already has.

A custom module is one sentence: when something happens, if a few things are true, then do a list of things. The things it can do are the modules Dispresso already has, so a module that gives coins goes through the economy, one that opens a ticket goes through tickets, and one that posts an embed posts one from your embed builder. Build it from cards on the dashboard or say it to the bot; either way the bot runs it.

Or just tell the bot#

Say it in chat
make a module: when someone says gg in #general give them 5 coins
when someone joins, dm them welcome and give @Member
when someone reaches level 10 give @Regular and say congrats {user} in #levels
every day at 18:00 say raid time in #announcements
when someone reacts with :star: on the rules give @Verified
when someone uses !claim give them 100 coins once every 24 hours
list my modules
turn off the gg module
delete the gg module
what can modules do
make an application system
make a system: Shop
add a module to the shop system: when someone says !points reply you have {user.var.points} points
set the points variable to 0
what systems do we have
show me the shop system
export the shop system
make a suggestion system where members post ideas in #ideas with upvote and downvote buttons and staff can approve into #approved
make a warn system that DMs the member and logs to #mod-log and bans at 3 warns
make a daily reward where members type claim in #rewards and get 100 coins once a day
when someone says a slur delete the message and ban them for hate speech
when someone uses !vip give them the VIP role for 2 hours
test my welcome gift module
what shared systems are there
install the shared system called Coffee shop
publish my shop system as Coffee shop: a points shop with a daily bonus

The bot reads the trigger, the conditions and the actions out of the sentence, shows you the module in one line, and saves it when you say go. Anything it cannot place it asks about, one question at a time: which message the star goes on, which channel a button lives in, which role you meant. A message with the word and in it goes in quotes. Start with dispresso or mention it. It asks for anything it still needs, writes the same settings the dashboard writes, and the whole list of sentences is on Talk to Dispresso.

Server Elite or a Custom Bot Instance

Custom modules run on Server Elite, Enterprise, or a server with a live Custom Bot Instance. Below that the builder is read-only, saved modules are kept and do not run, and the page says why.

Triggers#

TriggerFires when
A command is usedSomeone types the prefix and the word, like !claim. A real bot command with the same name always wins.
A slash command is used/server custom <name>, with the name autocompleted from your modules. The !name twin works too.
Any message is sentEvery message, or every message in one channel. Pair it with a cooldown for a point per message.
A message contains wordsAny of the words or phrases you list appears in a message, whole words, any case, optionally only in one channel.
Someone joins / leaves / boostsA member arrives, goes, or boosts the server.
A message matches a patternA regular expression, case sensitive unless it starts with (?i); the groups become {match}, {match.1} and {match.name}. A pattern that could hang the bot (a repeated group that repeats inside) is refused when you save.
A reaction is added or removedThe emoji you picked, on any message or on one message by its link.
A button is pressedThe bot posts a button in the channel you pick; pressing it fires the module.
A level is reachedThe leveling module says someone crossed that level.
A role is givenSomeone gets the role, by any route.
Someone joins or leaves a voice channelAny voice channel, or one in particular.
A message is deletedAny channel or one channel; the deleted text rides along for a log line.
On a scheduleEvery N hours; every day at a time; weekly on the days you tick; monthly on a day of the month (or its last day); or once, at one date and time, after which the module switches itself off and its card says Done. Every clock time reads in the time zone you pick (blank is UTC). No member here, so no DMs or roles.
A form is submittedOne of your forms was sent.
A ticket is openedAny ticket, or one ticket type by its key.
A webhook is receivedA system's secret URL is called with JSON; the body becomes {hook.*} placeholders and an event name picks the module.

Schedules#

A weekly or monthly slot fires once, up to fifteen minutes late if the bot was restarting at that minute, and never twice for the same slot: the module's last run is the persisted record of it, so a restart in that minute does not post again. A one-time slot the bot slept through fires when it wakes, once. The module card on the dashboard and the bot's own card both say when next (Next: Fri 6:00 PM EDT), and two placeholders carry the clock into the message: {next_run} is the run after this one and {last_run} the run before it (never on the first). By talking: every friday at 6pm est say raid night in #raids, mondays and thursdays at 9am say standup in #team, weekends at noon post movie time in #events, on the 1st at 9am say rent is due in #general, the last day of the month at 5pm pst say month over in #general, on october 3 at 8pm say launch day in #general, tomorrow at 6pm say launch in #general. A zone word after the time (est, pst, uk, cet, Europe/Berlin) sets the zone; a time with no zone is UTC.

Conditions#

Up to five, all of which must hold: has a role, does not have a role, in a channel, not in a channel, is staff (Manage Server), balance at least, level at least, a percent chance, a per-person cooldown, the message contains words, and, inside a system, a variable is at least or equals a value, a list has or lacks the person, a list is at least this long, their own variable is at least, and a form answer contains words. A condition that needs a member is greyed out on a schedule, because there is nobody there to check.

Actions#

ActionGoes through
Say, reply, DMA message with {user}, {server}, {channel} and {count} filled in, optionally with an embed from the embed builder.
Give or take a roleDiscord, with the module's name as the audit reason.
Give or take coinsThe economy module, so balances, the ledger and the leaderboard agree.
Give XPThe leveling module, so the level up fires like any other.
Create a channelDiscord, under a category if you pick one.
Delete the message, react to it, take a reaction offThe message that fired the trigger; taking a reaction off removes theirs and the bot's own.
Set a channel's slowmodeDiscord, 0 to 21600 seconds, in the same channel or one you pick.
Time out, kick, ban, unbanDiscord, with the moderation module's own case and log line, so !cases and the mod log show what a module did. The same guardrails as every moderation door: never the server owner, never the bot, never someone whose top role is above the bot's, always a reason (the module's name when you give none). A ban DMs the person the reason first and deletes their last N days of messages: the number on the action, or, left blank, the moderation module's own Delete days setting, the same one /mod ban and !ban read. Unban lifts a ban by the person the module is about. By talking: ban them for spamming, unban them.
Give a role for a whileDiscord now, and a follow-up on the same scheduler as Wait minutes or hours takes the role back after N minutes (up to a week), so it survives a restart. By talking: give them the VIP role for 2 hours.
DM with buttonsA DM with an embed builder embed or a title and body and up to five buttons, each running a named module in the same system as the person who pressed. A press in the DM finds its server through the module. By talking: dm them welcome with buttons Yes and No that run the accept and decline modules; the modules are named by their names, and a name that is not a module here is refused by name before anything is saved.
Open a ticketThe tickets module, by ticket type, as if they pressed the panel.
Post an embedOne from the embed builder, by name on the site or in chat.
WaitUp to 60 seconds between two actions, or minutes and hours with Wait minutes or hours, which is written down and survives a restart.
LogThe logging module, under the custom_modules system, so the log viewer filters it.
Run another moduleIts actions, with its conditions checked, three deep at most.
Set, add to, push to, remove fromThe system's variables and lists, one atomic write each; the per member versions too.
Do math on a variableAdd, subtract, multiply, divide, modulo, min, max or set, against a number or another placeholder like {var.bonus}. A divide by zero is a named error in the run log, not a crash.
Pick one at randomOne line out of a list, into {pick} or {pick.name} for the actions after it, and into a system variable if you name one.
Post an embed with buttonsAn embed builder embed or a title and body, with up to five buttons, each running a named module in the same system as the presser or as the person the post is about.
Ask in a formA Discord form with up to five questions, from a button or a slash command; the answers become {answer.key} for the actions after it.
Send a webhookPOST JSON to a public http(s) URL, five second timeout; the run, the variables and the answers ride along, and your own JSON body with placeholders is merged in when you give one.
Edit, pin, thread, moveEdit a message the bot sent, pin the message, make a thread, move the person to a voice channel.
Give an itemInto the person's items list in the system ({user.var.items}).

Systems#

A system is a folder of modules that share a name, one switch and variables. Turning a system off turns off every module in it; deleting one asks first and takes its modules along. Each system also owns a secret webhook URL (on the dashboard, under Systems) that runs its A webhook is received modules, and an export: one JSON with the variables and every module, which another server imports on its dashboard or by replying to it with import this system. A system keeps up to fifteen modules; a server keeps up to ten systems and sixty modules.

Shared systems#

Press Publish on a system card to put it on the marketplace: a title, one sentence about what it does and a category. It is listed as shared by your server, under Shared by others on every module maker and on the public /modules/shared page, beside the nine systems that ship with the bot. Installing a copy asks for the places it needs, one by one: every channel, category and role the publisher's copy named becomes one question (the same channel asked once, a mention in a message text included), with a channel or role picker per question on the site and one question at a time by talking, so nothing installs pointing at another server. A message or an embed the publisher owned is dropped, and a post of their embed becomes a message that says so. Reports from three different servers hide a listing until staff look at it; staff can put it back, take it down, or ban the publisher, after which none of that server's systems are listed and it cannot publish again. An adult server's systems are never listed. By talking: what shared systems are there, install the shared system called Coffee shop, publish my shop system as Coffee shop: a points shop with a daily bonus, unpublish the shop system, report the shared system Coffee shop because it spams.

Reserved command words#

A custom A command is used trigger cannot take a word the moderation module answers itself (warn, kick, ban, timeout, mute, purge, lock, slowmode, history and their short forms), because the message would be answered twice. The builder and the bot both refuse it by name when you save, and the warn system that ships with the bot uses !strike for that reason. A custom command that shadows one of the bot's own real commands loses to the real one.

Variables#

Counters and lists the whole system shares, like points: 0 or signups: [], read anywhere as {var.points}, {var.signups} (a list of members reads as mentions) and {var.signups.count}. Per member variables are {user.var.points}, set with Set their variable and Add to their variable. A name can carry {message.id} or {user.id} for a counter per post or per member, which is how the suggestion box counts votes on each post. A counter nobody touched reads as 0. Set a variable from the dashboard, or say set the points variable to 0.

Drag and drop#

On the dashboard the builder has a palette on the left, Triggers, Conditions and Actions as cards with a search box, and a canvas that reads top to bottom as When, If, Then. Drag a card onto a zone, drag an action above or below another to reorder, drag a card back to the palette to remove it. Clicking a card adds it too, so it works with a keyboard and on a phone, and the line at the top reads the module back as you build it.

The nine full systems#

SystemWhat it does
Application systemAn Apply button opens a form; the answers land in a staff channel with Accept and Deny buttons that give a role and DM the person.
Order deskStaff type !postmenu for a product list with an Order button per item; each order asks for details, opens a ticket and lands with staff, who press Mark paid to give a Customer role.
Points shopA point per message with a cooldown, !points to check, !buy to spend points on a role.
Raid or event signupStaff type !raid: a post with Join and Leave buttons keeps the signup list, a reminder goes out before the time, and a roll call names everyone.
Suggestion boxA Suggest button opens a form; each suggestion is a post with Upvote and Downvote, one vote per person, and staff are pinged at the threshold.
Verification gateA Verify button asks two questions in a form; the right keyword gives the Verified role, and every attempt is logged.
Idea boardMembers post ideas as plain messages in a channel; each becomes a card with Upvote, Downvote and Approve buttons, and staff approve into another channel.
Warn system!strike @member reason DMs them, logs it and counts per member; the limit kicks (or times out, when you ask for that); !strikes and !clearstrikes go with it. !warn stays the moderation module's own command, which is why a custom command cannot take that word.
Daily rewardMembers type a word in a channel and get coins (or XP) once a day, counted by the calendar day, so a restart never gives a second one.

Each one asks its channels and roles up front, on the dashboard under Full systems or by saying make an application system, and installs as real modules you can open, change and take apart afterwards.

From the dashboard#

Dashboard, your server, Module maker. Three columns, Trigger, Conditions and Actions, each a set of cards with the fields for that kind and the channel, role and emoji pickers you know from the rest of the dashboard. The line at the top reads the module back to you as you build it.

  1. 1
    Templates. Seven ready-made modules: welcome DM and role, thanks means coins, level 10 means a role and a shout-out, a reaction hands out a role, a daily reminder, an invite link is deleted and the channel slowed, a ticket pings staff. Pick one, fill in the channel or role, save.
  2. 2
    Test. A dry run against a sample event. It says whether the module would fire, which condition stopped it if not, and lists the steps. Nothing is sent to Discord.
  3. 3
    Test run. On a module card: the module runs once against you, for real but harmless. The conditions are decided against your real roles, balance, level and variables; every message it would send, reply, post or DM is rendered for real and lands in your DM prefixed with where it would have gone, buttons included; everything else (a role, coins, a kick, a variable, a channel, a webhook) is written as "would ..." and not done, so no other member and no channel is touched. The row lands in the run log marked as a test. By talking: test my welcome gift module.
  4. 4
    Run log. The last 50 runs, newest first and refreshed every 15 seconds: when, who fired it, what fired it, each action that ran, and the action that failed and why when one did. The rest of the module still runs when one action is refused. Runs on a module card or a system card narrows the log to that module or that system.

From the site chat#

The dashboard's Talk to Dispresso chat holds the same conversation the bot holds in Discord, so every sentence on this page works there too. Three things it does for the module maker: the paperclip attaches a system export (or paste one into the box) and import this system reads it; when a question is about a channel, a category or a role, the chat draws a picker instead of a text box; and when a sentence made a module or a system, the chat offers Open in the maker.

Limits#

Sixty modules and ten systems per server, fifteen modules per system, ten actions and five conditions per module, 120 runs per module per minute and 600 per server per minute, thirty webhook calls per minute per system. A module never mentions everyone or a role by text, whatever is typed in it.