Skip to Content
DocsDashboardSettingsQBxBot Command Channel

QBxBot Command Channel

The Command Channel lets you operate your QuickBox Pro install from your own messaging account. You send a short command to QBxBot — your install’s own private bot — and it carries out the action and replies to you over the same chat. You can link a Discord account or a Signal account; the channel is transport-neutral, so linking and commanding work the same way on either.

QBxBot is not a shared community bot. Each install runs its own bot, dials out to your chosen messaging platform, and only ever acts on your install. Nothing is exposed to the public internet, and the bot can only run a small, fixed set of commands that an administrator has chosen to allow.

Off until two things are turned on

The Command Channel does nothing until an administrator enables it for the whole install and you opt your own account in. Both are required, and both are off by default.


What you can do

Command from chat

DM your install's QBxBot to check or control your apps without opening the dashboard

Control and check

Start, stop, and restart your services, and check status, disk, VPN, and downloads from chat

Custom aliases

Name your own shortcuts for the commands you are allowed to run

Verified and audited

Only your linked account can command on your behalf, and every action is recorded

Use the Command Channel when

  • You want to restart a stuck app from your phone without logging in
  • You are away from the dashboard and just need a quick status check
  • An admin needs to bounce a user's service quickly from chat

Use the dashboard instead when

  • You are installing or removing apps, or editing configuration — those stay dashboard-only
  • You need fine-grained control, a full view, or anything outside the fixed command list
  • You are doing something irreversible like deleting a user — those are dashboard-only by design

How it works

A command travels through a fixed path, and your authority is checked at every step before anything runs:

  1. You DM QBxBot from your linked account.
  2. QBxBot confirms the message came from your verified account.
  3. It checks that your account is allowed the command, on the app you named, for the target user (yourself, or anyone if you are an admin).
  4. For any action that changes state — stopping or restarting a service, or any administrator action like banning a user or triggering a backup — it asks you to confirm before it proceeds. The two highest-impact administrator actions (banning a user and creating a user) ask for a stronger confirmation where you also have to type the target’s name back.
  5. It runs the action through the same safe, internal path the dashboard uses — and replies to you with the result.

The bot can only run commands from a closed, server-defined list. There is no way to send it a free-form command or a shell command — anything that is not a recognized command is simply ignored.


Works on a home server (no port to open)

The Command Channel is outbound-only. Your install dials out to Discord or Signal to receive your commands — it never waits for an incoming connection. This is the opposite of exposing a dashboard or web app to the internet.

What port do I open? None.

There is no inbound port, no port-forwarding, and no public domain required. Your install reaches out to the messaging platform; commands and replies travel back over that same connection. A home seedbox behind your router — on a residential IP, with no ports opened — works exactly like a hosted server.

This applies to both Discord and Signal:

  • Discord — your install opens a connection out to Discord and receives your DMs over it. Nothing listens for inbound traffic on your server.
  • Signal — signal-cli on your install keeps its own outbound connection to Signal’s servers. The dashboard talks to it entirely on the local machine, never over the network.

Because nothing is exposed, there is no inbound surface to attack and no firewall rule to add. The only network traffic is your install reaching out to the messaging platform it already trusts.

One-time setup still needs the internet

Setting Signal up the first time — installing signal-cli, fetching the Java runtime, and linking or registering the account — does need outbound internet access, just like installing any app. That is normal outbound traffic; it still opens no inbound port.


Setting it up (administrators)

The admin controls for the Command Channel live on the command tab of Settings > Notifications. You turn on the install-wide master switch there, choose your command catalog, and enable each messaging platform you want to allow.

StepWhat to do
1. Enable the channel
Turn on the install-wide Command Channel master switch. Nothing accepts commands until this is on.
2. Choose the command catalog
The catalog lists every command QBxBot supports. Switch on each one you want available; everything starts off. Only the commands you turn on can be run by anyone.
3. Enable a platform
Set up Discord, Signal, or both (see below). Each platform is enabled independently.
4. Review insights and the audit log
Watch the command insights summary and the audit log on the same tab to see what is being run and every attempt's outcome.
The catalog is yours to control

