Skip to content

Commands and permissions ​

/shitbot whitelist is available on every platform and requires shitbot.admin. Use /shitbot whitelist add - Steve for a whitelist entry without QQ, or /shitbot whitelist add 123456789 Steve to add a QQ binding directly. See Plugin API and whitelist management for removal, pagination, and QQ lookups.

QQ examples on this page use language: "en_US". For Chinese aliases, use zh_CN and the Chinese command reference.

Administration commands ​

The main command is /shitbot, with alias /sbot.

CommandPurposePermission
/shitbot statusShow database, OneBot, and runtime statusNone
/shitbot reloadReload configuration, database, OneBot, images, and command servicesshitbot.admin
/shitbot updateDownload and install an update for this platformshitbot.admin
/shitbot imageGenerate an online status image manuallyshitbot.admin
/shitbot editorCreate a short-lived, one-time editor login URLshitbot.admin
/shitbot migrate easybot [EasyBot.db]Import EasyBot bindingsshitbot.admin

Spigot and Nukkit-MOT grant shitbot.admin to OPs by default. BungeeCord and Velocity check it through their platform permission systems.

/shitbot reload creates a new runtime first and retains the old one if loading fails. Restart normally after JAR, Java, or TLS file changes.

QQ binding ​

Built-in English aliases:

text
bind <Minecraft ID> <verification code>
/bind <Minecraft ID> <verification code>

The code is generated when an unbound player tries to join. The binding settings control QQ/Minecraft ID binding rules.

Online status and inventories ​

Built-in English commands:

text
server status
online players
inventory
my inventory
inventory <Minecraft ID>
my inventory <Minecraft ID>
profile
profile <Minecraft ID>

When a Minecraft ID is supplied, ShitBot verifies that it belongs to the sender's QQ account. You cannot query another user's character. The profile command follows the same ownership rule and uses the newest binding when no ID is supplied. Its built-in card puts the skin on the left and optional permission group, points, and persisted online time on the right. Empty or unavailable PlaceholderAPI values are omitted.

TPS ​

Configure TPS in commands.yml:

yaml
tps:
  enabled: true
  permission: ""
  server: ""

Aliases, success text, and failure text are under console.tps in the selected language file.

  • Standalone servers and Nukkit-MOT query locally.
  • Proxies can specify a default backend in server.
  • Group members can append a backend, for example TPS survival.
  • An empty permission skips the game permission check, but group restrictions and cooldowns still apply.

QQ shortcuts ​

Define each shortcut under shortcuts in commands.yml:

yaml
shortcuts:
  luckperms-editor:
    enabled: true
    command: "lp editor"
    permission: "shitbot.admin"
    allow-unbound: false
    target: "backend"
    server: ""
    capture-seconds: 5

Built-in aliases and reply templates are under console.shortcuts.<name> in the language file. For a new custom shortcut without a corresponding language entry, aliases, message, and failed in commands.yml are fallbacks.

SettingMeaning
aliasesTrigger text in QQ
commandConsole command without the leading /
permissionGame permission required for the bound character; empty skips the game permission check
allow-unboundAllow unbound QQ accounts; off by default
targetbackend runs on a Bukkit backend; proxy runs on BungeeCord/Velocity
serverDefault backend; if empty, prefer the bound character's current backend
capture-secondsTime to wait for and collect new console log output

An empty permission still requires a bound character by default. Only an explicit allow-unbound: true permits unbound group members; use it carefully because it weakens the permission boundary.

Group members can override server by appending a backend:

text
lp editor survival

Advanced QQ image commands ​

Advanced templates do not register commands themselves. Declare each group entry explicitly under image-templates.commands in commands.yml:

yaml
image-templates:
  commands:
    player-card:
      enabled: true
      aliases:
        - "my card"
      template: "player-card"
      player-source: "argument"
      target-server: "survival"
      permission: "shitbot.image.player-card"
      cooldown-seconds: 10
      usage: "%at% Usage: my card <bound character>"
      failed: "%at% Image generation failed: %result%"
SettingMeaning
aliasesGroup triggers; avoid conflicts with built-in commands, TPS, or shortcuts
templatePublished template ID
player-sourcebound selects the most recently bound character; argument verifies the supplied character belongs to the sender; none does not read bindings
target-serverSpigot backend handling permissions and PAPI in proxy deployments
permissionPermission required for the selected character; empty skips the check
cooldown-secondsSeparate cooldown for this template command, keyed by group and QQ
usage / failedInvalid-argument and rendering-failure replies; support %at%, %result%, %command%, and %server%

Permission requests only check permissions; they do not execute console commands. player-source: none with a nonempty permission cannot authorize a request because no character is available to check. Enable custom-image-templates.enabled: true in config.yml as well. See Image rendering and advanced templates.

Permission resolution ​

For a shortcut with a permission, a Spigot backend checks:

  1. Bukkit permissions if the character is online.
  2. LuckPerms, then Vault, then offline OP status if the character is offline.

Proxy-local commands use proxy permissions; LuckPerms on the proxy can provide offline permissions. Nukkit-MOT uses its platform permissions for online characters and LuckPerms, if installed, for offline ones.

Command output ​

Before executing a shortcut, ShitBot records the log position. After capture-seconds, it reads newly appended content:

  • Bukkit reads logs/latest.log.
  • Nukkit-MOT reads logs/server.log.
  • Original log files are not modified.
  • Each reply retains at most 100 lines and 4,000 characters.
  • Player chat, joins/leaves, and command execution logs are removed from the reply copy.
  • Player names, UUIDs, IPs, tokens, passwords, and database addresses are redacted in the reply copy.

If execution succeeds without new log output, the bot says so explicitly.

Applying changes ​

After saving commands.yml or a language file:

text
/shitbot reload

For proxy/backend deployments, finish editing both sides before reloading each instance. Restart after changing transport addresses, certificates, or firewall settings.

Installation · Configuration · Development