Changelogs
Introducing User and Channel Context Menu Commands
BotGhost commands can now run from the right-click menu. Right-click a member or a message, open Apps, and pick your command. No slash, no typing, and the clicked member or message is handed straight to your blocks. One of the most requested features on the suggestions board, built with the same builder, blocks, cooldowns and permissions you already use.
What are Context Menu Commands?
User Commands: appear when someone right-clicks a member and opens Apps. Your actions run with that member already selected.
Message Commands: appear when someone right-clicks a message and opens Apps. Your actions run with that message, and its author, already selected.
They are built in the normal Command Builder. Anything you can put in a slash command (replies, embeds, buttons, forms, moderation, API requests, variables, conditions) works here too.

Key Features
Command type setting: every command has a Command type row in its settings panel, tucked under an Advanced tag so normal commands look the same. Click Change to switch between Slash, User and Message.
Target variables:
{target_user},{target_user_id},{target_user_name},{target_user_avatar},{target_user_roles}and more. Message commands add{target_message_content},{target_message_url},{target_message_channel_id}and attachments. All listed in the variable picker under Command Variables.Power user shortcut: the clicked member is also the option
target_user, so{option_target_user}and{user_name[option_target_user]}work with no setup.The Message target: Delete, Pin and React blocks can target the right-clicked message directly.
Buttons and select menus: follow-up actions still know which member or message was clicked.
Real names:
View ProfileorReport Message, spaces and capitals allowed, up to 32 characters. A context command can share a name with a slash command.Built-in demo: a Demo button shows exactly how members use each command type in Discord.
How it works
Open a command, click Change on the Command type row, pick User or Message Command.
Name it, add your actions, save.
In Discord, right-click a member or message, open Apps, pick it.
Switching a slash command works as long as it has no option blocks attached, since Discord fills in the target for you.

Limits and Premium
Discord allows 5 User and 5 Message commands per bot; the builder shows your count and stops at the limit. Context commands count towards the same command pool as slash commands, so free bots keep their existing limit and Premium bots are unlimited.
Common Uses
User Info: right-click a member for their id, avatar, roles and join date.
Report Message: send the message, link and attachments to your mod channel, then delete it.
Warn or Timeout: run your moderation flow without typing a name.
Translate: send a message's content to an API request block.
Find it in the Command Builder under Command Settings, in the Command type row.

Introducing Secrets and API Templates
We've rebuilt how your bot talks to the outside world. Secrets keeps your API keys encrypted and out of your commands, and API Templates lets you build, save and share complete API requests with a code, exactly like command share codes. You also get 293 built-in templates for Discord, ChatGPT, Claude, Roblox, Fortnite, weather, GIFs and more. Both are available to all users immediately inside the Command and Event Builders.
What are Secrets
Save a key once under a name such as OPENAI_API_KEY, then write {SECRET_OPENAI_API_KEY} anywhere in a Send an API Request block. The bot swaps in the real value at the moment the request is sent and nowhere else.
Encrypted and never shown again: not in the dashboard, share codes, error logs or responses. Echoed keys are scrubbed to
#REDACTED#.Allowed APIs: Lock a secret to specific APIs. Anywhere else, the request is refused.
17 one-click keys: OpenAI, Claude, Gemini, Groq, DeepL, Giphy, Hypixel, ER:LC, Fortnite, YouTube, Top.gg, GitHub and more, pre-filled with a link to get each key.
Collaborator controls, a per-key Allow in Test Request switch and one-click key updates.

Make your own API Templates
Any request you build can become a template in two steps with Save as template.
Blanks that ask each time: The builder scans your request and suggests what should be asked when the template is used, such as a username or channel, and what stays fixed. Give each blank a question, a type (text, number, user, channel, role or dropdown) and a suggested answer. Power users can mark blanks by hand with
{{like_this}}.Ready-made response variables: Tell people which parts of the answer matter and they appear as one-click chips in the block and in the variable picker.
Folders and favourites: File templates into folders and star the ones you use most. Your library follows you across every bot you own.