The catalog shows the full set of commands QBxBot supports, each with a switch. You choose exactly which ones are available — everything is off until you turn it on, and there is no hidden default set. Each command also shows whether it only reads state or changes it, whether it is for any user or administrators only, and whether it asks for confirmation, so you can see what you are allowing at a glance. A number of sensitive operations can never be exposed through the Command Channel at all, regardless of configuration.

Try it safely with dry-run

The admin tab has a dry-run switch. With dry-run on, QBxBot parses and authorizes commands but stops short of actually running them — useful for checking your catalog and roles work as intended before going live.

The admin tab also gives you an install-wide kill switch. Turning the channel off immediately stops QBxBot from acting on any command, for every user, on every platform, without removing anyone’s links or settings.

Command insights and audit (administrators)

The admin Command Channel tab includes a Command Insights summary and a Command activity audit log. Insights give you an at-a-glance view over a recent window — how many commands ran, how many were denied, the success rate, and which commands, users, and apps are most active. The audit log lists every individual command attempt and its outcome. Both are administrator-only; there is no equivalent user-facing alert feed.

Enabling Discord

Your install runs one Discord bot, and that single bot does everything: it receives the commands your users DM it and sends those users their alerts as DMs. The same bot token powers both directions. You set it up once.

One bot, both directions — the key idea

The bot token you paste in is what makes the channel two-way. With it, your install’s bot can receive a command a user DMs it and send that user a reply or an alert back. A Discord webhook, by contrast, only posts into a channel — it can never receive a command. So commands always need the bot; webhooks are an optional extra for outbound-only delivery. See Bot vs webhook below.

Step by step (administrators)

You create a Discord application with a bot, copy its token, get the bot somewhere it can reach your users, and paste the token into your install. This is a one-time setup.

StepWhat to do
1. Create the application
In the Discord Developer Portal (discord.com/developers/applications), click New Application, name it (this becomes your QBxBot), and create it.
2. Add the bot
Open the Bot tab. The bot user is created with the application; this is the identity your users will DM.
3. Turn on Message Content
Still on the Bot tab, enable the Message Content Intent under *Privileged Gateway Intents*. Without it the bot connects but reads blank text, so no command works. It is self-serve for bots in fewer than 100 servers, which covers a private install bot.
4. Copy the bot token
On the Bot tab, click Reset Token (or Copy if shown) and copy the token. Treat it like a password — anyone with it can act as your bot.
5. Get the bot to your users
DMs only work when the bot and the user share at least one Discord server. Invite the bot to a server your users are in (Discord shows you an invite under OAuth2), then share that server's invite link with your users.
6. Paste the token into your install
Go to Settings > Notification Settings > Channels > Discord, paste the bot token, save, and use Test Token to confirm your install can reach it. Optionally paste your server's invite link so users see a join button.
7. Enable bot DM delivery and inbound commands
Turn on bot DM delivery in the Discord channel settings, then turn on Discord inbound commands on the command tab. The bot now sends alerts and accepts commands.
The Message Content intent is required

This is the single most common reason a freshly set-up bot reads nothing. If commands you DM the bot are silently ignored, re-check that Message Content Intent is on in the Developer Portal under your application’s Bot settings.

Why the bot needs to share a server with each user

Discord only lets a bot DM a user when they share at least one server. That is why you invite the bot to a server and give your users its invite link — once you and the bot are both in some server, DMs flow in both directions. No public channel is needed and the DMs stay private to each user.

Bot vs webhook — what each can do

This is the single biggest point of confusion, so it is worth being explicit. A bot token and a webhook are two different things:

Column 1Bot tokenWebhook
Sends alerts
Yes — as a private DM to each user
Yes — posts into one Discord channel
Receives commands
Yes — users DM the bot to run commands
No — a webhook can never receive anything
Who sees it
Only the individual user
Everyone in that channel
Needed for the Command Channel
Required
Not used for commands
Short version

The bot token is bidirectional — it sends DMs and receives commands. A webhook is outbound-only — it posts to a channel and cannot receive. The Command Channel always runs on the bot; a webhook is just an optional way for a user to also get their alerts in a channel.

Enabling Signal

Signal needs three things in place: signal-cli installed on your server, a Java runtime (signal-cli is a Java application — the installer sets this up for you), and a Signal identity for QBxBot to send and receive on. The Signal settings page has an Install button that prepares signal-cli and Java for you; once that is done, you give QBxBot a Signal identity in one of two ways.

