TS6 Roadie: a music bot for TeamSpeak 6 with a web dashboard, AFK mover and no query interface needed

TS6 Roadie is a music bot for TeamSpeak 6 that we built for our own community (TGSC Gaming) and are now sharing. It is free and open source (MIT).

GitHub: GitHub - knkwebservices/ts6-roadie: A music bot for TeamSpeak 6 that follows whoever calls it. Plays YouTube and radio. Cog-based, in the style of Red-DiscordBot. · GitHub

How it works

  • No query interface needed. It connects as a normal voice client, so WebQuery, SSH and HTTP query can all stay off.
  • No TeamSpeak client and no virtual sound card. It speaks the protocol itself and sends Opus audio directly.
  • Follows the caller. Ask for music from any channel and, if the bot is idle, it joins your channel. If it is busy playing for someone else, it tells you instead of yanking the music away.
  • Built on Node and TypeScript, structured like Red-DiscordBot: a small core plus cogs you can load, unload and reload from chat, and you can drop in your own.

Music

  • YouTube and anything yt-dlp supports, by link or by search words. !search shows five results and !pick queues one.
  • SoundCloud and Bandcamp links, and Spotify song links.
  • Radio streams with a station list (up to 30) and live song titles. If a station drops, the bot reconnects, and it can switch to a fallback station if one won’t come back.
  • Queue, pause, skip, volume, seek, repeat and moving tracks in the queue.
  • Play history with !again, and playlists you can save, edit and load.
  • Vote skip: a track is skipped when more than half of the listeners agree.
  • Auto-DJ plays a radio station when the queue is empty and someone is listening. 24/7 mode keeps the bot in its channel.

Web dashboard

Send the bot !weblogin in TeamSpeak and it gives you a one-time code to sign in. No passwords are stored. It can run on your own machine or be published on your own HTTPS address behind a reverse proxy.

  • Player tab: now playing, controls, volume, search, queue, recently played, and the radio list.
  • Admin tab: bot health, load/unload/reload cogs, who is in which channel (and bring the bot to one), a radio station editor, a log viewer, Auto-DJ and 24/7 settings, and a check that YouTube still works, with a one-click yt-dlp update.

Community tools (optional)

  • AFK mover: moves people who have been away, muted or idle for a set time (default 30 minutes) to an AFK channel. They get a warning first and are moved back when they are active again. Bot admins and chosen server groups or channels are exempt.
  • Welcome message: a private message to everyone who joins.
  • Public widget: a small page and a data feed for your website showing what is playing and who is online. It is off by default, other sites can only use it if you list them, and anyone can leave their name off with !hideme.

Keeping it running and safe

  • YouTube breaks often. The bot tests it on a schedule and tells the online admins if it stops working.
  • Block people or words from the queue, and set a limit on how many tracks one person can queue.
  • Permissions can be set by server group.
  • It installs as a Windows service with a scripted install, update and roll-back. An update is tested against your real server before it goes live.

Status

This is an early (0.x) release. It has been tested against a TS6 server (6.0.0-beta12.1), and there are 300+ automated tests. The README lists exactly what has been checked on a real server and what has not. For example, the Linux service setup has not been tested. Please expect some rough edges.

It needs Node.js 20.19 or newer, ffmpeg and yt-dlp. The README has the full install steps.

The TeamSpeak protocol code comes from the open-source library @echosixhiya/TeamSpeak-client (MIT), and we are grateful to its author.

If you try it, bug reports and ideas are very welcome, either here or as an issue on GitHub.

Full Changelog

Update: v0.13.0 and v0.14.0 are out

Two new opt-in cogs since the original post:

Steam status tracking — the bot can watch a list of Steam profiles (by SteamID64) and post in the channel when someone starts or switches a game. Needs a free Steam Web API key. !steam add <steamid64> [label] to track someone, plain !steam to see who’s playing what. Silent on restart (never re-announces a game that was already in progress), only posts on an actual change.

Server analytics — tracks peak times, the busiest channels, the most-played songs, and uptime, sampled quietly in the background. !analytics (or !stats) gives a summary; !analytics hours / channels / songs for detail. Runs entirely on the bot’s own history, nothing external needed.

Both are off by default — add "steam" / "analytics" to cogs in config.json to turn them on. Full details and config options are in the README.

Full changelog: ts6-roadie/CHANGELOG.md at main · knkwebservices/ts6-roadie · GitHub

Update: v0.15.0 is out