Share API Templates with a code
Every saved template has an API_ code that works the same as command share codes. Copy it, send it to anyone, and they paste it into Import code in the Request Builder. It lands in their library ready to use, with your questions, types and response variables intact. Secrets are never included in a code, only the {SECRET_NAME} reference, so the person importing uses their own key. That means you can publish a ChatGPT, Roblox or ER:LC template for your community without ever exposing yours.
293 built-in templates
215 Discord API templates rewritten in plain English across 12 categories from Messages to Webhooks, using your bot token automatically.
78 Popular templates: 14 AI, 14 Fun, 34 Gaming, 9 Data, 5 Automation and 2 Tools. 45 need no key.
6 AI providers: OpenAI, Claude, Gemini, OpenRouter, Groq and DeepL, with recipes for ask, summarise, translate, roleplay, moderate and image generation.
Gaming by game: 13 Roblox, 10 ER:LC (Emergency Response: Liberty County), 6 Fortnite, plus Minecraft and Hypixel. New API Request blocks ask whether to start from a template or from scratch, and searching the block palette for roblox or chatgpt offers a fully configured block in one click.
Free vs Premium
Free Users: Up to 5 secrets per bot, every built-in template, and up to 200 saved templates with folders, favourites and sharing. Premium Users: Up to 50 secrets per bot.
Find Secrets in the builder's side tabs and Templates inside any API Request block.
Bot Presence and New Status Types
You can now control how your bot appears in Discord, not just what it says.
Online Presence (free for every bot)
Set your bot to Online, Idle, Do Not Disturb or Invisible.
How to set it
Go to Settings
Scroll to Online Presence
Pick a presence and click Save Changes
Great for modmail or ticket bots that want to show Do Not Disturb while closed.
Heads up: Invisible makes your bot look offline even though it is running and commands still work. The dashboard shows a warning while it is on so you do not forget.

More status types
The Change the Bot's Status action now supports Streaming, Competing and Custom on top of Playing, Watching and Listening.
Custom shows your text on its own with no prefix
Streaming takes a Twitch or YouTube link and shows the purple live badge
Change presence from a command or event
The same action now has an Online Presence option, so your bot can switch to Do Not Disturb and back on its own.
How to use it
Open a command or event in the builder
Add the Change the Bot's Status action
Set Online Presence to the one you want, or pick Variable / Text and enter a variable such as
{option_presence}Optionally add status text and a type
Save the command
A variable must resolve to online, idle, dnd, invisible or keep (keep leaves the presence alone).

