Skip to content

Message Builder

Save reusable messages with embeds or a Components V2 layout, give their buttons and menus actions, and post them.

The Message Builder saves messages as templates. A template is a whole Discord message: text and embeds, or a Components V2 layout, plus buttons and select menus that do something when a member uses them. You post it when it is ready, and other parts of Epix can send it for you: a reaction-role panel can use one as its body, an automation can reply with or send one, and Epix AI can create simple templates, post them and delete them when you ask.

Where to build

  • The dashboard: Message Builder, under General. This is the full editor, with a live preview drawn the way Discord draws the message. It needs Manage Server.
  • The /messageflow command: a builder inside Discord for people who already have message JSON, plus quick list, send, export and delete actions. It needs Administrator, and its own panel labels it experimental.

Creating a template on the dashboard

  1. 01
    Name it

    A name is unique within your server and up to 120 characters. The description, up to 1,000 characters, is for your staff; members never see it.

  2. 02
    Pick the message type

    Classic is content plus embeds, the way most messages are built. Components V2 builds the whole message from layout blocks and has no separate content or embeds. Discord refuses a message that mixes the two, so switching a template back to Classic discards its layout blocks, and the editor asks before it does.

  3. 03
    Add buttons and menus

    Every button and every menu option gets an action, described below. A link button just opens its URL and needs no action.

  4. 04
    Save, then send

    Save stores the template. Send asks which channel to post in. The Active switch beside the name controls whether the template can be sent at all.

Limits

PartLimit
Message content (Classic)2,000 characters
Embeds (Classic)5 per message. Title 256, description 4,096, field name 256 and field value 1,024 characters
Buttons (Classic)5, in one row
Select menus (Classic)Up to 5, with up to 25 options each. Discord allows five rows per message: the button row counts as one, and each menu takes a row of its own
Top-level blocks (Components V2)10
Components in one message40 in total, counting the text inside sections
Gallery1 to 10 images
Button label80 characters
Reply text4,000 characters

Components V2 blocks

BlockWhat it is
TextA paragraph. Markdown works, including # headings, which is how a Components V2 message gets a title.
SectionText with a thumbnail image or a button beside it.
DividerA small or large gap, with or without a line.
GalleryUp to 10 images in a grid. Every image needs a URL.
ButtonsA row of up to 5 buttons, or a single select menu.
ContainerGroups other blocks behind a colored accent bar. A container cannot hold another container, or a bare button or menu outside a Buttons row.

A thumbnail only exists as a section's image; for a picture on its own, use a gallery. In a Components V2 template the buttons live inside the layout, in a Buttons block, so the separate button and menu lists of a Classic template are not shown.

What a button or menu option does

ActionWhen a member uses it
Reply with textEpix replies with your text, up to 4,000 characters.
Reply with templateEpix replies with another saved template.
Give a roleAdds the role. Using it again does nothing.
Remove a roleTakes the role away. Using it again does nothing.
Toggle a roleAdds the role, or removes it if the member already has it.

The reply goes only to the member who clicked, so a busy panel does not fill the channel. In a select menu every option has its own action, so one menu can hand out several different roles.

  • Role actions need Epix to have Manage Roles, with its own top role above the role being handed out; otherwise the click is refused.
  • Epix never hands out a role that carries Administrator, Manage Server, Manage Roles or Manage Webhooks. If a role gains one of those after the button was built, the button stops granting it.
  • A reset option clears a member's choice in a menu without doing anything else. Discord remembers the option a member last picked, so without one, picking the same option twice does not register as a fresh choice. A menu can have one reset option, and it needs no action.
  • The editor also offers Custom handler. It runs a handler built into Epix by its key, and none are available to configure today, so a control set to it replies that no handler is registered.

Variables

Variables are replaced when the message is sent or the reply is given. They work in text and in image URLs, so {guild.avatar} can be a thumbnail.

VariableBecomes
{guild.name}The server's name
{guild.avatar}The server icon's URL
{guild.banner}The server banner's URL, empty if the server has none
{member.name}The member's server nickname, or their name
{member.avatar}The member's avatar URL
{member.banner}The member's banner URL
{date.now.unix}The current time in seconds since 1970
{date.now.iso}The current time as an ISO 8601 timestamp
{date.now}The current time in milliseconds since 1970

The member variables describe the member who triggered the message: the one who clicked, or the one who ran /messageflow send. A template posted from the dashboard has no such member, so in that message they come out empty. To show a readable time, wrap {date.now.unix} in Discord's timestamp markup.

Last updated <t:{date.now.unix}:f>
Discord draws this as a date and time in each reader's own time zone.

Sending and updating

  • Send on the dashboard checks that Epix can post in the channel before anything is sent.
  • Sending again to the same channel edits the message already there instead of posting a second copy, so there is only one live message per template in a channel. If that message was deleted, a new one is posted.
  • /messageflow send posts a one-off copy in the channel where you run it. That copy is not the one the dashboard later edits.
  • Deleting a template does not delete messages already posted from it; they stay in the channel. A button elsewhere that replies with the deleted template stops being able to send it.

The /messageflow command

/messageflow
/messageflow action:builder
/messageflow action:edit template_id:<id>
/messageflow action:list
/messageflow action:send template_id:<id>
/messageflow action:export template_id:<id>
/messageflow action:delete template_id:<id>
Without an action, a panel offers Create, Edit and List.

The builder is a panel that stays open for ten minutes and answers only the person who opened it. Set Meta takes name | type | description, where type is NORMAL or COMPONENTS_V2. Import JSON accepts Components V2 or embed JSON, pasted or attached as a .txt or .json file, or taken from a message you reply to when running the command. Configure Actions walks through every control that still needs an action, Preview posts a private copy, and Save Template refuses while anything is invalid or pending. List shows up to 25 templates; Export sends one as a JSON file.

Free and Premium

Templates, every block type, all five actions and sending are free. Time-limited role grants are Premium: in the /messageflow builder, a server with Premium is asked how long a Give or Toggle role should last, from 1 minute to 90 days (30m, 2h, 3d, 1w), or - for permanent.

Granting roles by reaction

A reaction is added to a posted message rather than being part of it, so it is not built here. Create a reaction-role panel, point it at your template, and add a role with Reaction as its trigger; the panel posts the template's body with its own controls and adds the emoji.

Troubleshooting

  • Send says some components are not wired: a button or option has no action. Give it one, or remove it.
  • A Reply with template button says the target template was not found or is inactive: that template was deleted or its Active switch is off. Pick another, or switch it back on.
  • A role button does nothing: check that Epix has Manage Roles, that its top role is above the role, and that the role carries none of the four permissions Epix will not hand out.
  • An image shows as a placeholder in the preview: the variable has nothing to point at, for example {guild.banner} in a server without a banner.
  • The bot cannot post in the selected channel: give Epix permission to send messages there.