This is the full developer documentation for April Bot Help Docs # Welcome April Bot helps Discord communities manage onboarding, roles, moderation, images, levels, and marketplace content from a web dashboard. Use these docs when you want to configure April from the dashboard, build member-facing messages, or troubleshoot a permission issue. ## Start here [Section titled “Start here”](#start-here) 1. [Invite April](invite/) to your Discord server. 2. [Log in](login/) with Discord. 3. [Select a server](select-guild/) from the dashboard. 4. Open the feature you want to configure from the user sidebar or server sidebar. 5. Save the form, then test with a normal member account when the feature affects Discord behavior. ![Dashboard preview](/assets/images/dashboard-preview.webp) ## Choose a guide [Section titled “Choose a guide”](#choose-a-guide) * To greet or say goodbye to members, start with [Welcome messages](administration/welcome/) or [Leaver messages](administration/leaver/). * To assign roles automatically or on demand, use [Autorole](administration/autorole/), [Self role](administration/selfrole/), or [Reaction roles](administration/reactionrole/). * To moderate messages, configure [Protection overview](protection/standalone/) and [Automated actions](protection/automated-actions/). * To build reusable Discord messages, use [Create embed messages](create-embed-message/) and [Formatting variables](formatting/). * To design images, use [Create an image](editor/create-an-image/), [Projects](editor/projects/), and the [Editor workspace](editor/workspace/). ## Keep in mind [Section titled “Keep in mind”](#keep-in-mind) The dashboard only shows and saves what your Discord permissions and April’s server permissions allow. If a page looks empty, a role is missing, or a save fails, check [Hierarchy](errors/hierarchy/) before changing the configuration again. ## Machine-readable docs [Section titled “Machine-readable docs”](#machine-readable-docs) AI tools can start from [llms.txt](/llms.txt), use [llms-full.txt](/llms-full.txt) for the complete help docs, or use [llms-small.txt](/llms-small.txt) when they need a shorter context. # Invite April Invite April when you own or manage a Discord server and want to configure it from the dashboard. ## Invite the bot [Section titled “Invite the bot”](#invite-the-bot) 1. Sign in to Discord in the same browser. 2. Open the April invite link: [Invite April](https://discord.com/oauth2/authorize?client_id=321046928391667712\&scope=bot+applications.commands\&permissions=2146958463). 3. Choose the server. 4. Review the requested permissions. 5. Complete Discord authorization and any verification challenge. Use the official invite link above instead of old short links. Old links may point at retired permissions or old OAuth screens. ## After inviting [Section titled “After inviting”](#after-inviting) 1. Open [the dashboard](../login/) and select the server. 2. Keep April’s role above roles it needs to assign, remove, or moderate. 3. Configure the first feature you need, such as [Welcome messages](../administration/welcome/) or [Autorole](../administration/autorole/). 4. Test the feature from Discord with a non-admin account. If the server still asks you to invite April, refresh the dashboard after Discord finishes the authorization flow. ## Required access [Section titled “Required access”](#required-access) You need Discord permission to add applications to the server. If the server is missing from Discord’s invite screen, ask an owner or administrator to invite April. Do not remove permissions from the invite unless you know the feature does not need them. Missing permissions usually show up later as failed role assignment, failed moderation actions, or messages that cannot be sent. # Login Log in with Discord to access your user dashboard, server settings, saved images, credits, marketplace tools, and billing. ![Dashboard after login](/assets/images/login-success.webp) ## How login works [Section titled “How login works”](#how-login-works) 1. Open [April Bot](https://aprilbot.me). 2. Use the user menu in the top navigation to start Discord login. 3. Authorize April to read your basic Discord identity and server list. 4. Return to the dashboard and choose the server or user tool you need. April uses Discord OAuth so the dashboard can identify you and list servers you can manage. April does not need your Discord password. ## If login opens the wrong account [Section titled “If login opens the wrong account”](#if-login-opens-the-wrong-account) 1. Sign out of Discord in the same browser. 2. Open April again and start login from the top navigation. 3. Confirm the Discord username on the OAuth screen before authorizing. ## If you return to an empty dashboard [Section titled “If you return to an empty dashboard”](#if-you-return-to-an-empty-dashboard) Open [Select a server](../select-guild/) and refresh the server list. If the server is still missing, make sure your Discord account has permission to manage that server. Note If Discord opens on the wrong account, sign out of Discord in the browser first, then start login again from April. # Select a server The server selector is the first dashboard page after login. It lists servers that Discord reports for your account and marks which ones can be configured. ![Select server](/assets/images/dashboard-select-guild.webp) ## Choose a server [Section titled “Choose a server”](#choose-a-server) 1. Open [the dashboard](https://aprilbot.me/dashboard). 2. Search for the server name. 3. Pick a server card. 4. If April is already in the server, the dashboard opens the server overview. 5. If April is missing, use the invite action on the card. 6. Wait for the server sidebar to appear before opening a feature page. ## If a server is missing [Section titled “If a server is missing”](#if-a-server-is-missing) * Confirm that you are logged in to the correct Discord account. * Confirm that your Discord role can manage the server. * Refresh the page after changing Discord permissions. * Ask a server owner to raise your role if Discord shows the server but April does not let you configure it. * Use the canonical [invite link](https://discord.com/oauth2/authorize?client_id=321046928391667712\&scope=bot+applications.commands\&permissions=2146958463) if the dashboard invite action is not enough. # Dashboard overview The dashboard is split into user tools and server tools. ![Server dashboard overview](/assets/images/dashboard-guild-overview.webp) ## User tools [Section titled “User tools”](#user-tools) Use the user sidebar for account-wide features: * Images and projects * Rank card selection * Marketplace product management * Credits and transactions * Billing Open these pages when the change follows your April account across servers. ## Server tools [Section titled “Server tools”](#server-tools) After selecting a server, use the server sidebar for guild-specific configuration: * Administration features such as welcome, leaver, autorole, self role, custom commands, reaction roles, and embeds * Protection and moderation logs * Server analytics * Twitch and YouTube stream monitors * Levels & XP * Settings, Premium, and reports Open these pages when the change should affect only the selected Discord server. ## Save behavior [Section titled “Save behavior”](#save-behavior) Most pages save from a form or action button. If a save fails, the dashboard shows a user-safe error. Before retrying, check: * Required fields such as channel, role, message, or name. * Whether April can view and send messages in the selected channel. * Whether April’s role is above the role it needs to assign, remove, or moderate. * Whether your own Discord account has permission to manage the server feature. # Formatting variables Formatting variables let April insert Discord values into messages, embeds, image URLs, and supported editor fields. ## Legacy message variables [Section titled “Legacy message variables”](#legacy-message-variables) Welcome, leaver, logs, protection messages, custom commands, managed embeds, stream monitors, and levels use single-brace variables when the message editor exposes variable buttons. Example: ```txt Welcome {user.mention} to {guild}. You are member {memberCount.ordinal}. ``` Different pages expose different data. If a variable is not available for that feature, April leaves it unchanged or replaces it with a fallback value. ## Common user variables [Section titled “Common user variables”](#common-user-variables) | Variable | Meaning | | ----------------------- | -------------------------------------------------- | | `{user}` | Username | | `{user.mention}` | Discord user mention | | `{user.status.color}` | Hex color for the user’s current status | | `{user.discriminator}` | Discord discriminator when available | | `{user.avatar}` | User avatar URL | | `{user.avatar.rounded}` | User avatar URL for image templates | | `{user.fullname}` | Full display name value available to the formatter | | `{user.id}` | Discord user ID | | `{user.created}` | Full user creation date | | `{user.created.date}` | User creation date | | `{user.created.ago}` | Relative user creation time | | `{user.created.time}` | User creation time | | `{user.joined}` | Full server join date | | `{user.joined.date}` | Server join date | | `{user.joined.ago}` | Relative server join time | | `{user.joined.time}` | Server join time | ## Guild and channel variables [Section titled “Guild and channel variables”](#guild-and-channel-variables) | Variable | Meaning | | ------------------------ | ---------------------------------- | | `{guild}` | Server name | | `{memberCount}` | Approximate member count | | `{memberCount.ordinal}` | Member count as an ordinal value | | `{guild.id}` | Discord server ID | | `{guild.created.ago}` | Relative server creation time | | `{guild.created.date}` | Server creation date | | `{guild.created.time}` | Server creation time | | `{guild.icon}` | Server icon URL | | `{channel}` | Channel name | | `{channel.id}` | Discord channel ID | | `{channel.mention}` | Discord channel mention | | `{channel.created}` | Full channel creation date | | `{channel.created.date}` | Channel creation date | | `{channel.created.time}` | Channel creation time | | `{channel.created.ago}` | Relative channel creation time | | `{channel.nsfw}` | Whether the channel is marked NSFW | | `{channel.topic}` | Channel topic | ## Level variables [Section titled “Level variables”](#level-variables) Use these in level-up messages, rank-card designs, and level-related templates where the page offers them. | Variable | Meaning | | ------------------ | ---------------------------------- | | `{user.level}` | User level in the server | | `{user.xp}` | XP in the current level | | `{user.xpRatio}` | Current-level progress from 0 to 1 | | `{user.nextLevel}` | XP required for the next level | | `{user.totalXp}` | Total accumulated XP | ## Log variables [Section titled “Log variables”](#log-variables) Log events can expose before/after values when Discord sends both states. | Variable | Meaning | | ------------------------ | ------------------------ | | `{before.user}` | Previous username | | `{before.user.nickname}` | Previous server nickname | | `{before.user.avatar}` | Previous avatar URL | | `{before.user.fullname}` | Previous full user value | | `{after.user}` | Updated username | | `{after.user.nickname}` | Updated server nickname | | `{after.user.avatar}` | Updated avatar URL | | `{after.user.fullname}` | Updated full user value | | `{before.channel}` | Previous channel name | | `{before.channel.id}` | Previous channel ID | | `{before.channel.nsfw}` | Previous NSFW state | | `{before.channel.topic}` | Previous channel topic | | `{after.channel}` | Updated channel name | | `{after.channel.id}` | Updated channel ID | | `{after.channel.nsfw}` | Updated NSFW state | | `{after.channel.topic}` | Updated channel topic | Some log events also add event-specific values such as message content or changed roles. Use the variable buttons shown on that event’s configuration page. ## Stream monitor variables [Section titled “Stream monitor variables”](#stream-monitor-variables) Twitch notifications can use: | Variable | Meaning | | ---------------------- | -------------------------- | | `{stream.channel}` | Streamer display name | | `{stream.avatarUrl}` | Streamer avatar URL | | `{stream.url}` | Twitch channel URL | | `{stream.viewerCount}` | Viewer count | | `{stream.started.ago}` | Relative stream start time | | `{stream.type}` | Stream type | | `{stream.length}` | Stream duration | | `{stream.title}` | Stream title | | `{stream.preview}` | Stream thumbnail URL | | `{stream.game}` | Game or category | YouTube notifications can use `{stream.channel.name}`, `{stream.channel}`, `{stream.url}`, `{stream.started.ago}`, and `{stream.title}`. ## Random values [Section titled “Random values”](#random-values) Custom commands and other legacy message templates can use random number variables: ```txt {random} {random.1-100} ``` `{random}` returns a value from 0 to 10. `{random.1-100}` returns a value in the configured range. ## Editor workspace variables [Section titled “Editor workspace variables”](#editor-workspace-variables) Editor V2 bindings use Liquid-style output syntax instead: | Variable | Example use | | --------------- | ---------------------------------- | | `{{ user }}` | Render the selected user into text | | `{{ guild }}` | Render the server name into text | | `{{ channel }}` | Render a channel value into text | Editor V2 bindings are configured from the workspace inspector. Single-brace values such as `{user}` are not valid in Editor V2 bindings. ## URL values [Section titled “URL values”](#url-values) Image and icon variables must resolve to valid URLs. For example, `{user.avatar}`, `{guild.icon}`, and `{stream.preview}` are suitable for image URL fields when the feature supports them. # Billing Billing covers account-level and server-level purchase flows that are available from the dashboard. ## Open billing [Section titled “Open billing”](#open-billing) 1. Log in to April. 2. Open **Billing** from the user sidebar for account billing. 3. Open **Premium** from a selected server when the purchase should affect that server. 4. Follow the hosted checkout flow. 5. Return to April and refresh if the dashboard has not updated. ## Premium plans [Section titled “Premium plans”](#premium-plans) Premium is server-oriented when it unlocks server features or higher limits. Make sure the correct Discord server is selected before starting a server Premium checkout. ## Credit packs [Section titled “Credit packs”](#credit-packs) One-time credit packs are managed from [Credits](../credits/). Use [Transactions](../transactions/) to confirm the credit addition after checkout. ## If checkout does not update [Section titled “If checkout does not update”](#if-checkout-does-not-update) Wait a few minutes, refresh the dashboard, and check whether your browser blocked the return from the hosted checkout page. Contact support with the purchase time and the account or server you expected it to apply to. # Credits Credits are used for April account features such as marketplace purchases and paid account actions. ![Credits dashboard](/assets/images/account-credit-dashboard.webp) ## Earn credits [Section titled “Earn credits”](#earn-credits) 1. Open **Credits** from the user sidebar. 2. Claim the daily reward when it is available. 3. Vote for April from the listed bot-list buttons when you want extra credits. 4. Check milestone progress to see how many claims or votes remain before the next bonus. Daily rewards reset on a 24-hour cycle. Vote rewards depend on the external bot-list site confirming the vote. ## Read the dashboard [Section titled “Read the dashboard”](#read-the-dashboard) * **Credit** shows your available balance. * **Streak calendar** shows daily claim history. * **Earn credit** contains daily and vote actions. * **Milestone progress** shows longer-term bonuses. * **Recent activity** lists credit changes. * **Buy credits** shows one-time credit packs when purchases are available. ## Buying credit packs [Section titled “Buying credit packs”](#buying-credit-packs) Choose a pack, complete checkout, then return to April. If the balance does not update immediately, refresh the page and check [Transactions](../transactions/). # Transactions Transactions show account credit changes such as daily rewards, vote rewards, purchases, and marketplace activity. ## Review transactions [Section titled “Review transactions”](#review-transactions) 1. Open **Transactions** from the user sidebar. 2. Use the list to check the date, description, net change, and resulting total. 3. Compare the latest transaction with the balance shown on [Credits](../credits/). ## When to use this page [Section titled “When to use this page”](#when-to-use-this-page) * Confirm that a daily claim was recorded. * Check whether a vote reward arrived. * Verify that a credit pack was added after checkout. * Review marketplace credit activity. If a transaction is missing after a few minutes, refresh the page before contacting support. # Analytics Analytics show server activity trends that help staff understand member joins, leaves, and level activity. ## View analytics [Section titled “View analytics”](#view-analytics) 1. Select your server. 2. Open **Analytics** from the server sidebar. 3. Choose the available view, such as join analytics or join history. 4. Review the chart or table for unusual spikes. ## How to use the data [Section titled “How to use the data”](#how-to-use-the-data) * Compare welcome and leaver activity after a campaign or server event. * Check whether a sudden join spike matches moderation or invite activity. * Use level and leaderboard pages for member activity details. Analytics are read-only. Change the related feature settings from the administration or levels pages. # Public leaderboard The public leaderboard shows server XP rankings and level reward information. ## Open a leaderboard [Section titled “Open a leaderboard”](#open-a-leaderboard) 1. Select your server. 2. Open **Levels & XP**. 3. Use the leaderboard view or public leaderboard link. 4. Search or page through ranked members. ## Staff tools [Section titled “Staff tools”](#staff-tools) When your account has permission, the leaderboard can expose editing tools for user XP and cleanup actions. Use these carefully and document staff adjustments when they affect rewards. ## If members are missing [Section titled “If members are missing”](#if-members-are-missing) Members appear after they earn XP. Check that levels are enabled, the channel is not excluded, and the member is not excluded by role permissions. # Levels & XP Levels & XP rewards members for activity and can announce level-ups, assign role rewards, and power rank cards. ## Configure levels [Section titled “Configure levels”](#configure-levels) 1. Select your server. 2. Open **Levels & XP**. 3. Enable the level system. 4. Configure XP gain settings, including timeout and multiplier. 5. Exclude roles or channels that should not earn XP. 6. Configure the level-up message. 7. Add role rewards for important levels. 8. Choose server rank-card designs if you want a custom look. 9. Save and test with `/rank`. ## Level-up messages [Section titled “Level-up messages”](#level-up-messages) Level-up messages can post in a channel or as a private message. Use random messages when you want variety, and use [formatting variables](../../formatting/) for values such as `{user.level}` and `{user.nextLevel}`. ## Rank cards [Section titled “Rank cards”](#rank-cards) Members can choose personal rank cards from [Rank cards](../rank-card/). Server settings can also force or suggest rank-card designs for the server. ## Moderation [Section titled “Moderation”](#moderation) Use the leaderboard tools to adjust a user’s level when staff need to correct XP. Keep staff-only channels excluded if activity there should not affect public rankings. # Rank cards Rank cards show a member’s level, XP, and progress when they use the rank command. ## Choose a rank card [Section titled “Choose a rank card”](#choose-a-rank-card) 1. Open **Rank card** from the user sidebar. 2. Select the server whose rank card you want to customize. 3. Choose a saved image or project design when available. 4. Save the selection. 5. Use `/rank` in Discord to preview the result. ## Create a custom card [Section titled “Create a custom card”](#create-a-custom-card) Use [Projects](../../editor/projects/) or [Create an image](../../editor/create-an-image/) to build a design, then return to the rank-card selector. Designs can use level-related variables such as `{{ user }}` in Editor V2 bindings or legacy level variables where supported. ## Fallback behavior [Section titled “Fallback behavior”](#fallback-behavior) If a selected design cannot render, April falls back to a default rank card so the command can still respond. # Autorole Autorole assigns a configured Discord role when a member joins, starts streaming, or joins a configured voice channel. ## Create an autorole [Section titled “Create an autorole”](#create-an-autorole) 1. Select your server in the dashboard. 2. Open **Administration > Autorole**. 3. Create a new autorole entry. 4. Choose the role April should assign. 5. Choose the trigger: member join, streaming, or voice. 6. If the trigger is streaming or voice, select the required channel. 7. Configure allowed roles or ignored roles when only some members should receive the role. 8. Save the entry and leave it enabled. ## Auto remove [Section titled “Auto remove”](#auto-remove) Use auto remove when the role should only exist while the trigger is true, such as a streaming or voice-channel role. Leave it off for normal join roles that should stay on the member. ## Permission checks [Section titled “Permission checks”](#permission-checks) April can only assign roles below its highest role. If a role cannot be selected or assignment fails, move April’s role higher than the managed role in Discord and try again. See [Hierarchy](../../errors/hierarchy/) for details. # Custom commands Custom commands let members run server-specific text commands that reply with configured messages or send messages to another channel. ## Create a command [Section titled “Create a command”](#create-a-command) 1. Open **Administration > Custom commands**. 2. Create a new command. 3. Enter a command name. April automatically normalizes unsupported characters. 4. Add a short description for the public command list. 5. Add aliases if members should be able to use more than one trigger. 6. Add one or more actions. 7. Configure role and channel permissions. 8. Save and test using the current server prefix. ## Actions [Section titled “Actions”](#actions) * **Reply with message** replies where the command was used. You can also make the reply private when the action supports it. * **Send message** posts to a selected channel. This action requires a channel. Each action can include Discord message content, embeds, and supported [formatting variables](../../formatting/). Use random messages when you want April to pick one response from a list. ## Prefix and visibility [Section titled “Prefix and visibility”](#prefix-and-visibility) Custom commands use the server prefix shown in the dashboard. You can hide a command from the public list while keeping it usable by members who know the trigger. # Leaver messages Leaver messages announce when a member leaves the server. ## Create a leaver [Section titled “Create a leaver”](#create-a-leaver) 1. Open **Administration > Leaver**. 2. Start the leaver setup if the server does not have one yet. 3. Select the channel where April should post goodbye messages. 4. Choose one or more saved images if you want April to attach a design. 5. Customize the message content and embeds. 6. Save the setup. 7. Run `/leaver test` in Discord to verify the result. ## Configure messages [Section titled “Configure messages”](#configure-messages) Leaver supports the same guild-message tools as welcomer: * Enable or disable the guild message. * Attach selected images. * Randomly choose from multiple messages. * Force images to send as Discord attachments. * Ignore bots so bot departures do not create noise. ## Avoid noisy channels [Section titled “Avoid noisy channels”](#avoid-noisy-channels) Leaver messages work best in staff, log, or low-traffic announcement channels. Public leaver channels can make normal member churn more visible than intended. ## Variables [Section titled “Variables”](#variables) Use `{user}`, `{guild}`, and other legacy message variables from the picker. See [Formatting variables](../../formatting/) before adding more advanced variables. # Logs Logs send Discord activity events to channels you choose, so staff can review important changes after they happen. ## Configure a log event [Section titled “Configure a log event”](#configure-a-log-event) 1. Open **Administration > Log**. 2. Select the event you want to configure. 3. Enable the event. 4. Choose the default log channel. 5. Add or edit the message templates. 6. Add ignored channels or ignored roles if the event is too noisy. 7. Save and test by triggering the event in Discord. ## Use separate channels [Section titled “Use separate channels”](#use-separate-channels) Some events are high volume. Redirect noisy events to separate staff channels so moderation logs stay readable. For example, send deleted-message logs to a moderation channel and role-change logs to an audit channel. ## Message templates [Section titled “Message templates”](#message-templates) Log messages can use plain content, embeds, and event variables. Before/after variables are only useful on events that include both states. See [Formatting variables](../../formatting/) for the log variable reference. ## Ignore bots [Section titled “Ignore bots”](#ignore-bots) Enable ignore-bot behavior when bot updates generate too many entries. Leave it off when you need to audit bot actions too. # Managed embeds Managed embeds are reusable dashboard-managed Discord messages. Use them for rules, information panels, menus, announcements, or reaction-role messages you want to edit later. ## Create a managed embed [Section titled “Create a managed embed”](#create-a-managed-embed) 1. Open **Administration > Managed embeds**. 2. Create a new embed. 3. Give it a short internal name. 4. Choose the channel where April should publish it. 5. Build the message content, embed, and optional images. 6. Save as a draft or publish it. ## Edit an existing embed [Section titled “Edit an existing embed”](#edit-an-existing-embed) Open the managed embed from the list, update the message, then save. If the embed has already been published and still points at a Discord message, April updates that managed message instead of asking you to post a new one. ## Use with reaction roles [Section titled “Use with reaction roles”](#use-with-reaction-roles) Reaction roles can target a managed embed. This is useful when you want April to own both the message content and the reactions attached to it. ## Requirements [Section titled “Requirements”](#requirements) A managed embed must contain either message content, an embed, or selected images. April also needs permission to send messages and embed links in the selected channel. # Reaction roles Reaction roles assign or remove roles when members react to a Discord message. ## Create a reaction role [Section titled “Create a reaction role”](#create-a-reaction-role) 1. Open **Administration > Reaction Role**. 2. Choose whether to use a managed embed, a new message, or an existing Discord message. 3. Select the channel and message ID when using an existing message. 4. Add one or more emoji entries. 5. Choose the roles each emoji should assign. 6. Configure whether members can remove the role by unreacting. 7. Set pick limits, thresholds, end time, and DM behavior if needed. 8. Save and test from Discord with a normal member account. ## Existing messages [Section titled “Existing messages”](#existing-messages) For existing Discord messages, enable Developer Mode in Discord and copy the message ID and channel ID. April needs access to the channel and permission to manage reactions. ## Limits and permissions [Section titled “Limits and permissions”](#limits-and-permissions) Reaction-role entries can contain multiple emoji mappings, but each message should stay small enough for members to understand. Keep April’s role above every assignable role and avoid using reaction roles for staff permissions. # Self role Self role lets members opt in or out of roles without staff manually assigning them. ## Create a self role [Section titled “Create a self role”](#create-a-self-role) 1. Open **Administration > Selfrole**. 2. Create a self-role entry. 3. Choose the Discord role members can claim. 4. Keep the entry enabled. 5. Add ignored channels if the role should not be claimable everywhere. 6. Save and test with a non-admin account. ## Good self-role design [Section titled “Good self-role design”](#good-self-role-design) Use self roles for notification groups, interest tags, region roles, event access, or cosmetic labels. Avoid roles that grant moderation permissions or access to private staff channels. ## If members cannot claim the role [Section titled “If members cannot claim the role”](#if-members-cannot-claim-the-role) Check that April’s role is above the self role, the self-role entry is enabled, and the channel is not in the ignored-channel list. # Server management The server sidebar includes management pages that do not fit into one feature module but still affect server setup. ## Settings [Section titled “Settings”](#settings) Use **Settings** to update server-level options such as the command prefix. Save changes before testing legacy custom commands in Discord. ## Emoji [Section titled “Emoji”](#emoji) Use **Management > Emoji** when you need to manage server emoji from the dashboard. April needs the matching Discord permission before it can change server emoji. ## Premium [Section titled “Premium”](#premium) Use **Get premium** or **Premium** from the server sidebar to review server-level Premium status and feature limits. ## Report [Section titled “Report”](#report) Use **Report** to contact April support about the selected server. Include the feature name, what you expected, what happened, and whether the issue affects one channel or the whole server. # Stream monitors Stream monitors announce Twitch and YouTube activity in Discord. ## Create a monitor [Section titled “Create a monitor”](#create-a-monitor) 1. Open **Twitch** or **YouTube** from the server sidebar. 2. Create a monitor. 3. Search for the streamer or channel. 4. Enable the monitor. 5. Configure one or more notifications. 6. Choose the channel where each notification should be sent. 7. Save and wait for the next live, offline, or upload event. ## Notification types [Section titled “Notification types”](#notification-types) Twitch monitors can announce live, offline, and update-style events. YouTube monitors can announce uploads. Each notification has its own enabled state, channel, and messages. ## Message templates [Section titled “Message templates”](#message-templates) Use templates to include stream details such as title, URL, thumbnail, and viewer count. Twitch supports variables like `{stream.title}`, `{stream.url}`, `{stream.preview}`, and `{stream.viewerCount}`. YouTube supports variables like `{stream.title}`, `{stream.url}`, and `{stream.channel.name}`. See [Formatting variables](../../formatting/) for the full stream variable list. # Welcome messages Welcome messages greet new members in a server channel, by private message, or with generated images. ## Create a welcomer [Section titled “Create a welcomer”](#create-a-welcomer) 1. Open **Administration > Welcomer**. 2. Start the welcomer setup if the server does not have one yet. 3. Select the channel for the public server message. 4. Choose one or more saved images if you want April to attach a welcome design. 5. Customize the message content and embeds. 6. Save the setup. 7. Run `/welcome test` in Discord to verify the result. ## Configure messages [Section titled “Configure messages”](#configure-messages) The welcomer has separate sections for: * **Guild message**: sends in the selected server channel. * **Private message**: sends a DM to the joining member. * **Image**: attaches one of your saved designs. * **Random**: randomly selects one message from the configured list. * **Force attachment**: sends the generated image as a Discord attachment instead of inside the embed. Private messages can fail when a member blocks server DMs. Keep the public guild message enabled when the welcome flow is important. ## Images [Section titled “Images”](#images) Create reusable designs from [Images](../../editor/create-an-image/) or [Projects](../../editor/projects/), then select them in the welcomer form. If you select multiple designs, April can rotate between them. ## Variables [Section titled “Variables”](#variables) Use the variable controls shown by the message editor. Welcome messages commonly use `{user}`, `{user.mention}`, `{guild}`, `{memberCount}`, and `{memberCount.ordinal}`. See [Formatting variables](../../formatting/) for the full reference. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) * If nothing sends, check that the guild message is enabled and has a text channel selected. * If the image is missing, make sure image sending is enabled and at least one design is selected. * If mentions do not render as expected, insert them from the message editor picker. # Change prefix April still supports a server command prefix for legacy text-command flows. Slash commands and dashboard configuration do not need the prefix. ## Change the prefix [Section titled “Change the prefix”](#change-the-prefix) 1. Log in to the dashboard. 2. Select the server. 3. Open **Settings**. 4. Edit the **Prefix** row. 5. Save the new value. 6. Test a custom command in Discord. ## Good prefix choices [Section titled “Good prefix choices”](#good-prefix-choices) * Keep the prefix short. * Avoid prefixes used by other bots in the same server. * Avoid normal words that members may type by accident. You can mention April in Discord when you are not sure what prefix a server is using. ## What the prefix affects [Section titled “What the prefix affects”](#what-the-prefix-affects) The prefix is mainly used by legacy message-based flows, including custom commands and some level-message behavior. Slash commands continue to use Discord’s `/` command interface. If a custom command stops responding, check that members are using the current prefix and that April can read messages in that channel. # Create embed messages April uses the same message composer across welcome messages, leaver messages, reaction role messages, protection notifications, stream monitor notifications, levels, and managed embeds. ## Message parts [Section titled “Message parts”](#message-parts) * **Content** is the plain Discord message text above the embed. * **Embeds** are rich Discord message blocks with author, title, description, fields, image, thumbnail, footer, timestamp, and color. * **Preview** shows how the message is expected to appear before saving. ## Recommended workflow [Section titled “Recommended workflow”](#recommended-workflow) 1. Write the plain message first. 2. Add an embed only when the message benefits from structure or an image. 3. Keep titles and descriptions short enough for mobile Discord. 4. Use [formatting variables](../formatting/) only where that feature supports them. 5. Preview before saving. ## Image URLs [Section titled “Image URLs”](#image-urls) Use a direct image URL for embed image and thumbnail fields. A webpage URL will not render as an image. For welcome, leaver, level, and stream monitor messages, use the variable picker when the image should come from April data, such as `{user.avatar}` or `{stream.preview}`. ## Common mistakes [Section titled “Common mistakes”](#common-mistakes) * Empty messages cannot be saved when a feature requires content or an image. * Private-message embeds may fail when a Discord user blocks server DMs. * Role, channel, and user mentions should be inserted from the message editor picker when available. Caution Discord has message and embed length limits. If a save fails, reduce content length or remove extra fields before retrying. # Create an image Images are reusable designs for welcome messages, leaver messages, rank cards, marketplace products, and other visual features. ![Projects list](/assets/images/editor-preview.webp) ## Create from the dashboard [Section titled “Create from the dashboard”](#create-from-the-dashboard) 1. Open **Images** or **Projects** from the user sidebar. 2. Create a new design or project. 3. Choose a useful size for the target feature. 4. Add text, shapes, images, or marketplace items. 5. Save the design. 6. Return to the feature page that should use it, such as [Welcome messages](../../administration/welcome/) or [Rank cards](../../activity/rank-card/). ## Choosing dimensions [Section titled “Choosing dimensions”](#choosing-dimensions) Use a wide layout for welcome and leaver images. Use a rank-card layout for rank cards. Avoid extremely large images; they take longer to render and may be harder to read in Discord. ## Next steps [Section titled “Next steps”](#next-steps) * Use [custom backgrounds](../use-custom-background/) when the design should start from an uploaded image. * Use [Editor workspace](../workspace/) for layer, binding, and save behavior. * Use [Marketplace](../../marketplace/browse/) when you want to start from an existing template. # Projects Projects organize Editor V2 designs and make it easier to manage reusable image work. ## Use projects for [Section titled “Use projects for”](#use-projects-for) * Rank card designs * Welcome and leaver templates * Marketplace-ready designs * Designs that use Editor V2 bindings ## Create a project [Section titled “Create a project”](#create-a-project) 1. Open **Projects** from the user sidebar. 2. Select **New**. 3. Name the project. 4. Add or create designs inside it. 5. Open a design to edit it in the workspace. ## Organize designs [Section titled “Organize designs”](#organize-designs) Use clear project names, such as `Welcome images`, `Rank cards`, or a marketplace product name. Delete unused test designs when they are no longer needed. Note Projects may be visible only in environments where the current editor workflow is enabled. # Use custom backgrounds Custom backgrounds let you start an image design from an uploaded image or marketplace asset. ## Add a background [Section titled “Add a background”](#add-a-background) 1. Open the design in the editor. 2. Open the background or image panel. 3. Upload or choose the image you want to use. 4. Set it as the background or place it as an image layer. 5. Resize or crop it so important content stays visible. 6. Save the design. ## Remove or replace a background [Section titled “Remove or replace a background”](#remove-or-replace-a-background) Select the background layer or image layer, then remove it or choose a new image. Save after replacing the background so feature pages use the latest version. ## Good background choices [Section titled “Good background choices”](#good-background-choices) * Use high-contrast images when text will sit on top. * Leave empty space for dynamic values such as usernames. * Avoid images with private information, small text, or busy patterns. # Editor workspace The editor workspace is where you build and save visual designs. ## Main areas [Section titled “Main areas”](#main-areas) * **Canvas**: the design surface. * **Layers**: the order of text, images, shapes, and groups. * **Inspector**: selected-element settings such as size, position, color, text, and bindings. * **Header actions**: save, export, navigation, and project controls. ## Edit a design [Section titled “Edit a design”](#edit-a-design) 1. Open a design from **Images** or **Projects**. 2. Select an element on the canvas or from the layer list. 3. Change text, color, position, size, or image source in the inspector. 4. Use undo/redo while experimenting. 5. Save before leaving the workspace. ## Template variables [Section titled “Template variables”](#template-variables) Some text and visual fields can be bound to runtime values such as user, guild, or channel data. Editor V2 uses Liquid-style variables like `{{ user }}` and stores bindings beside the design. Legacy message variables such as `{user}` do not work inside Editor V2 bindings. See [Formatting variables](../../formatting/) for the difference. ## Save guidance [Section titled “Save guidance”](#save-guidance) Save before returning to a feature page. If a feature still shows the previous design, refresh that feature page after the editor save completes. # Common errors Most dashboard errors come from missing input, Discord permissions, role hierarchy, or content limits. ## Input is missing or too long [Section titled “Input is missing or too long”](#input-is-missing-or-too-long) Check required fields such as channel, role, message, title, or command name. Discord also has message and embed length limits, so reduce long descriptions or extra fields when saves fail. ## User permission required [Section titled “User permission required”](#user-permission-required) Your Discord account must be allowed to manage the server or feature. Ask a server owner to adjust your role if the dashboard hides features or refuses saves. ## Bot permission required [Section titled “Bot permission required”](#bot-permission-required) April needs Discord permissions for the action it performs. Examples include sending messages, embedding links, managing roles, managing messages, managing emojis, and adding reactions. ## Role hierarchy [Section titled “Role hierarchy”](#role-hierarchy) If April cannot assign, remove, timeout, kick, or ban a member, check [Hierarchy](../hierarchy/). April’s role must be above the affected role or member. ## Not found errors [Section titled “Not found errors”](#not-found-errors) User, role, channel, or message IDs can become invalid when Discord content is deleted. Re-select the item from the dashboard when possible instead of reusing old IDs. ## Still not working [Section titled “Still not working”](#still-not-working) Join [April support](https://discord.com/invite/UKPKS4T) with the server name, feature name, what you tried, and the exact error text. # Hierarchy Discord role hierarchy decides which roles and members April can manage. ## Why hierarchy matters [Section titled “Why hierarchy matters”](#why-hierarchy-matters) Discord treats roles near the top of the role list as more powerful than roles below them. April can only assign, remove, or moderate roles and members below April’s highest role. Giving April **Administrator** does not bypass role hierarchy. The bot role still needs to sit above the roles it should manage. ## Find the role list [Section titled “Find the role list”](#find-the-role-list) 1. Open your Discord server. 2. Go to **Server Settings**. 3. Open **Roles**. ![Discord server settings roles menu](/assets/images/hierarchy-setting.webp) Discord shows the role order in the Roles page. Roles above April are out of reach; roles below April can be used by April features when permissions also allow it. ![Discord roles page](/assets/images/hierarchy-preview.webp) ## Fix role hierarchy [Section titled “Fix role hierarchy”](#fix-role-hierarchy) 1. Find April’s bot role in the Discord role list. 2. Drag April above every role it should assign, remove, or moderate. 3. Keep owner, administrator, and staff-only roles above April if April should not manage them. 4. Save Discord settings. 5. Retry the dashboard action. In this example, April can use the green roles below it, but cannot use the red roles above it. ![Role hierarchy with unusable roles above April](/assets/images/hierarchy-errors.webp) Move April above the roles you want it to manage. After the order is fixed, April can use the roles below it. ![Role hierarchy fixed with April above managed roles](/assets/images/hierarchy-errors-fix-1.webp) ## Common symptoms [Section titled “Common symptoms”](#common-symptoms) * A role is missing from a selector. * Autorole, self role, or reaction role does not assign. * Protection cannot timeout, kick, or ban a member. * Moderation actions work on some members but fail on staff or bots. * Discord shows “missing permissions” even though the dashboard form saved. ## Channel permissions [Section titled “Channel permissions”](#channel-permissions) Role hierarchy is separate from channel permissions. April also needs access to view the channel, send messages, embed links, manage messages, or add reactions depending on the feature. ## Your own role [Section titled “Your own role”](#your-own-role) Discord also checks your role position. If you are not the server owner, your highest role must be above the role you are trying to move or configure. # Apply marketplace items Marketplace items become useful after you apply them to a design or feature. ## Apply an item [Section titled “Apply an item”](#apply-an-item) 1. Claim or purchase the item from the marketplace. 2. Open the editor, image manager, or feature page that supports the item type. 3. Choose the marketplace item from the available items or templates. 4. Place it into the design or apply it as the full design. 5. Save the target design or feature. ## Item types [Section titled “Item types”](#item-types) * **Image templates** can be used as starting points for welcome, leaver, or other image designs. * **Shapes and assets** can be placed into editor designs. * **Full designs** can replace or populate a design canvas. * **Fonts** can be attached to compatible editor designs. ## If an item is missing [Section titled “If an item is missing”](#if-an-item-is-missing) Refresh the page after claiming or purchasing. Also check that you are editing the correct item type; not every marketplace item appears in every feature. # Browse marketplace The marketplace lets you browse designs and templates created by April and other users. ![Marketplace browse page](/assets/images/marketplace-browse.webp) ## Browse content [Section titled “Browse content”](#browse-content) 1. Open **Marketplace** from the top navigation. 2. Use search to find a template, image, font, or design style. 3. Open a product to review its preview and access state. 4. Purchase or claim the item when available. 5. Apply the item from the editor or feature page that supports it. ## Access states [Section titled “Access states”](#access-states) * **Free** items can be claimed without spending credits. * **Purchased** items are available to your account. * **Locked** or paid items require credits or the required access level. ## Choosing items [Section titled “Choosing items”](#choosing-items) Choose items that match the target feature. A welcome image template may not make sense as a rank card, and a small decorative shape may need to be applied inside an existing design. # Manage marketplace products Marketplace management lets you publish and maintain products from your April account. ## Publish flow [Section titled “Publish flow”](#publish-flow) 1. Open **Manage marketplace** from the user sidebar. 2. Create a new product. 3. Choose the design or asset you want to sell or share. 4. Add a clear title, description, category, and preview. 5. Set the access or price options. 6. Submit or publish the product. ## Editing products [Section titled “Editing products”](#editing-products) Open an existing product to update its description, preview, price, or source design. If the product depends on a design, keep that design organized in [Projects](../../editor/projects/) so you can find it later. ## Good product listings [Section titled “Good product listings”](#good-product-listings) * Show the real output in the preview. * Explain which feature the item is meant for. * Avoid hardcoded private names in templates. * Test the design before publishing. # Automated actions Automated actions escalate repeated protection violations, such as warning once and timing out after repeated offenses. ## Add an action [Section titled “Add an action”](#add-an-action) 1. Open a protection filter. 2. Enable automated actions. 3. Add a threshold, such as 3 violations. 4. Set the time window April should count within. 5. Choose the action April should apply. 6. Add a duration when the action needs one, such as timeout. 7. Save and test carefully. ## Available action types [Section titled “Available action types”](#available-action-types) Actions depend on the filter and server permissions, but common outcomes include warning, deleting messages, timeout, kick, or ban. ## Configure safely [Section titled “Configure safely”](#configure-safely) * Start with warnings or short timeouts. * Use a clear notification message so members understand what happened. * Keep staff or bot roles excluded from filters that could interrupt moderation. * Review protection logs before increasing thresholds or punishment severity. # Caps filter The caps filter catches messages that contain too much uppercase text. ## Configure caps protection [Section titled “Configure caps protection”](#configure-caps-protection) 1. Open **Protection > Caps filter**. 2. Enable the filter. 3. Set the percentage threshold that counts as too much uppercase text. 4. Exclude roles or channels where caps are expected. 5. Configure sanctions and automated actions. 6. Save and test with a short all-caps message. ## Tuning [Section titled “Tuning”](#tuning) Avoid setting the percentage too low. Acronyms, short reactions, and code snippets can look like shouting even when they are not abuse. # Emoji filter The emoji filter catches messages that contain too many emoji. ## Configure emoji protection [Section titled “Configure emoji protection”](#configure-emoji-protection) 1. Open **Protection > Emoji filter**. 2. Enable the filter. 3. Set the maximum emoji amount or percentage. 4. Exclude announcement or reaction-heavy channels if needed. 5. Configure sanctions, automated actions, and notification messages. 6. Save and test with a harmless emoji-heavy message. ## Tuning [Section titled “Tuning”](#tuning) Use a higher threshold in community or event channels where emoji reactions are normal. Use stricter settings in support, rules, or staff-facing channels. # Invite filter The invite filter catches Discord invite links posted in your server. ## Configure invite protection [Section titled “Configure invite protection”](#configure-invite-protection) 1. Open **Protection > Invite filter**. 2. Enable the filter. 3. Add allowed invite codes or domains to the whitelist when needed. 4. Exclude trusted roles or partner channels. 5. Configure sanctions and automated actions. 6. Save and test with a disposable invite link in a private channel. ## Recommended use [Section titled “Recommended use”](#recommended-use) Use this filter to reduce server advertising and scam invites. Keep a whitelist for your own official servers or partner communities. # Link filter The link filter controls which URLs members can post. ## Configure link protection [Section titled “Configure link protection”](#configure-link-protection) 1. Open **Protection > Link filter**. 2. Enable the filter. 3. Choose whether to use a whitelist, blacklist, or both. 4. Add domains without extra tracking paths when possible. 5. Exclude roles or channels that need broader link access. 6. Configure sanctions and notification messages. 7. Save and test a matching URL. ## Whitelist [Section titled “Whitelist”](#whitelist) Use the whitelist when only approved domains should be allowed, such as documentation, support, or official community links. ## Blacklist [Section titled “Blacklist”](#blacklist) Use the blacklist when most links are allowed but a few domains should be blocked. ## Tuning [Section titled “Tuning”](#tuning) Do not block every link in help channels unless moderators are ready to handle false positives. # Mention filter The mention filter catches messages that mention too many users, roles, or channels. ## Configure mention protection [Section titled “Configure mention protection”](#configure-mention-protection) 1. Open **Protection > Mention filter**. 2. Enable the filter. 3. Set the allowed mention amount. 4. Decide whether user, role, and channel mentions should count. 5. Exclude announcement roles or staff channels if needed. 6. Configure sanctions and automated actions. 7. Save and test with a harmless message. ## Tuning [Section titled “Tuning”](#tuning) Use stricter limits in public channels and looser limits in staff or event-planning channels. Be careful with role mentions that are part of normal announcements. # Paragraph filter The paragraph filter catches very long or spam-like messages. ## Configure paragraph protection [Section titled “Configure paragraph protection”](#configure-paragraph-protection) 1. Open **Protection > Paragraph filter**. 2. Enable the filter. 3. Set the minimum or maximum amount threshold used by the filter. 4. Exclude channels where long posts are expected. 5. Configure sanctions and notifications. 6. Save and test with a safe long message. ## Tuning [Section titled “Tuning”](#tuning) Do not apply strict paragraph limits to introductions, writing, support, or forum-style channels where members are expected to write longer messages. # Spoiler filter The spoiler filter catches messages with excessive Discord spoiler formatting. ## Configure spoiler protection [Section titled “Configure spoiler protection”](#configure-spoiler-protection) 1. Open **Protection > Spoiler filter**. 2. Enable the filter. 3. Set the spoiler amount or percentage threshold. 4. Exclude channels where spoilers are expected. 5. Configure sanctions and notifications. 6. Save and test with a harmless spoiler-formatted message. ## Tuning [Section titled “Tuning”](#tuning) Keep entertainment, game, or media channels in mind. Spoiler formatting may be normal there but disruptive in support or general chat. # Symbol filter The symbol filter catches messages dominated by punctuation or special characters. ## Configure symbol protection [Section titled “Configure symbol protection”](#configure-symbol-protection) 1. Open **Protection > Symbol filter**. 2. Enable the filter. 3. Set the allowed symbol percentage or amount. 4. Exclude code, bot-command, or moderation channels where symbols are common. 5. Configure sanctions and automated actions. 6. Save and test with a safe symbol-heavy message. ## Tuning [Section titled “Tuning”](#tuning) Keep thresholds high enough that normal punctuation, URLs, and code snippets do not trigger the filter. # Toxicity filter The toxicity filter helps detect hostile or abusive messages. ## Configure toxicity protection [Section titled “Configure toxicity protection”](#configure-toxicity-protection) 1. Open **Protection > Toxicity filter**. 2. Enable the filter. 3. Set a threshold that matches how strict the server should be. 4. Exclude staff or moderation channels if needed. 5. Configure sanctions, automated actions, and notifications. 6. Save and monitor logs before increasing severity. ## Tuning [Section titled “Tuning”](#tuning) Start with low-impact actions such as logging or warnings. Toxicity detection can have context-dependent false positives, so review real examples before adding severe automatic actions. # Protection messages Protection messages explain what April did after a filter matched a message. ## Configure a message [Section titled “Configure a message”](#configure-a-message) 1. Open the protection filter. 2. Find the notification or message section. 3. Enable sending if the filter should notify anyone. 4. Choose whether April should reply, send a direct message, or post to a channel. 5. Select the channel when using channel notifications. 6. Write a short message or embed. 7. Save and trigger a safe test message. ## Message destinations [Section titled “Message destinations”](#message-destinations) * **Reply** keeps the warning close to the filtered message. * **Direct message** avoids public callouts but can fail when user DMs are closed. * **Channel notification** is useful for staff-only moderation logs. ## Message content [Section titled “Message content”](#message-content) Use a direct, non-accusatory message. Include the rule that was triggered and what the user should do next. Use [Create embed messages](../../create-embed-message/) for composer behavior and [Formatting variables](../../formatting/) for available variables. # Protection overview Protection filters detect unwanted messages and apply the actions you configure. ## Configure a filter [Section titled “Configure a filter”](#configure-a-filter) 1. Select your server. 2. Open **Protection**. 3. Choose the filter you want to configure. 4. Enable the filter. 5. Set the filter-specific options. 6. Configure sanctions and automated actions. 7. Configure notification messages if staff or users should be notified. 8. Save and test in a private staff channel before relying on the filter publicly. ## Main pieces [Section titled “Main pieces”](#main-pieces) * **Filter options** decide what April detects. * **Role and channel permissions** decide where the filter applies. * **Sanctions** decide the immediate moderation outcome. * **Automated actions** apply escalations after repeated violations. * **Messages** decide whether April replies, DMs, or posts to a channel. Start with a narrow rule and loosen it only after you see real messages in the moderation logs.