Two ways to give QBxBot a Signal identity

Link Device attaches QBxBot to an existing Signal account as a second device — your phone stays signed in. Register Number claims a phone number for QBxBot outright. Most people should choose Link Device — it needs no spare phone number and is the lower-risk path.

In the Signal settings, choose Link Device. QBxBot shows a QR code. On your phone, open Signal → Settings → Linked Devices → Link New Device and scan it. QBxBot then rides on your existing Signal account as a linked device — exactly like Signal Desktop. Your phone stays registered and fully working; nothing is taken over.

This is the best choice for a home or personal install because it needs no second phone number — it reuses the Signal account you already have.

Register Number

In the Signal settings, choose Register Number to claim a phone number for QBxBot directly. You enter the number in full international form, solve a Signal captcha in your browser when prompted, and enter the verification code Signal sends by SMS (or voice call) to that number.

Register Number requires a dedicated phone number

Registering a number makes it QBxBot’s primary Signal device. If you register a number that is already in use by a personal Signal account, that account is signed out of Signal on its phone. Only register a number that is dedicated to this install — a spare SIM, a VoIP number, or a Google Voice number that no personal Signal account uses. If you do not have a spare number, use Link Device instead.

After either path, turn on Signal inbound commands to arm it. QBxBot starts listening for DMs on its Signal identity, and your users can link.

Set up Signal while inbound is off, then arm it

You link or register the identity with Signal commands turned off, then arm it. If you ever need to change the identity, disarm Signal first. Arming Signal never affects your Discord setup — each platform is independent.

The Signal identity is the bot's, not a user's

The number or account QBxBot uses is the address your users DM to. It is your install’s QBxBot identity. Users never type a phone number to link — they prove their own account by DMing a code (see below).


Linking your account

Once an administrator has enabled the channel, each user links their own messaging account from the Command Channel section of their Profile. The link proves control of the account by having you send a one-time code from that account — you never type your account ID or phone number into a form. The steps are the same whether you link Discord or Signal.

As a regular user, you don't need a webhook

You don’t have to set up anything in Discord yourself. Just link your Discord account (below), then DM the bot to run your commands. By default the bot also DMs your alerts to you — no webhook required. If you’d rather have alerts land in a Discord channel as well, you can add one or more named webhooks in your Profile notification settings, but it’s entirely optional.

  1. Opt in. Turn on the Command Channel for your own account.
  2. Choose a channel. Pick the platform you want to command from — Discord or Signal (whichever your administrator has enabled).
  3. Provide a Local API Key. Choose the scope you need (read for status only, write for start/stop/restart) and paste in a matching Local API Key. The key is used once to prove install authority and is never stored or shown again.
  4. Get your code. The dashboard shows an 8-digit code.
  5. DM the code to QBxBot. From the account you want to command with, send the bot verify followed by your code (for example, verify 12345678). On Signal, you DM that code to your install’s QBxBot Signal number.
  6. Done automatically. The dashboard is watching for that message — when QBxBot receives it from your account, the link flips to verified on its own. There is nothing else to click.
Why the code is DM'd, not typed

Control is proven by the message arriving from your account, not by you claiming an account ID or number. This is what makes the link trustworthy — only the real owner of that account can complete it. It works identically on Discord and Signal.

About the Local API Key

The link is bound to a Local API Key, and the key’s scope decides what your link may do:

  • A read key allows status checks only.
  • A write key allows start, stop, and restart (and includes read).

If you rotate or clear the bound key in API Settings, the link is disconnected automatically and you will need to link again with the new key. The dashboard shows a “needs relink” indicator when this happens. Installs that use a database-stored key (rather than an environment key) get the cleanest disconnect behavior.


Commands

QBxBot understands a fixed catalog of commands, split into two broad kinds: reads, which only report state and never change anything, and administrator actions, which change something on the install and always ask you to confirm first. Which of these you can actually run depends on what your administrator has turned on (the catalog) and on your role — see Available commands below.

Service control

These act on a specific app’s service. You always name the app, for example status sonarr or restart radarr. A regular user can only act on their own apps; an administrator can target any user’s app by adding the username (for example, restart sonarr alice).

