Skip to content

Tips and Pitfalls

DomeNinchen edited this page Oct 24, 2026 · 7 revisions

Tips and Pitfalls

Things that look like bugs but aren't, and behaviour that is genuinely surprising. Most of these cost somebody an afternoon before they got written down.

Permissions

A channel group beats a permission set directly on a client. This is the single most common misconception — granting something to one person specifically does not make it win. See Permissions for the full order and where it is documented.

TeamSpeak's built-in template groups cannot be assigned to anyone. Every server ships with template versions of Channel Admin, Operator, Voice and Guest alongside the real ones. They exist as blueprints for new virtual servers. Trying to assign one fails with "invalid group ID" (error 2560). This app only offers the assignable groups in its pickers, but if you work with the query interface directly, this is why an assignment may be rejected for no apparent reason.

Automatic Groups changes every virtual server, and cannot be undone. The Permissions mode that adds or removes permissions on a whole type of server group is not limited to the server selected in the sidebar: TeamSpeak applies it to the matching groups on all virtual servers of the instance, and nothing remembers the previous values. Read Automatic Groups and export the groups first, especially on a shared installation.

Assigning the default channel group makes the entry disappear. TeamSpeak only records channel group assignments that differ from the server's configured default. Put a client into the default group and their entry vanishes from the list — because "explicitly in the default group" and "never assigned anything" are the same state as far as the server is concerned. Nothing was lost.

The "Needed Powers" permissions have no descriptions. In Simple mode most permissions show a readable description, but the 255 i_needed_modify_power_* entries fall back to their raw names. Those are mechanically generated — one per real permission — and TeamSpeak simply never wrote descriptions for them. Not a display bug.

Permission changes are not saved until you press Save. The editor collects changes locally and shows a counter at the top. Navigating away loses them.

A channel's icon is a permission, and channeledit refuses it. On TeamSpeak 6 a channel's icon is the channel permission i_icon_id; channel_icon_id is only the value the server derives from it. channeledit and channelcreate answer "invalid parameter" (error 1538) to channel_icon_id for every value — 0 included — although the server's own command reference lists it. To set an icon over the query interface, add i_icon_id to the channel with channeladdperm; channeldelperm removes it. The Edit Channel dialog does exactly that, see Channels. Checked on TeamSpeak 6.0.0-beta13.1.

Bot Flows

A newly created flow is disabled. Every flow — whether built from scratch or from a template — starts inactive and has to be switched on. If a brand-new flow "does nothing", check this first.

A WebQuery "Store As" result is a list, even for single-row commands. Commands like clientinfo or serverinfo return one row, but the stored value is still an array. Read the first entry: {{temp.name.0.field}}, not {{temp.name.field}}. A flow built before this behaviour changed will render blank until the .0. is added.

Use hasGroup() rather than contains() for group IDs. contains() is a plain substring match, so checking for group "1" also matches a client in groups "10" or "21". hasGroup(csv, id) compares IDs properly.

Fixing a Bot Identity created before the scope fix. If bot flow actions fail with "out of scope", the identity's API key was issued with insufficient access. Settings → Connections → Bot Identity has a Fix Permissions button that reissues it. The key lives in TeamSpeak's own database, so updating this app alone does not repair an existing one.

A corrected Gallery template does not change flows already built from it. Templates are copied at creation time. To pick up the fix, open the flow and use Configure template, which rebuilds it from the current template and replaces nodes you changed by hand. A flow created before that button existed has to be recreated.

A long Delay between Create Channel and the Move into it holds up other flows. The flow's connection sits in the new channel until someone is moved in (see Bot Flows), and while it does, other runs on that virtual server wait before creating a channel. Such a run also cannot go on after a backend restart (see When the backend restarts). Keep the Move right after the Create.

Music Bots

{remaining} and {remaining_min} are not the same thing. {remaining} is the time left in the current track. {remaining_min} is the time left across the whole queue — that track plus everything still waiting behind it. Both are empty for live streams, whose length isn't knowable.

The avatar feature is broken by a TeamSpeak 6 server bug, not by this app. An uploaded avatar shows correctly in a TS6 client but hangs on "Loading Image" in TS3. This was traced to the server software and reported upstream. The description template is unaffected and works.

"Keep played songs" only affects chat downloads. Songs pulled in through !play, !queue or !stream can be cleaned up automatically about an hour after playing. Anything you added deliberately through the Library tab is always kept.

Connections

SSH is only needed for event and chat-command triggers, the Query Console's live events, and the Files page and icon picker. Everything else runs over WebQuery. See Getting Started for why.

"Host" must be reachable from inside the backend container, not from your browser. localhost almost never means what you want here.

SSH credential fields look empty on purpose. The browser is never sent stored credentials back. They show (unchanged) when something is saved; leaving them blank keeps it.

General

Restarting the backend disconnects its query session cleanly — but restart the TeamSpeak server, not this app, if the TS server itself misbehaves. The scheduled restart feature under Settings → Restart restarts this application's containers only, never your TeamSpeak server.

Check Settings → Debug when something silently does nothing. Runtime toggles for ServerQuery, voice bot and rank check logging can be switched on without a restart or an environment variable, and they show exactly which commands are being sent and what came back.


v0.8, last edited 24.10.2026

Getting started

Home
Getting Started
Install on Debian 13
Setup: same machine
Setup: elsewhere / rented
Users and Roles

Using the app

Dashboard
Virtual Servers and Instance
Channels
Clients
Client Database
Permissions
Server and Channel Groups
Moderation
Tokens and Passwords
Files
Icons
Bot Flows
Music Bots
Server Widgets
Server Maintenance
Server Logs
Query Console
Connection Journal
Themes and Appearance

Running it

Administration
Configuration
Deployment
Privacy and Hosting

When something is odd

Tips and Pitfalls
Troubleshooting

Contributing

Development

Repository · Changelog

Clone this wiki locally