keyauth_bot/cogs/licops.py for /license,
keyauth_bot/cogs/licadmin.py for /licops). This page is maintained by hand — if a command
here looks out of date, the source is the final authority.
Lookup & customer records
/license lookup — Look up a license by key, username, or Discord user
/license lookup — Look up a license by key, username, or Discord user
identifier accepts a license key, KeyAuth username, Discord mention/ID, or hardware ID.
Opens the action panel — see Panel actions below.Rate-limited to 10 uses per 60 seconds per user.Permission: license.viewExample: /license lookup identifier:@SomeUser/license customer — Customer support profile
/license customer — Customer support profile
identifier accepts a Discord mention/ID or a KeyAuth username. Returns a rolled-up support
profile with buttons to open the full license panel and, with license.view_history, its
history.Permission: license.viewExample: /license customer identifier:@SomeUser/license search — Filtered, paginated search
/license search — Filtered, paginated search
status is one of: Active, Expired, Disabled, Revoked. Runs against the local
mirror, not a live KeyAuth call, because KeyAuth’s fetchallkeys has no server-side filter
or cursor. page defaults to 1.Permission: license.viewExample: /license search status:Active expires_in_days:7Account linking
/license link — Link a Discord user to a KeyAuth account
/license link — Link a Discord user to a KeyAuth account
identifier accepts a license key or KeyAuth username. Triggers a role sync for that member
on success.Permission: license.linkExample: /license link member:@SomeUser identifier:XXXXX-XXXXX-XXXXX-XXXXX/license unlink — Remove a user's account link
/license unlink — Remove a user's account link
license.unlinkExample: /license unlink member:@SomeUser/license transfer — Transfer a license's Discord association
/license transfer — Transfer a license's Discord association
reset_hwid defaults to true and is recommended. Syncs roles onto the new owner and off
the old one on success.Permission: license.transferExample: /license transfer identifier:SomeUser to:@NewOwner reason:Account sold reset_hwid:TrueConfiguration
Reset policy
/licops policy show — Show the current HWID reset policy
/licops policy show — Show the current HWID reset policy
license.admin/licops policy set — Update the HWID reset policy
/licops policy set — Update the HWID reset policy
max_resets:0 means
unlimited.Permission: license.adminExample: /licops policy set max_resets:2 window_days:30 cooldown_hours:72Role mappings
/licops roles map — Map a subscription to a Discord role
/licops roles map — Map a subscription to a Discord role
subscription must match the KeyAuth subscription name exactly. All three boolean flags
default to true. Refused if role sits at or above the bot’s own highest role.Permission: license.role_syncExample: /licops roles map subscription:premium role:@Premium/licops roles unmap — Remove a subscription-to-role mapping
/licops roles unmap — Remove a subscription-to-role mapping
license.role_syncExample: /licops roles unmap subscription:premium/licops roles list — List role mappings
/licops roles list — List role mappings
license.view/licops roles sync — Re-sync one member's roles now
/licops roles sync — Re-sync one member's roles now
license.role_syncExample: /licops roles sync member:@SomeUserCapability grants
/licops permissions grant — Grant a capability to a role
/licops permissions grant — Grant a capability to a role
capability autocompletes against the 17 valid capability keys — see
License Operations for the full list.Permission: license.adminExample: /licops permissions grant role:@Support capability:license.hwid_reset/licops permissions revoke — Revoke a capability from a role
/licops permissions revoke — Revoke a capability from a role
license.adminExample: /licops permissions revoke role:@Support capability:license.hwid_reset/licops permissions list — Show capability grants and available capabilities
/licops permissions list — Show capability grants and available capabilities
license.view/licops permissions preset — Grant a standard capability set to a role
/licops permissions preset — Grant a standard capability set to a role
preset is one of: Support (view, history, notes, HWID reset, link), Manager (adds
unlink, HWID override, extend, set-expiration, enable/disable, and role sync). Neither preset
includes anything destructive — revoke, delete, transfer, view_sensitive, bulk, and
admin are always granted explicitly.Permission: license.adminExample: /licops permissions preset role:@Support preset:SupportOperations
/licops reconcile — Re-check licenses against KeyAuth now
/licops reconcile — Re-check licenses against KeyAuth now
limit defaults to 25 and is capped at 200 (each account checked spends API budget).
sync_roles defaults to true. Refuses to start a second run while one is already in
progress, and stops immediately — rather than spending remaining budget — if it hits
KeyAuth’s rate limit.Permission: license.bulkExample: /licops reconcile limit:50/licops status — License Operations health and recent runs
/licops status — License Operations health and recent runs
license.view/licops bulk — Safe bulk reports and role reconciliation
/licops bulk — Safe bulk reports and role reconciliation
operation is one of: Expiring soon report, Orphaned link report, Role reconciliation. execute defaults to false, which previews the operation — including its
API cost — instead of running it.license.bulkExample: /licops bulk operation:Expiring soon reportPanel actions
The/license lookup panel carries buttons for hardware ID, extend, history, notes, refresh,
disable/enable, revoke, and reveal. Only actions the viewer may perform are rendered — but that’s
a UX convenience, not the control: every capability is re-checked server-side on press, and
the account is re-read rather than trusted from the button itself, since a button’s custom_id
is client-visible and technically client-modifiable.
Consequential actions — disable, revoke — always require confirmation and a reason captured in a
modal.