CommandWhat it doesConfirmationKey scope
status
Reports whether an app's service is running
No
Read
start
Starts an app's service
No
Write
stop
Stops an app's service
Yes — reply to confirm
Write
restart
Restarts an app's service
Yes — reply to confirm
Write

When you send stop or restart, QBxBot replies asking you to confirm. Reply to confirm and the action runs; ignore it and nothing happens.

Status checks

These are read-only — they report your own state and never change anything, so they need only a read-scoped key and never ask for confirmation. They take no app name; QBxBot answers for everything you have.

CommandWhat it reports
status all
The running state of every app you have installed
disk
Your own disk and storage usage against your allowance
vpn
Your own VPN status and which of your apps are routed through it
downloads
Active download counts across your own download clients
Status checks are always your own

The disk, vpn, and downloads checks only ever report your own account — there is no way to see another user’s downloads or VPN status, even for an administrator.

Administrator reports

These read install-wide or per-user information and are available only to administrators. Like the status checks they are read-only and never ask for confirmation.

CommandWhat it reports
telemetry
Live CPU, memory, and disk for the server
apps
Which system-wide apps are installed
db
Database health, version, and size
user <username>
An account summary for one user — status, level, apps, sessions, 2FA
fail2ban
Fail2Ban status and current ban counts
quota
Install-wide storage allowance and how much is used
updates
How many apps, plus QuickBox and the dashboard, have updates available
Command names shown here are illustrative

Your administrator chooses which commands are available and may set up shortcuts, so the exact word you type can differ. The dashboard always shows you the precise list you can use — see below.

Administrator actions

These change something on the install and are available only to administrators. Every one of them asks you to confirm before it runs, is recorded in the audit log, and reaches the same hardened, internal path the dashboard uses — never a shell, never the public internet. They each need a write-scoped Local API Key. Each action also requires the matching administrator permission, exactly like the equivalent dashboard control.

ActionWhat it doesConfirmation
user.ban
Bans a user (cannot ban yourself or a super-admin)
Strong — confirm and type the username back
user.unban
Lifts a ban and restores the user's access
Confirm to proceed
user.create
Creates an account and emails an activation link
Strong — confirm and type the username back
fail2ban.unban
Removes a Fail2Ban ban for a given IP address
Confirm to proceed
backup.trigger
Starts a backup of a chosen type
Confirm to proceed
app.update
Updates an installed app to its latest version
Confirm to proceed
quota.enable / quota.disable
Turns storage-quota reservation on or off install-wide
Confirm to proceed
quota.set
Sets a single user's storage allowance in GB
Confirm to proceed
geoblock.disable
Turns off geo-blocking install-wide
Confirm to proceed
network.speedtest
Runs a download, upload, and latency test against the network test server and reports the result
Confirm to proceed
No password ever travels through chat

When you create a user from chat, you give only a username and an email address — never a password. QBxBot creates the account and emails the new user an activation link so they set their own password. No password is ever typed into, or sent back through, the chat.

The strongest actions ask you to type the target back

Banning a user and creating a user are the two highest-impact actions, so they use a stronger confirmation: QBxBot replies with a short-lived code, and to go ahead you reply with both the code and the target username (for example, CONFIRM 1a2b3c alice). A mistaken tap or a single stray reply can never complete one of these on its own.

Available commands

You do not have to guess what works. The Command Channel section of your Profile shows an Available commands list of exactly what you can run on this install — already filtered to what your administrator has exposed and what your role allows. A command whose underlying feature is not present on the install (for example, the VPN check when no VPN is set up) is shown greyed out with a short reason, so the list never offers something that would not work.

Custom aliases

An alias is your own shortcut name for a command you are allowed to run, so a longer command becomes a single word — for example, an alias called killplex that maps to restart plex. You build aliases from the Command Channel section of your Profile: pick a command from your available list, name the alias, and fill in any details it needs (such as the app). An alias is only ever a shortcut to a command you are already authorized for — it can never reach a command outside your permissions, and any confirmation a command requires (like stop or restart) still applies when you run it through an alias.

Cross-user aliases (administrators)