Twitch live alerts — the bot can watch a list of your community’s Twitch channels and post when someone goes live. Needs a free Twitch app (Client ID + secret from Twitch Developers). !twitch add <channel> [label] to track someone, plain !twitch (or !live) to see who’s live right now. Same quiet-restart behavior as Steam status: never re-announces a stream that was already running, only posts when someone actually goes live.

Off by default — add "twitch" to cogs in config.json to turn it on. Full details in the README.

Full changelog: ts6-roadie/CHANGELOG.md at main · knkwebservices/ts6-roadie · GitHub

Update: TS6 Roadie v0.16.0, v0.17.0 and v0.18.0

Three releases, all aimed at things TS3 servers used to get from separate bots. Every new feature is its own opt-in cog: add it to cogs in config.json, restart, and switch it on with a chat command. Nothing changes until you do.

v0.16.0: Server tools (servertools cog)

  • Support notifier: when someone joins a chosen channel (a support room, say), the online members of chosen server groups get a private message. !notify add Support Room | 12, then !notify on.
  • Live channel names: keeps a spacer up to date, like [cspacer]Online: {online}. Also {record} (most ever online) and {song} (what Roadie is playing).
  • !seen <name>: online now and where, or when someone was last seen.
  • !record: the most people ever online at once.

v0.17.0: Temporary rooms (rooms cog)

  • Join a “Create a Room” channel and Roadie makes you a private channel of your own, moves you in, and makes you its channel admin so you can rename it or set a password.
  • The TeamSpeak server itself deletes the room once it’s empty, so cleanup never depends on the bot.
  • !room takes you back to your room from anywhere.

v0.18.0: Ranks and protected groups (grouptools cog)

  • Ranks for time online: !ranks add 10 9 Regular gives server group 9 after 10 hours online. Time isn’t counted while away or in the AFK channel. Reaching a rank swaps out the lower one and congratulates the person. !rank shows anyone their progress.
  • Protected server groups: only listed people (plus bot admins) may be in a protected group. Starts in warn mode, which only messages the online admins; !protect mode remove makes Roadie take people out.

Heads-up for other TS6 bot developers: on TS6, connected clients are not told about server-group changes made while someone is online, so a bot’s client list can show stale groups indefinitely. v0.18.0 asks the server for a person’s real groups before every group change.

Tested on a real TeamSpeak 6 server (6.0.0-beta13.1): live channel names, the support notifier, temporary rooms (create, channel admin, auto-delete) and ranks. Group protection is covered by automated tests so far.

The bot needs a few extra permissions for these: changing channel names, creating temporary channels, and adding/removing server group members. The README lists them.

Download and full details: Releases · knkwebservices/ts6-roadie · GitHub
How it was built: TeamSpeak 6 Music Bot: Free & Open Source | TS6 Roadie

Feedback and bug reports welcome, here or as a GitHub issue.

TS6 Roadie update: v0.19.0 and v0.20.0

Two new releases of TS6 Roadie, the free, open-source music and server tools bot for TeamSpeak 6. Both are running on our own community server now.

v0.19.0: Event reminders, announcements and a nickname filter

Event reminders (events cog)
Plan game nights right from chat:

  • !event add Friday 8pm | Raid night (also understands tonight 9pm, tomorrow 7:30pm, 10/15 8pm, in 2h)
  • !event add weekly Tuesday 9pm | Fallout 76 night repeats every week
  • !events shows what’s coming up, !going 1 signs you up
  • The bot posts a reminder before it starts, messages everyone going, and pokes them when it starts

Rotating announcements

  • !announce add Join our Discord at ..., then !announce on
  • Posts one message at a time on a timer you set, and only while someone is online

Nickname filter (nickfilter cog, off by default)

  • !nickfilter add <word> to block words in nicknames
  • Catches tricks like l33t spelling and extra symbols
  • Warns the person with a poke, gives them time to rename, then tells admins, moves them to a channel, or kicks them (your choice)

Also: !record reset for admins, and the deploy test client no longer counts as a user.

A note for TS6 server owners: the TeamSpeak 6 client currently has nowhere to show server-wide chat, so Roadie posts events and announcements in its own channel by default.

v0.20.0: Fallout 76 nuke codes and Minerva

For Fallout 76 communities (fallout76 cog):

  • !nukes: this week’s Alpha, Bravo and Charlie codes, plus when they change. !nukes bravo for just one silo.
  • !minerva: where Minerva is right now, or where and when she shows up next. !minerva list shows her upcoming visits.

Nuke codes come from NukaCrypt, who decode them every week. Thanks to them for their public API. Roadie fetches the codes once a week and keeps them, so it isn’t hammering their site.

