Implemented (subcommands have their own status) · Source comparison: October 6, 2026.
Reviewed October 6, 2026. This page covers the root, registered subcommands and documented internal actions.
Registration permissions
Registration
Handler
Required status (local DB, Oct 6)
Implementation
/bot
500
200
Implemented
/bot create
501
200
Implemented
/bot customize
502
200
Disabled — handler reports unavailable
/bot help
507
200
Implemented
/bot inv
505
200
Implemented
/bot list
504
200
Implemented
/bot settings
506
200
Implemented
/bot spawn
503
200
Implemented
Manage your owned companion bots.
Implementation: Implemented.
Syntax
/bot [action] [bot_id]
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
See the actions and registered subcommands below.
1
bot_id
integer
Owned bot index from /bot list, where the action accepts an ID.
Behavior and restrictions
The dispatcher checks the local command registration before bot access rules are evaluated. BotAccess additionally controls ownership and permitted lifecycle actions.
Persistence evidence in the active path: database.DeleteBot. Each call is subject to its surrounding validation; not every branch saves.
Current argument/client/target checks (exact source excerpts; branch-dependent):
if (sep && sep->IsSet(0)) {
if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {
if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {
if (sep->IsSet(1) && strncasecmp("group", sep->arg[1], 5) == 0) {
Handler failure/help feedback (sent to the player or logged; % fields are formatted at runtime):
You must target a bot
You must give the id (from /bot list) to delete a bot
You must give the id (from /bot list) to have a bot follow you
You must give the id (from /bot list) to stop a following bot
You must target a bot.
/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided
Permissions
Local database snapshot, October 6, 2026: /bot requires status 200 (handler 500). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
race_id
integer
Direct form: argument 0 after create is removed.
1
gender_id
integer
Direct form: argument 1.
2
class_id
integer
Direct form: argument 2.
3
name
text
Direct form: argument 3; normalized before recruitment.
Behavior and restrictions
Bare /bot create opens guided recruitment. The direct form creates and activates the bot, which becomes visible and follows you.
The ui form is an internal guided-recruiter callback. BotLifecycle enforces access, ownership limits and recruitment validation.
BotAccessPolicy requires Bots.Enabled and ownership checks even with GM bypass. Recruitment mode may deny direct recruitment or require a Lua recruiter. Owned/active limits apply; active capacity is capped at five bots and the group at six members.
BotLifecycle accepts supported playable races and final adventure classes, gender 0/1, and a name that passes the database name filter (4..15 letters). Missing appearance, duplicate name, access denial, capacity or database creation failure prevents activation.
Current argument/client/target checks (exact source excerpts; branch-dependent):
if (sep && sep->IsSet(0) && strcasecmp(sep->arg[0], "ui") == 0) {
if (!sep || !sep->IsSet(0)) {
if (!sep->GetInt(0, race_value) || !sep->GetInt(1, gender_value) || !sep->GetInt(2, class_value) || !sep->IsSet(3)) {
Permissions
Local database snapshot, October 6, 2026: /bot create requires status 200 (handler 501). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
/bot create
Source-checked forms; not executed against a live world.
/bot customize (registration only; working syntax unavailable)
Arguments
Working arguments are unavailable. Do not treat historical arguments as supported.
Behavior and restrictions
The active path is explicitly disabled/unavailable and returns a message or help. Historical syntax is not a working interface.
Permissions
Local database snapshot, October 6, 2026: /bot customize requires status 200 (handler 502). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
topic
text
Optional race or class ID list.
Behavior and restrictions
The active handler performs the operation described above after the registration permission check.
Current argument/client/target checks (exact source excerpts; branch-dependent):
if (sep && sep->IsSet(0)) {
Permissions
Local database snapshot, October 6, 2026: /bot help requires status 200 (handler 507). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
/bot inv give
/bot inv list
/bot inv remove <slot>
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
give opens a trade; list shows equipment; remove offers the equipment slot back in a trade.
1
slot
integer
Required only for remove; bot equipment slot.
Behavior and restrictions
Requires your own bot target. Existing trades, ownership and slot validity are checked. The old /bot give and /bot remove spellings in the inventory notes omit inv.
Persistence evidence in the active path: database.DeleteBot. Each call is subject to its surrounding validation; not every branch saves.
Current argument/client/target checks (exact source excerpts; branch-dependent):
if (sep && sep->IsSet(0)) {
if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {
if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {
if (sep->IsSet(1) && strncasecmp("group", sep->arg[1], 5) == 0) {
Handler failure/help feedback (sent to the player or logged; % fields are formatted at runtime):
You must target a bot
You must target a bot.
You must give the id (from /bot list) to delete a bot
You must give the id (from /bot list) to have a bot follow you
You must give the id (from /bot list) to stop a following bot
/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided
Permissions
Local database snapshot, October 6, 2026: /bot inv requires status 200 (handler 505). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
The active handler performs the operation described above after the registration permission check.
Permissions
Local database snapshot, October 6, 2026: /bot list requires status 200 (handler 504). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
setting
text
Appearance or taunt setting.
1
value
integer
1 enables; other numeric values disable.
Behavior and restrictions
The active handler performs the operation described above after the registration permission check.
Persistence evidence in the active path: database.DeleteBot. Each call is subject to its surrounding validation; not every branch saves.
Current argument/client/target checks (exact source excerpts; branch-dependent):
if (sep && sep->IsSet(0) && sep->GetInt(1, val)) {
if (sep && sep->IsSet(0)) {
if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {
if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {
if (sep->IsSet(1) && strncasecmp("group", sep->arg[1], 5) == 0) {
Handler failure/help feedback (sent to the player or logged; % fields are formatted at runtime):
You must target a bot.
You must target a bot
You must give the id (from /bot list) to delete a bot
You must give the id (from /bot list) to have a bot follow you
You must give the id (from /bot list) to stop a following bot
/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided
Permissions
Local database snapshot, October 6, 2026: /bot settings requires status 200 (handler 506). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
bot_id
integer
Owned bot index from /bot list.
Behavior and restrictions
BotLifecycle validates access, ownership and activation limits. Activation is not the same action as inviting the bot to a group.
Permissions
Local database snapshot, October 6, 2026: /bot spawn requires status 200 (handler 503). Other worlds may configure different values.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
invite
1
bot_id
integer
Optional; otherwise selects your owned bot target.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot hold
Pause your active companions.
Implementation: Implemented.
Syntax
/bot hold
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
hold
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot resume
Resume your active companions.
Implementation: Implemented.
Syntax
/bot resume
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
resume
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot camp
Despawn an owned bot and remove it from the group.
Implementation: Implemented.
Syntax
/bot camp [bot_id]
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
camp
1
bot_id
integer
Optional active bot ID; otherwise uses your bot target.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot attack
Command your grouped bots to attack your selected target.
Implementation: Implemented.
Syntax
/bot attack
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
attack
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot spells
Inspect the selected bot’s spell list.
Implementation: Implemented.
Syntax
/bot spells
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
spells
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot maintank
Set the selected group member as the bots’ main tank.
Implementation: Implemented.
Syntax
/bot maintank
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
maintank
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot delete
Delete an owned bot from the database.
Implementation: Implemented.
Syntax
/bot delete <bot_id>
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
delete
1
bot_id
integer
Owned bot ID.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot follow
Order an active bot to follow you.
Implementation: Implemented.
Syntax
/bot follow <bot_id>
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
follow
1
bot_id
integer
Active bot ID.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot stopfollow
Stop an active bot from following you.
Implementation: Implemented.
Syntax
/bot stopfollow <bot_id>
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
stopfollow
1
bot_id
integer
Active bot ID.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
/bot summon
Summon your selected bot or grouped bots.
Implementation: Implemented.
Syntax
/bot summon [group]
Arguments
Position is zero-based in sep, after a registered database subcommand has been removed. Internal action tokens remain at position 0. Angle brackets are required; square brackets are optional. Alternative forms may change field meanings.
Position
Argument
Accepted value / type
Meaning
0
action
text
summon
1
scope
text
group summons your grouped bots; otherwise target is used.
Behavior and restrictions
Handled inside /bot; inherits its registration permission and the bot access checks.
Permissions
Internal action: inherits the /bot registration requirement of status 200. No separate database subcommand row exists for this action.
The dispatcher checks the resolved registration status before invoking the handler. In-handler guild, group, ownership, client-version and target checks still apply.
Examples
The syntax forms above are the source-based invocation examples. Replace identifiers with values valid for your world; client callback fields are supplied by the game client.
No upstream Markdown file exists for this registration in the retrieved revision.
Permissions are from a read-only snapshot of the configured local world database on October 6, 2026; deployed worlds may differ. Argument and behavior evidence comes from the reviewed WorldServer checkout. Examples were checked against source and were not executed in a live world.