Save as Default
Turn on Save as Default in the action and the change sticks after a restart. Leave it off and the bot goes back to its saved status on the next restart, as it always has.
Faster updates
Your bot now connects with its status and presence already applied instead of appearing blank for a moment, and rapid status changes are no longer dropped by Discord.
Quality of Life Updates
Some quality of life and dashboard updates to make things easier :).
Form Builder character limits
The Form Builder now shows live character counters on the title, label, placeholder and default value fields, with Discord's limit for each.
Go over the limit and the counter turns red and the block is flagged before you save. Fields with a variable are not checked.
If a form still fails for being too long, the Errors page shows a plain-English Likely cause and a Learn more link.
Block Search in the builder
New Block Search box under the Options / Actions / Conditions tabs that searches all three at once.
Matches names, descriptions and common words: "form" finds Send a Form, "dm" finds Send or Edit a Message, "if" finds the Comparison Condition.
Press / to jump to it. Both the box and the shortcut can be turned off in Builder Settings.
Empty comparison values and {null}
The Comparison Value can now be left empty for Equal to and Not equal to, to match blank values like a skipped option or an unset variable.
{null} now matches empty values, real null values and the word null in those comparisons, and behaves the same as an empty value. Other comparison types are unchanged.
Default Base Value setting
New Default Base Value text box in Builder Settings under Comparison Condition. Whatever you enter, including a variable like {option_amount}, is prefilled as the Base Value on every new comparison block. Clear the box and new blocks start with an empty Base Value.
New {toLowerCase} variable
Added {toLowerCase(text)} next to {toUpperCase(text)}. Works with variables inside it, such as {toLowerCase({user_name})}.
Reorder command options
The command settings now list your options in a Command Options list. Drag them or use the arrows to change the order, and the canvas updates to match.
No more deleting and re-adding options to reorder them.
Ignore pinned messages when purging
New Ignore Pinned Messages toggle on the Purge Messages action. Pins are skipped and the bot still deletes the number you asked for.
On by default for new blocks. Existing blocks are unchanged until you turn it on.
Duplicate a variable
New Duplicate button on variables in the builder Variables tab and on the Data Storage page.
Copies the type, default value and all object properties under a new name, ready to rename and save. Stored values are not copied.
Forum post tags
New Tags field when sending a message as a new forum post. Enter tag names or IDs separated by commas, variables included.
Unknown tags are skipped, the post is still created, and the Errors page tells you which tag was not found.
Unsaved changes warning
Refreshing or closing the tab with unsaved builder changes now shows the browser's "leave this page?" prompt. Can be turned off in Builder Settings.
Bug Fixes and Changes
Bug Fixes
Fixed the previous button's emoji "ghosting" into the next button's Emoji field when editing buttons on a Send or Edit a Message block
Removed the variable clipboard icon from the YouTube Channel field in the YouTube Video Upload event, since that field must be a real channel and cannot use variables
Fixed the Voice Move a Member action moving the user who ran the command when the target user ID was invalid
Fixed the Success path of the Create a Thread block never running when the thread was created in a channel selected by ID
Fixed the Custom Button Style being ignored for buttons placed as a Section accessory in Components V2 messages
Fixed a false "Cannot loop inside a loop" error when a Button running a Loop with a Wait block was clicked again before the first run finished
Fixed the Position field being ignored in the Edit a Role action
Fixed duplicated Placeholder, Disable and Remove fields showing when editing a select menu with the Edit a Button or Select Menu action
Fixed the Create a Channel optional variable keeping the first channel's ID when the block runs inside a Loop
Fixed Components V2 messages not sending through user-created webhooks in the Send or Edit a Message block
Fixed pings being re-enabled on a Components V2 message with mentions disabled after the Edit a Button or Select Menu action edited it
Fixed Components V2 role, user and channel select menus failing with an "options must be between 1 and 25" error when placed after a legacy Send a Message with attached Buttons or Select Menu block
Fixed the Edit a Button or Select Menu action silently doing nothing for buttons and menus inside a Container on a Components V2 message, and made the Remove Menu field accept variables and only remove on
trueFixed the {Guild.invites} variable only listing invites created since the bot started instead of every invite in the server
Fixed long text in a Section pushing the button outside the message preview in the Components V2 builder
Fixed importing an event into the builder producing no blocks when an Action Event (such as Auto Role on Join) was selected
Fixed collaborators seeing no values on the Data Storage page for a bot they have access to
Fixed "The reply to this interaction has not been sent or deferred" when a Send or Edit a Message block edits the message a button/menu is on while a Send a Form block sits on another branch of the same button
Fixed Block Templates letting a command save with duplicate Send an API Request / Send a Form names; clashing blocks are now flagged so you are asked to rename them
Additions & Changes
Added a Pricing section to the home page with Free, Single Bot and Unlimited Bots plans and a monthly/yearly toggle
Updated the home page pricing and plan features to match the Upgrade to Premium page
Fixed the dropdown arrows in the main navigation sitting slightly out of line with their labels
Fixed pages that do not exist loading as a normal page instead of showing a proper 404
Music Bug Update!
We're happy to announce that music is now functional once again! Since our last bug update, we've been working to locate and resolve music bugs/errors.
We've resolved plenty of internal bugs, music block bugs, and /music play errors. If you've created a custom music system or add-on, you may need to re-place certain music blocks to update them properly compared to their BETA counterparts.
Needing to replace blocks should've only primarily impacted Create Music Player, Search Tracks, & Add to Queue.
Resolved bugs & updates include, but is not limited to:
Fixed all issues causing /music play command failure or misintended responses
Fixed Smart Search causing command failure
Added custom error feedback based on variable results (doesn't include all commands yet)
Updated the Create Music Player block
Updated the Search Tracks block
Updated the Add to Queue block
Resolved a handful of other tiny bugs
Please keep in mind that even though we've resolved some bugs, music is still recognized a brand new module - so it may still contain some bugs and/or rough edges.
Bug Fixes
Fixed the Delete a Message action failing to delete an ephemeral message when triggered from a button on that message
Added the variable picker to the Equation field in the Run Equation on Variable action
Fixed Priority Hosting appearing as purchasable in the iOS app - it now correctly directs you to upgrade on the web
Fixed double quotes breaking requests in the API Request action when using Key/Value mode with the JSON stringify text options
Fixed line breaks breaking requests in the API Request action when using Raw mode with the JSON stringify text options
Fixed iOS subscriptions not removing Premium from your bots when cancelled - your bots are now correctly downgraded along with your account
Fixed Twitch and YouTube events not triggering after importing them with a share code or switching between events
Fixed changing the channel on a Twitch or YouTube event keeping the old channel - it now clears so you re-validate the new one
Additions & Changes
Released the Music module out of beta - music commands and actions are now available to all Premium users without needing beta enabled -# You can expect news from us regarding music bugs being resolved very soon.
Additional bug fixes!
Fixed commands freezing on thinking when a user variable (username, ID, avatar) was used with a user not in your server — like unbanning by ID, where it now resolves their details instead of erroring
Fixed a server error when testing a Send an API Request action with Sanitize response data enabled
Fixed the Upgrade Bot button in Settings giving no feedback with a premium token, so you now get a confirmation screen instead of having to refresh
Fixed clicking a prebuilt Event (like Auto-Kick) inside a Module on mobile sending you to the Custom Commands page instead of opening the event
Fixed long event names overlapping the Edited badge and toggle on Module event cards
Fixed adding a custom event to the Welcomer module (and others) replacing an existing event instead of adding the new one
Fixed the Moderators Invite toggle in the Create a Thread action being ignored on private threads, so turning it off now stops non-mods from inviting others
Fixed Get Highest/Lowest Value and Get Highest/Lowest User sometimes adding stray spaces around a value, which could break things like user pings
Fixed Print All Values showing null when your template used another variable (like a username lookup) inside it, so user IDs now print the correct names
Fixed variables not working in the Allowed Mentions settings for Components V2 messages, so dynamic user/role IDs now ping correctly
Fixed the UNIX to ISO variable returning the wrong format, so it now outputs a proper ISO 8601 date like
2026-06-06T17:00:00ZFixed the message reactions variable returning only commas (or nothing) instead of the actual reactions
Fixed the Ignore Variables variable showing the real data instead of the literal
{variable}namesFixed user variables like User Icon returning the current user's info when you nested a lookup like
{getHighestUser(...)}inside them, so they now resolve to the correct userFixed the Edit a Button or Select Menu action erroring when your message had text above a container, so buttons inside containers can now be edited
Fixed the Edit a Button or Select Menu action wiping role, user, channel and mentionable select menus when you edited a button, so your menus now stay in place
Fixed the Edit a Button or Select Menu action not updating a button attached to a section inside a Components V2 container, so those buttons now edit and remove correctly
Fixed the Optional Variable (Message ID) on Components V2 messages not staying unique, so running a command again no longer makes the first message's button act on the second
Fixed a background error spamming your logs when clicking buttons on Components V2 messages with no error handling (it didn't affect the button's action)
Fixed the Create a Thread action failing in a DM event or anywhere without a server, so threads now create correctly outside of a server
Fixed forms being skipped when they came after a block using a success or error handler, so your form now pops up
🛠️ Additions & Changes
Added a Send the message from a webhook URL response type to the Send or Edit a Message action, so you can send messages (buttons, embeds and Components V2 included) straight from a Discord webhook, with optional custom name and avatar
Added a clear warning to the Send a Form block reminding you a form must be the first reply to an interaction (sending a message to a channel beforehand is fine)
Added variable support to the Moderators Invite option in the Create a Thread action, so you can set it with a
true/falsevariableUpdated outdated documentation links throughout the Command & Event Builder and the legacy Slash Command and Custom Command builders, so the help icons now open the correct, up-to-date docs
Bug Fixes
We've recently pushed major fixes and additions to the BotGhost Dashboard and will, from this point forward, release bug fix announcements periodically once again!
Fixed the recent values list in Data Storage so channel variables now show which channel each value belongs to
Fixed the recent values list in Data Storage so user and channel specific objects now show their keys alongside their values
Fixed missing spaces around the status message text on the Settings page
Fixed the Terms of Service and Privacy Policy links on the Login page so they open the correct pages instead of a 404
Fixed the Choose Image button in the Bot Avatar section of Settings so it now opens the file picker on the web
Fixed the Display inline checkbox in the Message Builder embed fields so it now correctly shows as checked
Fixed the browser tab name getting stuck on Upgrade to Premium after leaving the Premium page
Fixed the Text option icon in the Command Builder so it now shows the text icon instead of the number icon
Fixed the cursor jumping to the end when editing the Channel Id field in the Send or Edit a Message action
Fixed the Message Builder preview hiding text after a
<character so your message now previews exactly as typedFixed block quotes and strikethrough not showing correctly in the Message Builder preview
Fixed the Root and Error Handler blocks being movable when multi-selecting in the Command/Event Builder so they now stay locked in place
Fixed Block Templates not adding to the canvas when tapped on mobile in the Command/Event Builder
Fixed the Allowed Mentions settings in the Send a Message action showing the wrong toggles when switching between multiple message blocks
Fixed long code text in inline embed fields overflowing the Message Builder preview so it now wraps neatly inside the embed
Fixed the connection dots on blocks in the Command/Event Builder so they now glow and pulse again when you start connecting blocks together
Fixed imported templates duplicating the buttons on a Send or Edit a Message block when you clicked it, so your saved buttons now stay exactly as they were
Fixed the ? help link on the Hide bot's replies setting in the Command Builder so it now opens the correct docs page instead of a 404
Fixed a layout jump in the Command/Event Builder where closing the Blocks sidebar on smaller or split-screen windows left a large empty gap instead of expanding the canvas to fill the space
Fixed the variable searcher lagging and freezing your device while typing, so searching for variables is now smooth and instant
Fixed duplicating a Comparison Condition as a Block Template so its value and Else branches stay connected, and the Else branch can be deleted again
Fixed text getting scrambled when typing quickly in the embed and message fields of the Send or Edit a Message block, so you no longer have to type slowly
Fixed the Duplicate Blocks button in the Command/Event Builder so connection lines and buttons now copy across correctly when duplicating a selected group of blocks
Fixed Autocomplete choices on Command Builder options copying over to your other options, so each option now keeps its own choices
Additions & Changes
Updated the permission dropdowns in the Command/Event Builder to include newer Discord permissions such as Pin Messages, Use Soundboard, Create Events and Use External Apps
Improved the Command/Event Builder sidebar on mobile so switching between Blocks, Variables, Error Logs and other sections now uses a clear dropdown instead of a cramped scrolling tab bar
BotGhost is Now on iOS
We’re excited to officially launch the BotGhost iOS app. Manage your Discord bots anywhere, anytime — straight from your phone.
New iOS App
Manage your bots on the go
Get real-time updates
Access all premium features
Clean, fast, and mobile-first experience
Download it on the Appstore.
Module Updates
Economy & Minigames
/lottery view command fixed when viewing the next lottery when there were 10 or more entrants
/lightout now checks if you were the command user for the start button prior to the start of the game
/rob bank now makes the target of the robbery safe as soon as the join message appears, stopping people from trying to rob them twice
/dos no longer causes the bot to keep "thinking"
The "Message Award Cooldown" field in the dashboard can now be set to a value of 1. Previously the limit was 2
/hangman "This is not your game!" message removed.
Moderation
Autopunishments were broken because of a small issue with a flipped comparison condition and it didn't reset the vars after an autopunishment.
/ban add reason fixed to check the correct character limit
/ban add reason will check if it contains invalid characters (kinda) and stop the command
/warn fixed small permissions check for moderators
/case view removed role hierarchy check
typo in /role remove
Economy Module Update
We can finally get formatted currency into the Economy module!
This is now released alongside just a few other items:
/money audit - now shows currency with formatting, eg: 4,000 or 4,500,000
All other commands that would show currency will also format correctly Note: The default behaviour is to format the currency with commas as a delimiter, however there is a variable to format it another way, eg: 4.000 or 4.500.000. If you would like to change it, you will need to edit each command.
/dicebet - If both players roll the same number, instead of both players losing, both players will now win
Finally fixed the issue where user tags were replaced with userids - the module will remember to use tags once again
Some very minor typos and grammatical errors (They were so tiny I don't remember where they were - there also might still be others)
Module Updates & Bug Fixes + Tickets Updates
Hey everyone! We're starting the new year with some module bug fixes and a major update to our Tickets module
Tickets - Major Update
We've added a new transcript mode, which uses the Create a transcript action that was released a few weeks ago
In the Transcripts section, you can now choose which transcript mode you want to use (web or thread transcript)
You can select the theme you prefere (Simple or Discord)
You can also setup permissions, to determine who should be able to view or download transcripts, and even lock ticket transcripts behind a password
Transcripts are created when the ticket is closed. If two step close is off, the transcript will be created before the ticket is deleted
Thread based transcripts remain unchanged
Fixed an issue that caused user options to not work as intended
Fixed some visual issues
Improved error handling for thread based transcripts
Starboard
Fixed an issue that caused starboard messages to break with characters such as []
Improved overall security and reliability of the module
Leveling
Fixed an issue that caused user options to not work as intended
Last updated
Was this helpful?