Minerva’s published schedule through January 2027 is built in, and admins can add or fix visits with !minerva add / !minerva remove.

Get it / update

Questions, bugs and ideas are welcome here or as GitHub issues.

TS6 Roadie update: v0.21.0, Once Human and Icarus lookups

A new release of TS6 Roadie, the free, open-source music and server tools bot for TeamSpeak 6. This one is for survival-game communities.

Once Human: !oh <name>

Look up weapons, armor, mods, attachments, items, deviations, memetics, recipes and more:

  • !oh doombringer gives the best match with its stats (damage, fire rate, magazine, ammo type, rarity), a link to the full page, and other matches you can ask for
  • Data from Once Human DB

Icarus: !icarus <name> (or !ic)

Look up items, creatures, recipes, talents and more:

  • !icarus compound bow gives the best match, its stats, how to craft it (which station and what ingredients), and a link
  • Data from Icarus Database

How it works

Neither site has a public API, so Roadie looks things up live the same way a visitor would, and credits the site in every reply. Thanks to Lucent Enterprises for running both databases. Roadie keeps it light: at most one request a second per site, and it remembers answers for an hour, so repeated questions don’t hit their servers again.

Get it / update

Questions, bugs and ideas are welcome here or as GitHub issues.

TS6 Roadie update: v0.22.0, game groups, staff online, flood guard and a live stats banner

A new release of TS6 Roadie, the free, open-source music and server tools bot for TeamSpeak 6. This one brings back some favorite TS3-era server bot features.

Game groups: let people pick their games

  • !games lists the games on offer, with on the ones you have
  • !game fallout 76 puts you in the “Fallout 76 Player” group; send it again to leave
  • Admins set them up with !game add <group ID> <name>
  • Optional “get role” channel: joining it toggles the group and moves you right back where you were

Staff online

  • !staff (or !admins) shows which staff are on right now, and in which channel
  • New live channel name placeholders {staff} and {staffnames}, for a channel like Staff on: Rob, KrazyIce that updates itself

Flood guard (off by default)

  • Catches channel hopping and chat spam
  • First time: a poke and a warning, and the bot ignores their commands for a minute
  • Again within 10 minutes: tell the admins, move them, or kick them (your choice)
  • Admins and chosen groups are never checked

Live stats banner

A live image for your server’s host banner: your community name, who’s online, the record, what’s playing and the time, updated automatically. Roadie draws it itself and serves it from its dashboard, so nothing has to be uploaded to TeamSpeak.

  • !banner title My Community, then !banner on
  • Put the address it gives you in your server’s host banner settings with a 60-second refresh

Get it / update

Questions, bugs and ideas are welcome here or as GitHub issues.

TS6 Roadie update: v0.23.0, IP guard (VPN/proxy, clones, countries) and a clock channel

A new release of TS6 Roadie, the free, open-source music and server tools bot for TeamSpeak 6. This one brings back two of the most popular TS3-era server scripts.

IP guard: VPN, proxy, clone and country checks

Checks people as they join your server:

  • VPN / proxy: looked up with proxycheck.io (free, about 100 checks a day, or 1,000 with a free account key). Each address is checked at most once a day.
  • Clones: catches too many connections from one address (off by default, since families share an address)
  • Countries: allow only certain countries, or block some (!ipguard countries allow US CA)
  • You choose what happens: tell the admins (the default), move them, or kick them
  • Never checked: bot admins, exempt groups, people you exempt (!ipguard exempt <name>), and anyone on the same network as the server
  • !ipguard check <name> tests someone right now without doing anything

IP addresses are only used for the check. They never show up in chat, on the dashboard or in the widget.

Needs: the bot’s server group needs b_client_remoteaddress_view (view client IP addresses). Server Admin groups usually have it. We confirmed TS6 shares addresses and countries with a bot that has it.

!whois <name> (admins)

Privately shows what the server tells the bot about someone: country, address, client version and platform. Handy for checking your setup.

Clock channel

Live channel names can now show the time and date:

!livename add Clock | [cspacer]{date} | {time}

That gives you a centered Sat, Oct 3 | 9:41 PM channel that keeps itself up to date.

Get it / update

Questions, bugs and ideas are welcome here or as GitHub issues.

TS6 Roadie update: v0.24.0 and v0.25.0, moderation tools, private channels and a channel cleaner

Two new releases of TS6 Roadie, the free, open-source music and server tools bot for TeamSpeak 6. Both bring back favorites from the TS3 bot days.

v0.24.0: Jail, reports and staff meetings (modtools cog)

