Repository navigation
Query Console
System → Query Console, for admins only. Type any ServerQuery command and read TeamSpeak's answer, and listen to what happens on a virtual server while you do. It is the escape hatch for everything TeamSpeak can do over its query interface, including the things no page of the app covers.
The commands run over the server connection's normal WebQuery login, so the console works without SSH. The one exception is live events.
Write a command the way the ServerQuery manual writes it:
clientlist -uid -away
clientkick reasonid=5 clid=1|clid=2
servergroupadd name=Console\sTest
-
Options start with a dash (
-uid); parameters arekey=value. -
Escapes. A space inside a value is
\s, a pipe is\p, a backslash is\\(the manual lists the rest). Ctrl+E escapes the selected text for you, or undoes the escapes if it already contains some. WebQuery itself does not undo escapes, so the console does it before the command goes out. -
Lists use pipes:
clientkick reasonid=5 clid=1|clid=2kicks two clients. A parameter named only in the first item applies to all of them, exactly as in ServerQuery. -
Which virtual server? The dropdown above the transcript, or
use sid=2(alsouse 2oruse port=9988). Instance is for commands that belong to no virtual server, such asserverlistandinstanceinfo.useis the console's own, because WebQuery has no such command: it only changes where the next commands run. -
helpandhelp <command>are the console's own as well and list every command the console knows.
What WebQuery does not offer at all (login, logout, quit, the ft* file-transfer commands) comes back from TeamSpeak as error 5120, and the console says so.
-
Tab completes command names (including a few the server's own
helpleaves out, marked hidden), options, parameter names and the property names the*editcommands accept. - Under the input, the command's parameters are laid out: which are required, optional or can be repeated, their value ranges and fixed values with their names (
targetmode: 1 = client, 2 = channel, 3 = server), and the permissions the command checks. - Ctrl+Space lists what fits at the caret. For a parameter that holds an id it offers the server's own channels, clients, groups, virtual servers and permissions by name.
- ↑ and ↓ walk through the history. It stays in your browser, and a command that carries a password or key is never kept in it.
The command data is generated from the documentation that ships with a TeamSpeak server. It knows what that documentation lists, and a particular server version may not have every command: TeamSpeak then answers "unknown command".
- A result is shown as a table per set of fields (a long list is folded after 300 rows, Show all opens it). Raw shows the same text a real ServerQuery connection would print, and Copy raw / Copy JSON put it on the clipboard.
-
Click a value to have it explained: a number that is really one of a fixed set of choices (
reasonid,targetmode), a yes/no flag, a Unix time, a size or a duration, or the name behind a channel, client or group id. A value the console does not recognise is left alone rather than guessed at. - Fields that hold a secret (API keys, passwords, tokens,
pw_clear) are hidden until you click Show secrets.
The Send as dropdown turns the input line into a message to the server, to a channel or to one client. Underneath these are ordinary sendtextmessage commands, so the same checks, audit trail and flood protection apply. A message to a channel goes to the channel the app's own query connection is in. The client picker lists voice clients only, because TeamSpeak answers a private message from the console to a query client with "invalid client type".
A few commands destroy data or can lock the app out: permreset, serverprocessstop, serverstop, serverdelete, instanceedit, serversnapshotdeploy, bandelall, complaindelall, channeldelete, clientdbdelete, servergroupdel, channelgroupdel, apikeydel, querylogindel, privilegekeydelete/tokendelete and clientsetserverquerylogin. They only run after you have typed the command's name into a dialog that explains what it will do. The check is made by the backend as well, so it cannot be skipped by going around the page.
The Audit log tab lists every command the console has sent: when, who, on which server and virtual server, the command, TeamSpeak's answer and how long it took. You can search it, show only dangerous commands, only failures, or only the current server.
-
Secrets are masked (
***) in the trail and are never stored anywhere in the clear. - A row is written before the command is sent. If it cannot be written, nothing is sent. A row that stays pending means the backend stopped before TeamSpeak's answer came back.
- A command that changes something also leaves a line in the TeamSpeak server log (
[TS6 Manager] <user>: <command>), which you can read under Server Logs. Commands that only read leave none. - The Settings tab sets how long the trail is kept (90 days by default) and switches the flood protection below on or off.
TeamSpeak blocks the address of anything that sends too many query commands too quickly, and every request this app makes comes from the same address. So the console only uses half of the instance's limit (read from the server, 10 commands in 3 seconds by default) and asks you to wait a few seconds when you go faster. You can switch this off on the Settings tab if your server's allowlist exempts the app anyway.
The Events button above the transcript opens a panel to listen to what happens on a virtual server. Tick what you want to hear and press Start listening:
| Category | You hear |
|---|---|
| Server | clients joining and leaving, changes to the server's settings |
| Channels | channels created, edited, moved and deleted, and clients moving between channels (clients joining and leaving come with this one too) |
| Server chat | messages written to the whole server |
| Channel chat | messages in one channel (see below) |
| Private messages | private messages sent to the console's listener |
| Bans | bans added or removed |
You can also type them the ServerQuery way: servernotifyregister event=server adds a category, servernotifyunregister event=server removes it, and servernotifyunregister on its own stops everything. For channel chat, give the channel: servernotifyregister event=textchannel id=5.
Events appear in the transcript as they arrive, one line each. A click opens every field TeamSpeak sent, and clicking a value explains it like in a result. The transcript only follows the newest line while you are at the bottom, so you can scroll up and read. Save in the panel writes everything collected so far (the newest 10,000 events) to a text or JSON file; nothing is stored on the server.
- SSH credentials on the server connection, because WebQuery cannot register for events (see Do I need SSH?). Without them the panel says so and stays disabled.
- All admins listening to the same virtual server share one SSH query session of the backend. It is the console's own, not the bots'. It shows up in the client list as
TS6-Console-plus four characters, each admin is only sent the categories they asked for, and the backend closes it a minute after the last one has stopped (reloading the page therefore reuses it). - The server's permissions apply to that SSH login: Bans needs the permission to see the ban list (
b_client_ban_list), the other categories needb_virtualserver_notify_register. A category TeamSpeak refuses is named in the panel. - Listening is part of the audit trail: one row when you start (which categories) and one when you stop, with how long you listened.
- The backend re-checks every minute that your account is still an admin, and a stream that has been silent for 45 seconds is retried automatically.
TeamSpeak delivers the chat of the channel the listener is in; it does not take a channel as a setting. So for Channel chat the console moves its listener into the channel you pick, and one virtual server can have only one channel's chat listened to at a time. If another admin already listens to a different channel's chat you are told which one; the same channel can be shared. If the channel is deleted while you listen, the panel reports it instead of delivering another channel's messages.
- The feed is everything TeamSpeak reports, including ServerQuery clients coming and going (they show up as
serveradmin), so a quiet server is not completely silent. - Private messages stays quiet in practice: only another ServerQuery client can send one to the listener, voice clients cannot.
- A wrong SSH password is not tried again for a minute, and fixing it in the server connection's settings lifts that at once. Repeated failed logins are what gets a query login banned by TeamSpeak.
- Editing the server connection (its address or SSH login) or deleting it ends its listeners, because they were opened with the old settings.
- If TeamSpeak restarts while you are listening, the panel says it is reconnecting and carries on by itself.
v0.2, last edited 09.10.2026
Getting started
Using the app
Running it
When something is odd
Contributing