Administrators can build aliases that run a command against another user’s apps, from the Cross-User Command Aliases area of the admin Command Channel tab. You pick the target user and a command, and the alias is saved for that user. The command runs as you, targeting the user you chose, and only apps both you and that user have installed are offered.


QBxBot’s avatar

QBxBot ships with the official QBXWatcher mascot as its avatar. Administrators can replace it with their own image from the bot avatar slot in the Asset Management Center branding panel. Provide a square image (PNG, JPG, or WebP); it is cropped to a square for use as the bot’s avatar.


Security

The Command Channel is deliberately narrow and layered:

Closed command set

QBxBot can only run a fixed list of commands an admin turned on — never arbitrary or shell commands

Layered authority

Your verified account, your role and own apps, the right administrator permission, and a valid Local API Key must all line up

Confirmation for every change

Stop, restart, and every administrator action require a confirmation reply; banning or creating a user needs the stronger type-the-target confirm

Kill switches

An install-wide switch and your own per-account opt-out both shut the channel off instantly

Key-bound

Rotating or clearing the bound Local API Key disconnects the link automatically

Rate-limited and audited

Commands are rate-limited, and every attempt and outcome is written to the audit log

Some operations can never be reached from chat

The most sensitive and irreversible operations are simply not in the catalog at all, so no configuration can ever expose them. Rebooting or shutting down the server, deleting a user, running raw database queries, editing configuration files directly, impersonating another account, and shell or terminal access stay dashboard-only by design. The Command Channel can only ever do the deliberately small, bounded set of actions above.


Disconnecting

You stay in control of your own link:

  • Opt out turns the channel off for your account without removing your link — commands are simply ignored until you opt back in.
  • Unlink removes the binding entirely. To use the channel again you link your account from scratch.

An administrator’s install-wide kill switch overrides everything: when it is off, no command runs for anyone.


Messaging platforms

Discord and Signal are equal, first-class ways to command your install. The command catalog, the off-until-enabled gating, the key binding, QBxBot’s avatar, and the outbound-only reachability are all the same no matter which platform you use.

  • Discord — One bot powers everything. An administrator creates a Discord application with a bot, enables its Message Content intent, gets the bot into a server its users share, and pastes the bot token into the install. That single token both receives commands and sends alerts. Users then link their Discord account.
  • Signal — An administrator gives QBxBot a Signal identity — by Link Device (attaching to an existing Signal account by QR scan, recommended) or Register Number (claiming a dedicated number with a captcha and SMS code) — then arms Signal. Users then link their Signal account by DMing a code to QBxBot’s number, exactly like Discord.

You can enable one platform or both. Whichever you use, linking works the same way: get a code in the dashboard, DM it from the account you want to command with, and the link verifies automatically. After that, the commands you send are identical.


Best practices

Do

  • Expose only the commands you actually want available — keep the catalog tight
  • Use a read-scoped Local API Key if you only need status checks
  • Prefer a database-stored Local API Key so rotation disconnects links cleanly
  • Review the command audit log periodically to see what has been run
  • Use the per-account opt-out to pause your own access whenever you want

Don't

  • Don't share your linked messaging account — control of that account is control of your apps
  • Don't expose more commands than your users need
  • Don't forget that rotating the bound API Key requires re-linking before commands work again

FAQ