Jail (admins)

  • !jail Bob 2h spamming moves Bob into a Jail channel and tells him why and for how long
  • If he leaves, he’s moved straight back with a poke saying how long is left, even after reconnecting or a bot restart
  • Times like 30, 2h, 1d or forever; !unjail lets someone out early, !jailed lists who’s in

Reports (everyone)

  • !report <name> <what happened>: every staff member online gets a poke and a private message with the details and which channel the person is in
  • If no staff are on, it’s saved; admins read them with !reports

Meetings (admins)

  • !meeting pulls every staff member online into your channel

v0.25.0: Private channels and a channel cleaner (privchannels cog)

Private channels

  • Join Get a Channel and the bot makes you a permanent channel of your own and makes you its channel admin, so you can rename it, set a password or decide who can talk
  • Unlike temporary rooms, it stays when you leave; !mychannel takes you back to it from anywhere

Channel cleaner

  • Removes private channels, and sub-channels of any area you choose, once they’ve sat empty for 14 days (adjustable)
  • !cleaner preview shows exactly what would go before you switch it on
  • Never touches a channel with someone in it or with sub-channels, or important ones like your lobby, AFK and Jail

Also: the AFK mover now leaves people in Jail alone.

Get it / update

Questions, bugs and ideas are welcome here or as GitHub issues.

TS6 Roadie v0.26.0 is out: live server name, support channel opener, always one empty channel, channel name filter and auto-move on connect

Five more things TS3 servers used to get from separate bots. No new cogs and no config changes: if you run servertools, rooms, nickfilter and grouptools, you already have them. Everything is off until you switch it on.

Live server name
Keeps the server’s own name up to date, like “TGSC Gaming | 12 online (record 30)”. Same placeholders as live channel names ({online}, {record}, {song}, {staff}, {time}, {date}).
!servername set TGSC Gaming | {online} online (record {record}) then !servername on

Support channel opener
Your support channel is open while staff are online, and closes (max clients 0) a couple of minutes after the last one leaves or goes away, so nobody sits waiting in an empty support room. It can also switch the name, like “Support” / “Support (closed)”.
!support channel Support, !support names Support | Support (closed), !support on

Always one empty channel
Numbered channels like “Squad 1”, “Squad 2” under a channel you choose, with exactly one empty at any time. Someone joins the empty one and the next appears; extra empty ones are removed after 30 seconds.
!rooms spare under Squad Rooms, !rooms spare name Squad {n}, !rooms spare on

Bad channel name filter
Uses the same word list as the nickname filter. Channels made or renamed with a blocked word get renamed (or removed if empty) within a few seconds, and admins are told. Existing channels are left alone when you switch it on.
!channelfilter on

Auto-move on connect
People in a server group are moved to a channel when they connect, for example Fallout 76 players straight into “Fallout 76”.
!automove add 14 | Fallout 76 then !automove on

Fixed

  • The bot could miss people moving in and out of channels created after it connected (including ones it made itself) until it reconnected. It now subscribes to new channels as they appear, and double-checks its client list with the server every 20 seconds. If you use rooms, private channels, jail or the AFK mover, this one is worth updating for.
  • Deploys no longer roll back just because Windows says the service is “still starting”.

Update:
node C:\tsbot\current\scripts\deploy.mjs --root C:\tsbot --from https://github.com/knkwebservices/ts6-roadie.git --ref v0.26.0

GitHub: GitHub - knkwebservices/ts6-roadie: Music + server tools for TeamSpeak 6: follows whoever calls it, plays YouTube and radio, plus ranks, temp rooms, AFK mover and live alerts. Cog-based, in the style of Red-DiscordBot. · GitHub
Full changelog: Release v0.26.0: Live server name, support channel opener, always one empty channel, channel name filter, auto-move · knkwebservices/ts6-roadie · GitHub

As always, if there’s a TS3 bot feature you still miss, post it here. That’s where most of this list comes from.

TS6 Roadie v0.27.0 is out: text to speech

New opt-in tts cog for members who can’t (or can’t right now) talk:

  • !say <text> reads a message aloud in your channel
  • !tts on reads everything you type to the bot until !tts off
  • " says:" when the speaker changes; music pauses while it speaks
  • Windows voices out of the box, or free offline Piper voices

Add "tts" to cogs and update:
node C:\tsbot\current\scripts\deploy.mjs --root C:\tsbot --from https://github.com/knkwebservices/ts6-roadie.git --ref v0.27.0

Release notes: Release v0.27.0: Text to speech · knkwebservices/ts6-roadie · GitHub