Ban Lookup
Ban lookup checks a ticket's opener against the ban lists you choose when the ticket opens, then shows staff a private card with what it found: banned or not, the reason, when, until when, and who issued it where the source says so. It is built for ban appeal categories, so staff can review an appeal without hunting through four dashboards.
Community and Pro
Ban lookup is included with Community and Pro. On Free the Ban lookup card on the category shows an upgrade prompt.
Sources
| Source | What it checks | Setup |
|---|---|---|
| Discord server bans | This server's ban list | None. The bot needs Ban Members |
| BattleMetrics | Active bans in your BattleMetrics organization | A BattleMetrics connection, plus the opener's Steam link |
| Roblox | Bans (user restrictions) in your Roblox experience | A Roblox Open Cloud connection, plus a Roblox account |
| Steam | Global VAC, game and trade bans on the opener's Steam account | None, but the opener must share a Steam account |
| Minecraft | LiteBans, AdvancedBan or LibertyBans bans on your server | A Minecraft plugin key, plus a Minecraft link |
| FiveM / RedM | txAdmin or the server's own bans | A FiveM plugin key. Matched by Discord ID |
| Garry's Mod | ULX, SAM or banned_user.cfg bans | A Garry's Mod plugin key, plus a Steam link |
| Rust server | Your Rust server's own ban list | A Rust plugin key, plus a Steam link |
| Counter-Strike 2 | CS2-SimpleAdmin or the server's own bans | A CS2 plugin key, plus a Steam link |
Each source runs in parallel and gets 5 seconds. A source that is slow, rejects its key, or errors shows as Unavailable on the card with a hint. The ticket always opens.
When a support flow checks bans while the member waits for the bot to answer a button press, the check gets about 1.8 seconds instead, because Discord only waits 3 seconds for a reply. A source that misses that window counts as not checked, so the flow can send the member down a "couldn't check" path rather than telling them they have no ban.
Turn it on for a category
Open the category
Go to Dashboard → Categories, edit your appeals category and open Game server tools at the bottom of the General tab.
Pick sources
In the Ban lookup card, switch on Check bans when a ticket opens and tick the sources to check. Sources that need a connection show whether one is set up, with a link to the Connections page.
Decide where staff see it
Switch on Create staff thread on the Behavior tab if you want the card posted in the ticket's private staff thread. Without a staff thread, the ticket gets a short notice with a View ban lookup button that only staff can use; it opens the card privately.
Save
Answers are cached for 10 minutes per member and source, so reopening a ticket straight away doesn't hit the APIs again. A source that was unavailable is tried again on the next ticket.
The opener never sees the card. It is not posted as a normal ticket message, so it never appears in a transcript or in the transcript DM.
Discord server bans
No connection is needed. The bot needs the Ban Members permission to read the ban list; without it the source shows as unavailable with a reminder to grant it.
With View Audit Log as well, the card adds the date and the moderator for bans still in the audit log (Discord keeps it for 45 days). Discord bans have no expiry.
Appeals from banned members
Someone banned from your server usually can't open a ticket there. Run appeals from a separate appeals server or let banned members reach a category they can still see.
BattleMetrics
BattleMetrics bans are matched by SteamID, so the opener needs to have linked their Steam account and shared it with your server. See Linked Accounts. Without one, the source shows No account and nothing is sent to BattleMetrics.
Create a personal access token
- Sign in at battlemetrics.com and open the Developers page from your account menu.
- Create a new personal access token and give it permission to view bans for your organization. Nothing else is needed.
- Copy the token. BattleMetrics only shows it once.
BattleMetrics may require an active subscription before a token can call its API.
Connect BattleMetrics
- Go to Dashboard → Automations → Connections.
- Find BattleMetrics under Lookups and click Add.
- Paste the token. Optionally add your Organization ID to only count bans issued by your organization.
- Save. Ticket Tool checks the token right away.
The card shows the newest active ban, its reason, when it was issued, when it expires, the admin who issued it and the server it was issued on.
Roblox
Roblox bans come from Roblox's Open Cloud user restrictions API for one experience. Ticket Tool finds the opener's Roblox account through Bloxlink first (see Roblox Lookups), then through a Roblox account they linked and shared.
Create an Open Cloud API key
- Open the Roblox Creator Dashboard and go to Open Cloud → API Keys.
- Create a key. Under Access Permissions, add the user-restriction API system, choose your experience and allow the read operation (
universe.user-restriction:read). - Set Accepted IP Addresses to allow requests from anywhere (
0.0.0.0/0), since requests come from Ticket Tool's servers. - Save and copy the key.
Find the universe ID
On the Creator Dashboard, open your experience's menu (the ⋯ button) and choose Copy Universe ID. The universe ID is not the place ID in the game's URL.
Connect Roblox Open Cloud
- Go to Dashboard → Automations → Connections.
- Find Roblox Open Cloud under Lookups and click Add.
- Paste the API key and the universe ID, then save.
The card shows the private reason (or the reason shown to the player), the start date, when a timed ban ends, and whether alt accounts are included.
Steam
Steam's global record comes from the Steam account the opener shared with your server. Steam reports counts and the days since the last ban, not reasons, so it is shown as context: for example "1 VAC ban, trade banned". Steam results follow the Steam profile cache, which refreshes daily.
Game server plugins
Minecraft, FiveM and RedM, Garry's Mod, Rust and CS2 bans are reported by a plugin on your own server, which answers over an outbound connection. Ticket Tool never connects to your server or its database. See Game Server Plugins for setup.
- How the opener is matched: Minecraft by the account they linked in game, FiveM and RedM by their Discord ID, and Garry's Mod, Rust and CS2 by the Steam account they shared with your server.
- What the card says when it can't check: Not set up with no plugin key, Unavailable when the plugin is offline or doesn't answer in time, and a note such as No Steam account shared with this server when there is nobody to look up.
- Ban source: the card names it, such as LiteBans, txAdmin, ULX, SAM or CS2-SimpleAdmin.
- Minecraft links made on another server are only a claim on yours, so their result is never counted as a ban or a clean record:
{bans.minecraft.status}isclaimed. See Verified here, claimed elsewhere.
Staff buttons
| Button | What it does |
|---|---|
| Refresh | Checks every source again, skipping the cache. Presses within 30 seconds of a fresh check use the cached result instead |
| Save to notes | Writes a one-line summary into the ticket's staff notes, with your name and the time |
Ban results are not stored anywhere else. Save to notes is the only way to keep a record on the ticket.
Variables
Use these in the category's messages and in support flows. In messages the opener can see, keep reasons out unless you mean to share them.
{bans.count}: How many checked sources report a ban{bans.any}:trueif any source reports a ban,falseif none do{bans.<source>.banned}:trueorfalsefor one source{bans.<source>.reason}: The ban reason, when the source gives one{bans.<source>.created}: When the ban started (YYYY-MM-DD){bans.<source>.expires}: When it ends (YYYY-MM-DD), orneverfor a permanent ban{bans.<source>.actor}: Who issued it, when the source says{bans.<source>.status}:checked,unavailable,no_account,not_set_uporclaimed(Minecraft only: the account wasn't verified on your server)
Replace <source> with discord, battlemetrics, roblox, steam, minecraft, fivem, gmod, rust or cs2, as in {bans.battlemetrics.reason}. If no source could be checked, {bans.count} and {bans.any} are empty, so an outage never reads as a clean record. The variables reference lists every variable in one place.
Ban appeal flows
Add a Condition node and pick the Is banned preset, then choose a source or Any source. Banned members take the Banned branch; everyone else, including members whose source was unavailable, takes the else branch.
The Ban appeal with ban lookup template, under Automations → Flows → Templates, is a ready-made appeal panel: it checks the member's bans, tells someone with no ban on record so, and collects the appeal in a form either way. See Ban appeals for a full walkthrough.
Troubleshooting
| Card says | Fix |
|---|---|
| Discord: Unavailable, Ban Members | Give the bot's role the Ban Members permission |
| BattleMetrics: Unavailable, rejected the token | Create a new token with permission to view bans, then edit the connection |
| Roblox: Unavailable, rejected the key | Check the key has universe.user-restriction:read for this universe and its IPs |
| Not set up | Add the connection under Automations → Connections |
| No account | The opener hasn't linked or shared the account that source needs |
| Didn't answer within 5 seconds | The source was slow. Press Refresh a little later |