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.
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.
1 Like