No. Your install runs one Discord bot, and it does both jobs: it receives the commands you DM it and sends your alerts back as DMs. The same bot token powers both directions. An administrator sets up that one bot and enables inbound commands on the command tab of Settings > Notifications — there is no separate community bot to join. On Signal, an administrator gives the install one Signal identity that works the same way.
The bot token is bidirectional — it sends alerts as private DMs and it receives the commands you DM it. A webhook is outbound-only: it posts messages into a Discord channel and can never receive anything. So commands always run through the bot. A webhook is just an optional extra if you also want your alerts to land in a channel. For commanding your install, only the bot matters.
By default, once your Discord account is linked and your admin has enabled the bot, your alerts arrive as private bot DMs — nothing else to set up. If you've also added a Discord webhook in your Profile, your alerts can post to that channel too. The bot DM is the simplest path and needs no webhook.
The Command Channel is off by default and requires two switches: an administrator must enable it install-wide, and you must opt your own account in and link it. If both are on and a command still does nothing, check that the command you sent is one the administrator exposed and that your bound Local API Key has the right scope.
When you link, the dashboard gives you an 8-digit code that you DM to the bot from your own account. Because the message arrives from your account, the bot can trust it — you never type an account ID into a form. From then on, only that verified account can command on your behalf.
Only administrators can target another user's apps, by including the username in the command. Regular users can only act on their own apps.
If your administrator has exposed them, you can ban and unban users, create a user (an activation email is sent — no password ever travels through chat), lift a Fail2Ban IP ban, trigger a backup, update an app, turn storage-quota reservation on or off, set a user's storage allowance, turn off geo-blocking, and run a network speedtest. Every one of these asks you to confirm first, is recorded in the audit log, and needs the matching administrator permission. Irreversible operations like deleting a user, rebooting the server, raw database queries, or editing config files are never available from chat — they stay in the dashboard.
Those two actions have the highest impact, so they use a stronger confirmation. QBxBot replies with a short-lived code and you reply with both the code and the target username — for example 'CONFIRM 1a2b3c alice'. This way a mistaken tap or a single stray reply can never complete a ban or a new account on its own.
Rotating or clearing the Local API Key your link is bound to disconnects the link automatically. You will need to link your account again using the new key. The dashboard shows a 'needs relink' indicator when this happens.
No. QBxBot only understands a closed, server-defined list of commands, and only the ones an administrator has turned on. There is no way to send it a free-form or shell command — anything it doesn't recognize is ignored.
The Command Channel section of your Profile shows an Available commands list — exactly what works for you on this install, already filtered to what your administrator has exposed and what your role allows. A command whose feature isn't present (like the VPN check when no VPN is set up) appears greyed out with a short reason, so you never have to guess.
Yes, if your administrator has exposed those checks. They are read-only and always report your own account — your disk usage against your allowance, your VPN status and routed apps, and your active download counts. They never reveal another user's information.
An alias is a shortcut name you create for a command you're already allowed to run — for example 'killplex' for 'restart plex'. You build it from the Command Channel section of your Profile. An alias can never reach a command outside your permissions, and any confirmation the command needs still applies when you use the alias.
Administrators have a Command Insights summary and a Command activity audit log on the admin Command Channel tab — totals, denials, success rate, the most active commands and users, and every individual attempt with its outcome. This is an administrator view; there is no separate user-facing command alert feed.
Yes. The Command Channel is outbound-only — your install dials out to Discord or Signal to receive commands, so there is no inbound port to open, no port-forwarding, and no public domain needed. A home seedbox on a residential IP works the same as a hosted server. The only network traffic is your install reaching out to the messaging platform.
None. Unlike exposing a dashboard or web app, the Command Channel never listens for incoming connections. Both Discord and Signal work by your install reaching out, so there is nothing to port-forward and no firewall rule to add.
Yes. Signal is a first-class option alongside Discord. An administrator gives QBxBot a Signal identity once — either Link Device (attaching to an existing Signal account by QR scan) or Register Number (claiming a dedicated number) — then arms Signal. From then on users link their Signal account and send commands exactly like Discord.
Use Link Device unless you specifically need a separate number. Link Device attaches QBxBot to your existing Signal account as a second device (like Signal Desktop) by scanning a QR code — your phone stays signed in and nothing is taken over. Register Number claims a phone number outright, so it requires a dedicated number that no personal Signal account uses; registering a number that is already in someone's personal Signal account signs that account out on their phone.
Signal requires a captcha plus an SMS (or voice) verification to register any number. It is a one-time administrator step done with Signal commands turned off, and only applies to Register Number mode. Link Device mode uses a QR scan instead and has no captcha or SMS step.
No. You never type a phone number into a form. You DM an 8-digit code to QBxBot's Signal number from your own Signal account, and the link verifies automatically because the message provably came from your account — the same trust model as Discord.
Your Discord bot needs the Message Content privileged intent enabled in the Discord Developer Portal, under your application's Bot settings. Without it the bot connects but receives blank message text, so commands never register. The intent is self-serve for bots in fewer than 100 servers.

Join the Community

Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.

Dedicated Support
Feature Previews
Community Configs
Active Discussions
Join Discord Server
Last updated on