Files
chanora/docs/references/teaspeak-offline-reference.md
T
Edison Jwa 2ab8d5aae2 docs(references): add Chanora relevance, backfill placeholders, cross-reference (TODO-079,080,081,083,084)
Add TeaSpeak-to-Chanora SRS mapping and divergence points.
Backfill YaTQA variable parameters, anti-flood actions, and notify
events with structured placeholders. Add error code cross-reference
between YaTQA and ReSpeak sources.
2026-06-11 10:12:35 +09:00

1333 lines
54 KiB
Markdown

# TeaSpeak Offline Reference Document
> Compiled from GitHub repositories (TeaSpeak, TeaWeb, TeaMusic) and archived website (teaspeak.de).
> Last updated: June 2026
---
## Table of Contents
1. [Project Overview](#project-overview)
2. [Architecture](#architecture)
3. [Feature Comparison](#feature-comparison)
4. [Complete Feature List](#complete-feature-list)
5. [Protocol Implementation Details](#protocol-implementation-details)
6. [Audio/Codec Support](#audiocodec-support)
7. [Channel Types and Properties](#channel-types-and-properties)
8. [Permissions System](#permissions-system)
9. [Server Configuration](#server-configuration)
10. [Music Bot System](#music-bot-system)
11. [Chat System](#chat-system)
12. [Token System](#token-system)
13. [ServerQuery Notify System](#serverquery-notify-system)
14. [Ban System](#ban-system)
15. [Web Client Architecture](#web-client-architecture)
16. [Music Bot Architecture (TeaMusic)](#music-bot-architecture-teamusic)
17. [Server Binary Distribution](#server-binary-distribution)
18. [License Information](#license-information)
19. [Known Issues and Limitations](#known-issues-and-limitations)
20. [Properties Reference](#properties-reference)
21. [Feature Support Commands](#feature-support-commands)
---
## Project Overview
**TeaSpeak** is a free-to-use, community-driven VoIP (Voice over IP) communication platform consisting of a server and multiple client implementations. It is designed as an alternative to TeamSpeak with enhanced features, no license fees, and open-source components.
### Components
| Component | Repository | Language | Description |
|-----------|-----------|----------|-------------|
| **TeaSpeak Server** | [TeaSpeak/TeaSpeak](https://github.com/TeaSpeak/TeaSpeak) | C++ (proprietary binary) | The server daemon (issue tracker + docs in repo) |
| **TeaWeb** | [TeaSpeak/TeaWeb](https://github.com/TeaSpeak/TeaWeb) | TypeScript (84.1%), SCSS, HTML | Web client (open source, MPL-2.0) |
| **TeaMusic** | [TeaSpeak/TeaMusic](https://github.com/TeaSpeak/TeaMusic) | C++ (99.3%), CMake | Music bot provider plugins (open source) |
| **TeaClient** | Not open source | Native | Desktop client for Windows/Linux |
### Key Design Principles
- Free to use (no license fees)
- Community-driven development
- Self-hostable server
- Web client (installation-less)
- Built-in music bots
- Hidden/invisible channel system
- Extended ServerQuery interface
- Compatible with TeamSpeak 3 protocol
---
## Architecture
### Server Architecture
The TeaSpeak server is a single binary (`TeaSpeakServer`) written in C++ that handles:
- **Voice connections** via UDP (native TeamSpeak protocol) and WebRTC (for web clients)
- **ServerQuery** via TCP telnet-like interface (default port 10101)
- **File transfer** via HTTP/HTTPS (default port 30303)
- **Web client hosting** via built-in web server
- **Music bot management** with provider plugin system
- **Database** using SQLite (default) or MySQL
- **Instance management** supporting multiple virtual servers
### Network Architecture
```
┌─────────────────┐ ┌──────────────────┐
│ Native Clients │────▶│ UDP Voice │
│ (TeaClient/TS3)│ │ (Port 9987) │
└─────────────────┘ └──────────────────┘
┌─────────────────┐ ┌──────────────────┐
│ Web Clients │────▶│ WebRTC Bridge │
│ (Browser) │ │ (via HTTPS) │
└─────────────────┘ └──────────────────┘
┌─────────────────┐ ┌──────────────────┐
│ Query Clients │────▶│ ServerQuery │
│ (YaTQA, bots) │ │ (Port 10101) │
└─────────────────┘ └──────────────────┘
┌─────────────────┐ ┌──────────────────┐
│ File Transfer │────▶│ HTTP/HTTPS │
│ │ │ (Port 30303) │
└─────────────────┘ └──────────────────┘
```
### Threading Model (1.5.4+)
As of version 1.5.4, the server merges the web, query, and voice client network event loops into fewer threads, reducing resource usage.
---
## Feature Comparison
From the archived teaspeak.de website:
| Feature | TeaSpeak | TeamSpeak | Discord | Skype |
|---------|----------|-----------|---------|-------|
| Community and non-commercial driven | ✅ | ❌ | ❌ | ❌ |
| Spam/Ad free | ✅ | ✅ | ❌ | ❌ |
| Web Client / Installation-less Client | ✅ | ❌ | ✅ | ❌ |
| Host your own private server | ✅ | ✅ | ❌ | ❌ |
| High quality video and screen sharing | ✅ | ✅ | ✅ | ✅ |
| Built in music bots | ✅ | ❌ | ❌ | ❌ |
| Ability to hide channels | ✅ | ❌ | ❌ | ❌ |
| Cross and permanent channel chat | ✅ | ❌ | ✅ | ✅ |
| Built in unlimited file transfer | ✅ | ✅ | ❌ | ✅ |
| High quality OPUS voice transmission | ✅ | ✅ | ✅ | ✅ |
| Offline / LAN functionality | ✅ | ✅ | ❌ | ❌ |
| Advanced permissions system | ✅ | ✅ | ✅ | ❌ |
| Easy to use chat box with markdown support | ✅ | ❌ | ✅ | ✅ |
| Open Source | Partial | ❌ | ❌ | ❌ |
| Direct Messaging | ✅ | ✅ | ✅ | ✅ |
---
## Complete Feature List
### Server Features (Unique to TeaSpeak)
1. **Built-in Music Bots** - High-quality, low bandwidth music bots with playlist management
2. **Invisible/Hidden Channels** - Channels hidden based on `i_channel_view_power`
3. **Customizable Messages** - Customize server stop messages, default descriptions, version display, license type, query MOTD, country flags
4. **Built-in Console** - Stdout commands: `end|shutdown`, `chat`, `permgrant`, `passwd`
5. **VPN Detection** - `b_client_ignore_vpn` permission to bypass
6. **Scheduled Shutdowns** - `serverprocessstop type=schedule time=60 msg=`
7. **Increased Slot Count** - Up to 1024 slots per virtual server (unlimited virtual servers)
8. **Per-Server Binding** - Individual binding options per virtual server
9. **Global Ban System** - Instance-wide bans with `sid=0`
10. **Ban Enforcement List** - Log of all ban enforcements (`bantriggerlist`)
11. **Ban Editing** - Direct ban editing (not delete+recreate)
12. **HWID Bans** - Ban by hardware ID
13. **Encrypted Query** - SSL/TLS encrypted ServerQuery connections
14. **Extended ServerQuery Notifies** - Almost all events available to query clients
15. **Global Group Assignment** - Instance-wide group assignment via `use 0`
16. **Channel Chat Conversations** - Persistent cross-channel chat
17. **SNI Certificate Support** - Different certificates for different server names
18. **WebRTC for Web Clients** - Native WebRTC voice bridge
19. **Video Broadcasting** - Camera and screen sharing via WebRTC
20. **Automatic Permission Updates** - New permissions auto-applied via `i_group_auto_update_type`
21. **Channel Creation Limits** - Per-client limits on temporary/semi/permanent channels
22. **Customizable Token System** - Configurable token values and actions
23. **Multiple IP Bindings** - IPv4 and IPv6 multi-binding support
24. **Compressed Snapshots** - Server snapshot compression
25. **IP Range Whitelists/Blacklists** - For query and file transfer
### TeamSpeak Compatibility
TeaSpeak implements the TeamSpeak 3 Server Query protocol and voice protocol, making it compatible with:
- TeamSpeak 3 clients (native voice)
- YaTQA (query administration)
- SinusBot (music bot)
- Other TS3-compatible tools
---
## Protocol Implementation Details
### Voice Protocol
- **Transport**: UDP for native clients, WebRTC for web clients
- **Codec**: OPUS only (all non-OPUS codecs dropped in 1.5.0)
- Speex 8/16/32kbps: Removed
- CELT-Mono 48kbps: Removed
- OPUS Voice: Default
- OPUS Music: Available
- **Encryption**: Configurable per channel (`channel_codec_is_unencrypted`) and server-wide (`virtualserver_codec_encryption_mode`)
- **Video Codecs**: VP8 (default, better with packet loss), H264 available
- **Packet handling**: Control commands separated from voice/keepalive (1.4.7+) for reliability
- **RTO**: 200ms (matching Linux kernel TCP/IP RFC 6298)
- **WebRTC**: Uses libnice for ICE/STUN, thread pool for bridges (not per-client threads)
### ServerQuery Protocol
- **Transport**: TCP (plain text) or TLS/SSL encrypted
- **Default port**: 10101
- **Newline**: `\n` (changed from `\n\r` in 1.4.14-beta6)
- **Max command length**: Configurable via `config.yml`
- **Flood protection**: Configurable commands/time/ban_time
- **Authentication**: Server admin password, token-based, or name-based
### File Transfer Protocol
- **Transport**: HTTP/HTTPS
- **Default port**: 30303
- **Commands**: `ftcreatedir`, `ftgetfilelist`, `ftgetfileinfo`, `ftdeletefile`, `ftinitupload`, `ftinitdownload`, `ftrenamefile`, `ftlist`, `ftstop`
- **Bulk support**: `ftdeletefile` and `ftgetfileinfo` support bulks
- **Bandwidth limits**: Per-transfer and server-wide configurable
---
## Audio/Codec Support
### Voice Codecs (Server 1.5.0+)
| Codec | Status | Notes |
|-------|--------|-------|
| OPUS Voice | ✅ Default | Primary codec |
| OPUS Music | ✅ Supported | Higher quality for music |
| Speex 8/16/32kbps | ❌ Removed | Permissions removed |
| CELT-Mono 48kbps | ❌ Removed | Permission removed |
### Video Codecs
| Codec | Status | Notes |
|-------|--------|-------|
| VP8 | ✅ Default | Better with packet loss |
| H264 | ✅ Available | Poor performance with packet loss |
### Video Permissions
- `b_video_screen` - Screen sharing permission
- `b_video_camera` - Camera permission
- `i_video_max_kbps` - Max video bitrate
- `i_video_max_streams` - Max total video streams
- `i_video_max_screen_streams` - Max screen share streams
- `i_video_max_camera_streams` - Max camera streams
### Audio Processing (Web Client)
- Voice Activity Detection (VAD) - Default mode
- Push-to-Talk (PTT) with configurable delay
- Threshold-based audio filtering
- Echo test support
- Whisper support
- Native audio encoding/decoding (Rust-based worker, replaced Emscripten)
---
## Channel Types and Properties
### Channel Types
| Type | Flag | Description |
|------|------|-------------|
| Permanent | `channel_flag_permanent=1` | Persists after all users leave |
| Semi-Permanent | `channel_flag_semi_permanent=1` | Persists until deleted |
| Temporary | Both flags `0` | Auto-deleted when empty (with configurable delay) |
| Default | `channel_flag_default=1` | Landing channel for new connections |
| Password-Protected | `channel_flag_password=1` | Requires password to join |
| Private/Hidden | `channel_flag_private=1` | Invisible to unauthorized users |
### Conversation Modes (1.4.22+)
| Value | Mode | Description |
|-------|------|-------------|
| 0 | None | Shows channel description instead of conversation |
| 1 | Public | Default conversation mode |
| 2 | Private | Only accessible while in the channel |
### Sidebar Modes (1.5.0+)
| Value | Mode | Description |
|-------|------|-------------|
| 0 | Public | Default sidebar mode |
### Channel Properties (Key)
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `channel_name` | string | - | Channel name |
| `channel_topic` | string | empty | Channel topic |
| `channel_description` | string | empty | Channel description |
| `channel_password` | string | empty | Channel password |
| `channel_codec` | number | 4 (OPUS) | Audio codec |
| `channel_codec_quality` | number | 7 | Codec quality (0-10) |
| `channel_maxclients` | number | -1 (-1=unlimited) | Max clients |
| `channel_maxfamilyclients` | number | -1 | Max clients including sub-channels |
| `channel_needed_talk_power` | number | 0 | Required talk power |
| `channel_forced_silence` | bool | 0 | Force silence in channel |
| `channel_delete_delay` | number | 0 | Delay before temp channel deletion |
| `channel_conversation_history_length` | number | 1500 | Chat history length (-1=none, 0=unlimited) |
| `channel_conversation_mode` | number | 1 | Conversation mode |
| `channel_sidebar_mode` | number | 0 | Sidebar mode |
| `channel_created_at` | number | - | Creation timestamp |
| `channel_created_by` | number | - | Creator database ID |
| `channel_last_left` | number | - | Last time a user left |
### Channel Name Spacers
TeaSpeak supports `[spacerX]` channel name spacers for visual organization in the channel tree.
---
## Permissions System
### Permission Calculation Flow
TeaSpeak uses a multi-layer permission system:
1. **Server Groups** - Global permissions from server group membership
2. **Channel Groups** - Channel-specific permissions
3. **Client Permissions** - Per-client overrides
4. **Channel Client Permissions** - Per-client per-channel overrides
5. **Playlist Permissions** - Music bot playlist permissions
Each permission has:
- **Value** - The granted power level
- **Negate** - If set, the permission is denied regardless
- **Skip** - If set, skips this permission in calculation
### TeaSpeak-Specific Permissions
#### General Permissions
| Permission | Description |
|------------|-------------|
| `b_client_allow_invalid_badges` | Bypass server kick for invalid badges |
| `b_client_allow_invalid_packet` | Bypass server kick for empty packets |
| `b_client_even_textmessage_send` | Allow sending private messages to self |
| `b_client_ignore_vpn` | Bypass VPN check |
| `b_client_music_server_list` | List all music bots on server |
| `b_client_music_channel_list` | List music bots in current channel |
| `b_client_music_create` | Create music bots |
| `b_client_music_delete_own` | Delete own music bots |
| `i_client_music_delete_power` | Power to delete music bots |
| `i_client_music_needed_delete_power` | Needed power to delete music bots |
| `i_client_music_info` | Power for `.mbot info` |
| `i_client_music_needed_info` | Needed info power for bot |
| `i_client_music_play_power` | Power for `.mbot play` |
| `i_client_music_needed_play_power` | Needed play power for bot |
| `i_client_music_rename_power` | Power for `.mbot rename` |
| `i_client_music_needed_rename_power` | Needed rename power for bot |
| `i_client_music_limit` | Max music bots per client |
| `i_client_max_clones_hwid` | Max clones with same HWID |
| `i_client_max_clones_ip` | Max clones with same IP |
| `b_virtualserver_modify_music_bot_limit` | Modify server music bot limit |
#### Channel View Permissions
| Permission | Description |
|------------|-------------|
| `i_channel_view_power` | Channel view power |
| `b_channel_ignore_view_power` | Bypass visibility check |
| `i_channel_needed_view_power` | Required view power for channel |
#### Group Management Permissions
| Permission | Description |
|------------|-------------|
| `i_channel_group_member_add_power` | Power to set channel group |
| `i_channel_group_needed_member_add_power` | Needed power to add to channel group |
| `i_channel_group_member_remove_power` | Power to remove channel group |
| `i_channel_group_needed_member_remove_power` | Needed power to remove channel group |
| `i_channel_group_modify_power` | Power to modify channel group |
| `i_channel_group_needed_modify_power` | Needed power to modify channel group |
| `i_server_group_self_add_power` | Power to add self to server group |
| `i_server_group_self_remove_power` | Power to remove self from server group |
| `i_channel_group_self_add_power` | Power to add self to channel group |
| `i_channel_group_self_remove_power` | Power to remove self from channel group |
#### Ban Permissions
| Permission | Description |
|------------|-------------|
| `b_client_ban_create_global` | Create global ban rules |
| `b_client_ban_delete_global` | Delete any global ban rules |
| `b_client_ban_delete_own_global` | Delete own global ban rules |
| `b_client_ban_edit` | Edit local ban rules |
| `b_client_ban_edit_global` | Edit global ban rules |
| `b_client_ban_list_global` | List global ban rules |
#### Channel Limit Permissions
| Permission | Description |
|------------|-------------|
| `i_client_max_channels` | Max channels per client |
| `i_client_max_temporary_channels` | Max temporary channels |
| `i_client_max_semi_channels` | Max semi-permanent channels |
| `i_client_max_permanent_channels` | Max permanent channels |
#### Chat/Conversation Permissions
| Permission | Description |
|------------|-------------|
| `b_channel_create_modify_conversation_private` | Modify conversation private flag |
| `b_channel_create_modify_conversation_history_length` | Modify history length (value = max) |
| `b_channel_create_modify_conversation_history_unlimited` | Set unlimited history |
| `b_channel_create_modify_conversation_mode_private` | Create/modify private conversation mode |
| `b_channel_create_modify_conversation_mode_public` | Create/modify public conversation mode |
| `b_channel_create_modify_conversation_mode_none` | Create/modify none conversation mode |
#### Other Permissions
| Permission | Description |
|------------|-------------|
| `b_channel_ignore_description_view_power` | Bypass description view power |
| `b_channel_ignore_subscribe_power` | Bypass subscribe power |
| `b_virtualserver_modify_country_code` | Edit server country code |
| `b_virtualserver_select_godmode` | Query can select server without binding *(removed 1.5.0+)* |
| `i_channel_subscribe_power` (-1) | Prevent channel subscription |
| `b_channel_create_modify_sidebar_mode` | Modify channel sidebar mode |
| `b_channel_modify_temp_delete_delay` | Modify temp delete delay |
| `b_channel_create_modify_force_password` | Force password on channel creation |
### Removed Permissions (1.5.0+)
- `b_channel_create_modify_with_codec_speex8`
- `b_channel_create_modify_with_codec_speex16`
- `b_channel_create_modify_with_codec_speex32`
- `b_channel_create_modify_with_codec_celtmono48`
- `b_channel_create_private` (replaced by conversation modes)
- `b_virtualserver_select_godmode` (removed, queries always visible)
---
## Server Configuration
### config.yml Options
The server uses a YAML configuration file with the following key sections:
#### Instance Properties
| Property | Default | Description |
|----------|---------|-------------|
| `serverinstance_filetransfer_host` | `0.0.0.0,[::]` | File transfer bind address |
| `serverinstance_filetransfer_port` | `30303` | File transfer port |
| `serverinstance_filetransfer_max_connections` | `100` | Max file transfer connections |
| `serverinstance_filetransfer_max_connections_per_ip` | `20` | Max file transfer connections per IP |
| `serverinstance_query_host` | `0.0.0.0,[::]` | Query bind address |
| `serverinstance_query_port` | `10101` | Query port |
| `serverinstance_query_max_connections` | `100` | Max query connections |
| `serverinstance_query_max_connections_per_ip` | `3` | Max query connections per IP |
| `serverinstance_serverquery_flood_commands` | `3` | Flood protection commands |
| `serverinstance_serverquery_flood_time` | `1` | Flood protection time (seconds) |
| `serverinstance_serverquery_ban_time` | `600` | Query ban time (seconds) |
| `serverinstance_virtual_server_id_index` | `1` | Starting virtual server ID |
#### Customizable Messages (config.yml)
| Config Key | Description |
|------------|-------------|
| Server stop/crash message | Message shown when server stops |
| Default channel/client description | Fallback descriptions |
| Idle kick message | Message for idle timeout kicks |
| Server version/platform | Displayed version info |
| License type display | No Licence, ATHP, LAN, NPL, or auto modes |
| Query MOTD | Message of the day for query clients |
| Query newline character | `\n` (default) or `\n\r` |
| Default country flag | Flag when no valid country detected |
#### Other Notable Config Options
| Option | Description |
|--------|-------------|
| `allow_session_reinitialize` | Allow session re-initialization |
| `suppress_myts_warnings` | Suppress MyTeamSpeak warnings |
| `notifymute` | Notify on mute |
| `connect_limit` | Connection limit |
| `client_connect_limit` | Per-client connection limit |
| `strict_ut8_mode` | Strict UTF-8 mode |
| `show_invisible_clients` | Show invisible clients |
| `default_music_bot` | Default music bot settings |
| `virtualserver_max_channels` | Max channels per virtual server |
### Runtime Terminal Commands
| Command | Description |
|---------|-------------|
| `end\|shutdown <now\|time> <reason>` | Stop the server |
| `chat <serverId> <mode> <targetId> <message>` | Send chat message |
| `permgrant <ServerId> <GroupId> <PermName> <Grant>` | Fix permissions |
| `passwd <new_password> <repeated>` | Change admin password |
| `reload config` | Reload config.yml |
---
## Music Bot System
### Quick Setup
1. Grant yourself music-related permissions
2. Type `.mbot` in channel chat
3. Use query commands for advanced control
### Music Bot Query Commands
| Command | Description |
|---------|-------------|
| `musicbotcreate [cid=<channel>]` | Create a music bot |
| `musicbotdelete bot_id=<id>` | Delete a music bot |
| `musicbotsetsubscription bot_id=<id>` | Subscribe to bot events |
| `musicbotplayerinfo bot_id=<id>` | Get player info |
| `musicbotplayeraction bot_id=<id> action=<n>` | Control playback |
| `musicbotqueueadd bot_id=<id> type=<n> url=<url>` | Add song to queue |
| `musicbotqueueadd bot_id=<id> type=2 url=cid=<n>\sname=<file>\spath` | Add file from channel |
| `musicbotqueuelist bot_id=<id> [-bulk]` | List queue entries |
| `musicbotqueueremove bot_id=<id> song_id=<id> [-skip_error]` | Remove queue entry |
| `musicbotqueuereorder bot_id=<id> song_id=<id> index=<n>` | Reorder queue |
### Player Actions
| Value | Action | Description |
|-------|--------|-------------|
| 0 | Stop | Stop the player |
| 1 | Play | Play current song |
| 2 | Pause | Pause current song |
| 3 | Forward | Skip to next song |
| 4 | Rewind | Jump to last song (limited support) |
### Player States
| Value | State | Description |
|-------|-------|-------------|
| 0 | Sleeping | Waiting for new song |
| 1 | Loading | Loading current song |
| 2 | Playing | Playing current song |
| 3 | Paused | Playback paused |
| 4 | Stopped | Playback stopped |
### Song Loader Types
| Value | Type | Description |
|-------|------|-------------|
| 0 | YouTube-DL | Resolve URL via youtube-dl |
| 1 | FFMPEG | Direct FFMPEG playback |
| 2 | Channel File | Play from channel file system |
### Playlist System
| Command | Description |
|---------|-------------|
| `playlistcreate` | Create playlist |
| `playlistdelete` | Delete playlist |
| `playlistlist` | List playlists |
| `playlistinfo` | Get playlist info |
| `playlistedit` | Edit playlist properties |
| `playlistsonglist` | List songs in playlist |
| `playlistsongadd` | Add song to playlist |
| `playlistsongremove` | Remove song from playlist |
| `playlistsongreorder` | Reorder songs |
| `playlistsongsetcurrent` | Set current song |
| `musicbotplaylistassign` | Assign playlist to bot |
| `playlistclientlist` | List client playlists |
| `playlistclientpermlist` | List client permissions |
| `playlistclientaddperm` | Add client permission |
| `playlistclientdelperm` | Remove client permission |
### Playlist Properties
| Property | Type | Description |
|----------|------|-------------|
| `playlist_id` | number | Playlist identifier |
| `playlist_title` | string | Playlist title |
| `playlist_description` | string | Playlist description |
| `playlist_type` | number | 0=bot-bound, 1=global |
| `playlist_owner_dbid` | number | Owner database ID |
| `playlist_max_songs` | number | Max songs (-1=unlimited) |
| `playlist_flag_delete_played` | bool | Delete played songs |
| `playlist_flag_finished` | bool | Playlist finished flag |
| `playlist_replay_mode` | number | 0=normal, 1=loop, 2=loop-single, 3=shuffle |
| `playlist_current_song_id` | number | Current song ID |
### Music Bot Permissions
| Permission | Description |
|------------|-------------|
| `i_max_playlists` | Max playlists per client |
| `i_max_playlist_size` | Max songs per playlist |
| `i_playlist_view_power` / `i_playlist_needed_view_power` | View power |
| `i_playlist_modify_power` / `i_playlist_needed_modify_power` | Modify power |
| `i_playlist_delete_power` / `i_playlist_needed_delete_power` | Delete power |
| `i_playlist_song_add_power` / `i_playlist_song_needed_add_power` | Add song power |
| `i_playlist_song_remove_power` / `i_playlist_song_needed_remove_power` | Remove song power |
| `i_playlist_song_move_power` / `i_playlist_song_needed_move_power` | Move song power |
### Music Bot Chat Commands
Type in channel chat:
- `.mbot` - Show help
- `.mbot play` - Start playback
- `.mbot info` - Show bot info
- `.mbot rename <name>` - Rename bot
### Music Bot Events
| Event | Description |
|-------|-------------|
| `notifymusicqueueadd` | Song added to queue |
| `notifymusicqueueremove` | Song removed from queue |
| `notifymusicqueueorderchange` | Queue order changed |
| `notifymusicplayersongchange` | Current song changed |
| `notifymusicstatusupdate` | Player status update (every second when subscribed) |
---
## Chat System
### Overview
TeaSpeak's chat system is channel-based, using voice channel tree channels as chat rooms. Features:
- Each voice channel can be used as a chat room
- Conversations are persistent (saved to database)
- Offline users can read missed messages
- Cross-channel messaging (if you have join permission)
- Password-protected channels require active channel membership for chat
### Chat Properties
| Property | Range | Description |
|----------|-------|-------------|
| `channel_conversation_history_length` | -1 to 65535 | -1=no history, 0=unlimited, N=max messages |
| `channel_flag_conversation_private` | bool | Private = only accessible while in channel |
### Chat Commands (ServerQuery)
| Command | Description |
|---------|-------------|
| `sendtextmessage target=<id> targetmode=<mode> msg=<text> [cid=<channel>]` | Send message |
| `conversationhistory cid=<channel>` | Get conversation history |
| `conversationfetch cid=<channel>` | Fetch conversation |
| `conversationmessagedelete` | Delete message |
| `conversationsetsubscription` | Set subscription |
### Supported Chat Features
- BBCode formatting
- Markdown support
- Emoji support
- Image preview
- YouTube video embeds
- URL detection and linking
- Tables, headings, lists, horizontal rules
- Code blocks
- Blockquotes
---
## Token System
### Overview
Tokens are long, random-generated keys that trigger actions when used. Their main purpose is granting extra permissions.
### Token Properties
| Property | Description |
|----------|-------------|
| `token_max_uses` | Maximum uses (-1 = unlimited) |
| `token_expired` | Expiration timestamp (seconds since epoch) |
| `token` | Custom token value (optional, auto-generated if not set) |
### Token Actions
| Action | ID | ID1 | ID2 | Text |
|--------|-----|-----|-----|------|
| Add server group | `0x01` | Server group ID | unused | unused |
| Remove server group | `0x02` | Server group ID | unused | unused |
| Set channel group | `0x03` | Channel group ID | Channel ID | unused |
| Allow channel join | `0x04` | unused | Channel ID | Channel password |
### Token Commands
| Command | Description |
|---------|-------------|
| `tokenadd` | Create token |
| `tokendelete` | Delete token |
| `tokenlist [-new]` | List tokens |
| `tokenuse` | Use a token |
| `tokenedit` | Edit token (new system) |
| `tokenactionlist` | List token actions (new system) |
### New Token System (1.5.1+)
- Token length increased from 20 to 32 characters
- `-new` switch for new token system
- `tokenuse` no longer requires permissions
- `tokendelete` no longer requires permissions for own tokens
- Tokens given on join are taken into account
---
## ServerQuery Notify System
### Registration
```
servernotifyregister event=all specifier=all # All events
servernotifyregister event=server specifier={edit} # Server edit
servernotifyregister event=client specifier={poke|update|command|join|switch|leave|add|remove|change}
servernotifyregister event=chat specifier={composing|receive_server|receive_channel|receive_private|close}
servernotifyregister event=channel specifier={create|edit|desc|move|delete}
servernotifyregister event=music specifier={queue|player}
```
### Server Events
| Event | Command | Description |
|-------|---------|-------------|
| Server Edit | `notifyserverupdated` | Server settings changed |
### Client Events
| Event | Command | Description |
|-------|---------|-------------|
| Client Poke | `notifyclientpoke` | Received a poke |
| Client Updated | `notifyclientupdated` | Client property changed |
| Client Command | `notifyplugincmd` | Plugin message received |
| Client Join | `notifycliententerview` | Client entered view |
| Client Switch | `notifyclientmoved` | Client moved channels |
| Client Leave | `notifyclientleftview` | Client left/kicked/banned |
| Group Add | `notifyservergroupclientadded` | Added to server group |
| Group Remove | `notifyservergroupclientdeleted` | Removed from server group |
| Channel Group Change | `notifyclientchannelgroupchanged` | Channel group changed |
### Chat Events
| Event | Command | Description |
|-------|---------|-------------|
| Composing | `notifyclientchatcomposing` | Client is typing |
| Receive | `notifytextmessage` | Message received |
| Close | `notifyclientchatclosed` | Chat closed |
### Channel Events
| Event | Command | Description |
|-------|---------|-------------|
| Create | `notifychannelcreated` | Channel created |
| Edit | `notifychanneledited` | Channel edited |
| Description Changed | `notifychanneldescriptionchanged` | Description changed |
| Password Changed | `notifychannelpasswordchanged` | Password changed |
| Moved | `notifychannelmoved` | Channel moved |
| Deleted | `notifychanneldeleted` | Channel deleted |
---
## Ban System
### Standard Ban Commands
| Command | Description |
|---------|-------------|
| `banadd` | Add ban rule |
| `bandel` | Delete ban rule |
| `banedit` | Edit ban rule (TeaSpeak-specific) |
| `banlist` | List ban rules |
| `banclient` | Ban client (supports database ID) |
| `bantriggerlist` | List ban enforcements |
### Global Bans
Use `sid=0` for instance-wide bans:
```
banadd sid=0 ip=8.8.8.8 reason=Global\sban
```
### HWID Bans
```
banadd hwid=<hardware_id_1>,<hardware_id_2>
banadd hwid= # Ban empty HWIDs
```
### Ban Properties
- IP-based bans
- Name-based bans
- HWID-based bans
- Configurable auto-ban on complain threshold
- Ban time in seconds
- Global (instance-wide) or local (per-server)
---
## Web Client Architecture
### Technology Stack
| Technology | Version | Purpose |
|------------|---------|---------|
| TypeScript | 4.2+ | Primary language (84.1%) |
| React | 16.x | UI framework |
| SCSS | - | Styling (10.8%) |
| Webpack | 5.x | Build system |
| Rust/WASM | - | Audio processing worker |
| WebRTC | - | Voice/video communication |
### Key Dependencies
| Package | Purpose |
|---------|---------|
| `react` / `react-dom` | UI rendering |
| `react-grid-layout` | Drag-and-drop layouts |
| `react-player` | Media playback |
| `remarkable` | Markdown rendering |
| `emoji-mart` | Emoji picker |
| `twemoji` | Twitter emoji support |
| `highlight.js` | Code syntax highlighting |
| `sdp-transform` | SDP parsing for WebRTC |
| `webrtc-adapter` | WebRTC cross-browser support |
| `dompurify` | HTML sanitization |
| `crypto-js` / `webcrypto-liner` | Cryptography |
| `jquery` | Legacy DOM manipulation |
| `moment` | Date/time handling |
| `detect-browser` | Browser detection |
### Project Structure
```
TeaWeb/
├── client-api/ # PHP API endpoint (legacy)
├── client/ # Native client wrapper code
├── documentation/ # i18n documentation
├── loader/ # Initial loader (ES5 compatible)
├── scripts/ # Build/install scripts
├── shared/ # Shared code between web/client
├── tools/ # Development tools
├── vendor/ # Vendor dependencies
├── web/ # Main web application
│ ├── css/ # SCSS styles
│ ├── html/ # HTML templates
│ └── ts/ # TypeScript source
│ ├── client/ # Client-side code
│ ├── connection/ # Server connection
│ ├── ui/ # UI components (React)
│ └── voice/ # Voice/audio handling
├── webpack/ # Webpack configurations
├── webpack-web.config.ts
├── webpack-client.config.ts
├── package.json
└── tsconfig.json
```
### Build Commands
```bash
npm install # Install dependencies
./scripts/install_dependencies.sh # Install rustup, wasm-pack
npm start web # Start dev server (http://localhost:8081)
npm run build-web # Build for production
npm run build-client # Build native client
./scripts/web_package.sh rel # Package into .zip
```
### Browser Support
| Browser | Supported |
|---------|-----------|
| Chrome | ✅ Yes |
| Firefox | ✅ Yes |
| Opera | ✅ Yes |
| Safari | ✅ Yes |
| MS Edge (Chromium) | ✅ Yes |
| MS Edge (Legacy) | ⚠️ Partial |
| Internet Explorer | ❌ No |
### Key Web Client Features
- Multi-server tabs (connect to multiple servers)
- Popoutable modals (detached windows)
- CSS variable editor for theming
- Dark theme
- Responsive design (font-size based)
- Bookmark system with import/export
- Auto-connect on startup
- Channel tree with React rendering
- Video spotlight mode (multiple simultaneous videos)
- Screen sharing
- Watch-together mode
- Image preview in chat
- Drag-and-drop for clients
- Context menus
- Hotkey system
- Volume controls (master + per-client)
- Identity management with auto-generation
- Auto-reconnect system
---
## Music Bot Architecture (TeaMusic)
### Technology
- **Language**: C++ (99.3%), CMake (0.7%)
- **Standard**: C++17
- **Build**: CMake with shared library providers
### Provider System
TeaMusic uses a plugin-based provider architecture:
```
TeaMusic/
├── include/teaspeak/ # Headers (MusicPlayer.h)
├── providers/
│ ├── ffmpeg/ # FFMPEG provider (000 prefix = load first)
│ │ ├── FFMpegProvider.cpp
│ │ ├── FFMpegMusicPlayer.cpp
│ │ ├── FFMpegMusicProcess.cpp
│ │ └── FFMpegStream.cpp
│ ├── yt/ # YouTube-DL provider (001 prefix = load second)
│ │ ├── YTProvider.cpp
│ │ ├── YTVManager.cpp
│ │ ├── YoutubeMusicPlayer.cpp
│ │ └── YTRegex.cpp
│ └── shared/ # Shared utilities
│ ├── libevent.cpp
│ └── CommandWrapper.cpp
├── helpers/ # Development helpers
└── CMakeLists.txt
```
### Provider Details
| Provider | Prefix | Dependencies | Description |
|----------|--------|--------------|-------------|
| FFMPEG | `000` | libevent, threadpool, StringVariables | Direct audio playback via FFMPEG |
| YouTube-DL | `001` | FFMPEG provider, jsoncpp, threadpool, StringVariables | YouTube/video URL resolution + playback |
### Build Options
```cmake
BUILD_PROVIDER_YT=ON # Build YouTube-DL provider
BUILD_PROVIDER_FFMPEG=ON # Build FFMPEG provider
BUILD_HELPERS=ON # Build development helpers
```
### Music Provider Features
- Automatic reconnect (3 attempts) on stream disconnect
- Shuffle mode
- Song change notifications
- Configurable announce messages
- Volume control per bot
- Playlist persistence across restarts
- YouTube URL resolution via youtube-dl
- FFMPEG direct stream playback
- Channel file system playback
---
## Server Binary Distribution
### Download Sources (Archived)
| Platform | URL Pattern |
|----------|-------------|
| Linux x64 (stable) | `https://repo.teaspeak.de/server/linux/amd64_stable/TeaSpeak-.tar.gz` |
| Linux x64 (nightly) | `https://repo.teaspeak.de/server/linux/amd64_nightly/` |
| Docker (TeaWeb) | `https://hub.docker.com/r/teaspeak/web` |
| Web Client Releases | `https://github.com/TeaSpeak/TeaWeb/releases` |
| TeaClient Releases | `https://clientapi.teaspeak.de/files/release/` |
### TeaClient Versions (Archived)
| Platform | Format | Version |
|----------|--------|---------|
| Linux x64 | .deb installer | 1.5.3-2 |
| Linux x64 | .tar.gz | 1.5.3-2 |
| Windows x64 | .exe installer | 1.5.3-2 |
| Windows x64 | .tar.gz | 1.5.3-2 |
### Installation
**Server:**
```bash
# Download
wget https://repo.teaspeak.de/server/linux/amd64_stable/TeaSpeak-.tar.gz
# Extract
tar -xzf TeaSpeak-*.tar.gz
# Run
./teastart.sh start
```
**Docker (Web Client):**
```bash
docker pull teaspeak/web
```
### teastart.sh Commands
```bash
./teastart.sh start # Start server
./teastart.sh stop # Stop server
./teastart.sh status # Returns 0 if running, 1 if not
./teastart.sh reload # Reload config
./teastart.sh execute # Execute command
```
### Supported Architectures
- x86_64 (primary)
- armv32v7 (since 1.4.5, with web client since 1.4.6)
---
## License Information
### TeaWeb (Web Client)
**License**: Mozilla Public License 2.0 (MPL-2.0)
Key terms:
- Source code modifications must remain under MPL-2.0
- Can be combined with other code under different licenses
- Must provide source for MPL-covered portions
- No warranty, no liability
### TeaMusic (Music Bot Providers)
**License**: Not explicitly stated in repository (likely open source based on public GitHub presence)
### TeaSpeak Server
**License**: Proprietary / Not open source
The server binary is distributed freely but is not open source. The issue tracker and documentation are public.
### TeaClient (Desktop Client)
**License**: Not open source (distributed as binary)
---
## Known Issues and Limitations
### Open Issues (as of compilation)
From the GitHub issue tracker (61 open issues on TeaSpeak/TeaSpeak):
| Issue | Title | Status |
|-------|-------|--------|
| #723 | Arch Linux core dump | Open |
| #722 | Screen share not working, project unmaintained | Open |
| #721 | Server crashes | Open |
| #720 | Video sharing erratic and crashing | Open |
| #719 | Can't start server on Windows WSL2 | Open |
| #718 | Failed to parse VP8 header, screen share failed | Open |
| #717 | Raspberry Pi setup | Open |
| #716 | Can't download | Open |
| #715 | None of available versions working | Open |
| #714 | Server binary for Raspberry Pi (ARM) | Open |
| #713 | Packet resend failed | Open |
| #712 | Feature discussion | Open |
### Web Client Issues (TeaWeb, 15 open)
The TeaWeb repository is archived (read-only since Jul 9, 2025).
### Known Limitations
1. **Non-OPUS codecs removed** - All Speex and CELT codecs dropped in 1.5.0
2. **VP8 parsing issues** - Screen sharing can fail with VP8 header parsing errors
3. **ARM support limited** - Raspberry Pi builds not consistently available
4. **WebRTC stability** - Some video streaming instability reported
5. **Project maintenance** - Appears unmaintained since ~2022
6. **Video performance** - H264 performs poorly with packet loss
7. **Windows WSL2** - Server startup issues on WSL2
8. **Music bot queue** - Some features marked as "unimplemented" in documentation
9. **YouTube-DL dependency** - Requires separate youtube-dl installation
10. **Snapshot version** - Version 2 introduced breaking changes for music bot data
### Critical Fixes (Historical)
- **1.4.12-beta4**: Fixed critical server crash due to malformed packets
- **1.4.12-beta4**: Fixed crash from missing "providers" directory
- **1.3.26b**: Fixed out-of-order packet sending ("invalid clientID disconnect")
- **1.3.17b**: Fixed deeply rooted protocol bug (generation ID miscalculation)
- **1.3.14b**: Fixed voice encryption issue
---
## Properties Reference
### Instance Properties
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `serverinstance_database_version` | uint | 0 | Database version |
| `serverinstance_permissions_version` | uint | 0 | Permissions version |
| `serverinstance_filetransfer_host` | string | `0.0.0.0,[::]` | File transfer host |
| `serverinstance_filetransfer_port` | uint | 30303 | File transfer port |
| `serverinstance_filetransfer_max_connections` | uint | 100 | Max connections |
| `serverinstance_filetransfer_max_connections_per_ip` | uint | 20 | Max per IP |
| `serverinstance_query_host` | string | `0.0.0.0,[::]` | Query host |
| `serverinstance_query_port` | uint | 10101 | Query port |
| `serverinstance_query_max_connections` | uint | 100 | Max query connections |
| `serverinstance_query_max_connections_per_ip` | uint | 3 | Max per IP |
| `serverinstance_max_download_total_bandwidth` | int | -1 | Download bandwidth limit |
| `serverinstance_max_upload_total_bandwidth` | int | -1 | Upload bandwidth limit |
| `serverinstance_serverquery_flood_commands` | uint | 3 | Flood commands |
| `serverinstance_serverquery_flood_time` | uint | 1 | Flood time |
| `serverinstance_serverquery_ban_time` | uint | 600 | Ban time |
| `serverinstance_virtual_server_id_index` | uint | 1 | Server ID start index |
### Virtual Server Properties
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `virtualserver_unique_identifier` | string | - | Server UID |
| `virtualserver_name` | string | "Another TeaSpeak server..." | Server name |
| `virtualserver_welcomemessage` | string | "Welcome on another..." | Welcome message |
| `virtualserver_maxclients` | uint | 120 | Max clients |
| `virtualserver_password` | string | empty | Server password |
| `virtualserver_port` | uint | 9987 | Voice port |
| `virtualserver_host` | string | `0.0.0.0,::` | Bind address |
| `virtualserver_codec_encryption_mode` | uint | 0 | Encryption mode |
| `virtualserver_hostmessage` | string | "Welcome" | Host message |
| `virtualserver_hostbanner_url` | string | empty | Banner URL |
| `virtualserver_hostbanner_gfx_url` | string | empty | Banner image URL |
| `virtualserver_hostbanner_gfx_interval` | uint | 0 | Banner rotation interval |
| `virtualserver_complain_autoban_count` | uint | 5 | Auto-ban threshold |
| `virtualserver_complain_autoban_time` | uint | 5 | Auto-ban time |
| `virtualserver_complain_remove_time` | uint | 5 | Complain expiry |
| `virtualserver_priority_speaker_dimm_modificator` | float | -18 | Priority speaker volume reduction |
| `virtualserver_antiflood_points_tick_reduce` | uint | 25 | Anti-flood point reduction |
| `virtualserver_antiflood_points_needed_command_block` | uint | 150 | Command block threshold |
| `virtualserver_antiflood_points_needed_ip_block` | uint | 300 | IP block threshold |
| `virtualserver_needed_identity_security_level` | uint | 8 | Required security level |
| `virtualserver_channel_temp_delete_delay_default` | uint | 60 | Temp channel delete delay |
| `virtualserver_max_channels` | uint | 1000 | Max channels |
| `virtualserver_web_host` | string | `0.0.0.0` | Web client host |
| `virtualserver_web_port` | uint | 0 | Web client port |
| `virtualserver_default_client_description` | string | empty | Default client description |
| `virtualserver_default_channel_description` | string | empty | Default channel description |
| `virtualserver_default_channel_topic` | string | empty | Default channel topic |
| `virtualserver_music_bot_limit` | int | -1 | Music bot limit |
| `virtualserver_country_code` | string | XX | Server country code |
| `virtualserver_reserved_slots` | uint | 0 | Reserved slots |
### Client Properties (Key)
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `client_unique_identifier` | string | - | Client UID |
| `client_nickname` | string | - | Nickname |
| `client_version` | string | "unknown" | Client version |
| `client_platform` | string | "unknown" | Client platform |
| `client_input_muted` | bool | 0 | Input muted |
| `client_output_muted` | bool | 0 | Output muted |
| `client_is_recording` | bool | 0 | Recording flag |
| `client_database_id` | uint | 0 | Database ID |
| `client_away` | bool | 0 | Away status |
| `client_away_message` | string | empty | Away message |
| `client_type` | uint | 0 | 0=normal, 1=query |
| `client_type_exact` | uint | 0 | Exact type |
| `client_talk_power` | uint | 0 | Talk power |
| `client_is_talker` | bool | 0 | Talker flag |
| `client_is_priority_speaker` | bool | 0 | Priority speaker |
| `client_is_channel_commander` | bool | 0 | Channel commander |
| `client_badges` | string | empty | Client badges |
| `client_total_online_time` | uint | 0 | Total online time |
| `client_month_online_time` | uint | 0 | Monthly online time |
| `client_meta_data` | string | empty | Metadata |
| `client_description` | string | empty | Description |
| `client_country` | string | "TS" | Country code |
| `client_teaforo_id` | uint | 0 | TeaForum ID |
| `client_teaforo_name` | string | empty | TeaForum name |
| `client_owner` | uint | 0 | Owner (for music bots) |
| `client_bot_type` | uint | 0 | Bot type |
| `player_state` | uint | 0 | Music player state |
| `player_volume` | float | 1 | Music player volume |
| `client_playlist_id` | uint | 0 | Assigned playlist |
---
## Feature Support Commands
### listfeaturesupport
The server exposes feature support via `listfeaturesupport`:
| Feature Name | Version | Description |
|--------------|---------|-------------|
| `error-bulks` | 1 | Bulked command responses |
| `advanced-channel-chat` | 1 | Cross-channel persistent chat |
| `log-query` | 1 | Instance log querying |
| `sidebar-mode` | 1 | Channel sidebar modes |
### Bulked Command Responses
Supported commands for individual error results:
- `servergroupaddperm`, `servergroupdelperm`, `servergroupautoaddperm`, `servergroupautodelperm`
- `channeladdperm`, `channeldelperm`
- `clientaddperm`, `clientdelperm`
- `channelclientaddperm`, `channelclientdelperm`
- `channelgroupaddperm`, `channelgroupdelperm`
- `playlistaddperm`, `playlistdelperm`, `playlistclientaddperm`, `playlistclientdelperm`
- `ftdeletefile`, `ftgetfileinfo`
---
## Additional Command Extensions
### Extended Command Parameters
| Command | Extra Parameters |
|---------|-----------------|
| `channellist` / `channelinfo` | `created_by`, `created_at` |
| `clientdblist -details` / `clientdbfind -details` / `clientdbinfo` | `client_badges`, `client_version`, `client_platform`, `client_hwid` |
| `notifyplugincmd` / `notifyconnectioninforequest` | `invokerid` |
| `sendtextmessage` | `cid` (target channel) |
| `tokenadd` | `token` (custom value) |
| `banclient` | Accepts database ID |
### New Commands
| Command | Description |
|---------|-------------|
| `propertylist` | List all properties |
| `listfeaturesupport` | List supported features |
| `logquery` | Query server log |
| `logadd` | Add log entry |
| `permoverview` | Permission overview |
| `ftrenamefile` | Rename file |
| `ftlist` | List file transfers |
| `ftstop` | Stop file transfer |
| `conversationhistory` | Chat history |
| `conversationfetch` | Fetch conversation |
| `conversationmessagedelete` | Delete chat message |
| `conversationsetsubscription` | Set chat subscription |
| `tokenactionlist` | List token actions |
| `tokenedit` | Edit token |
### Removed Commands
| Command | Replacement |
|---------|-------------|
| `logview` | `logquery` |
| `musicbotqueuelist` | Playlist system *(removed 1.5.4+)* |
| `musicbotqueueadd` | Playlist system *(removed 1.5.4+)* |
| `musicbotqueuereorder` | Playlist system *(removed 1.5.4+)* |
| `musicbotqueueremove` | Playlist system *(removed 1.5.4+)* |
---
## Version History Highlights
### Major Versions
| Version | Key Changes |
|---------|-------------|
| **1.5.6** | Latest known version, IP2Location update, config reload fix |
| **1.5.5** | Video viewer tracking, native client counting |
| **1.5.4** | Channel admin fix, bulked commands, query group improvements |
| **1.5.2** | WebRTC STUN enabled by default |
| **1.5.1** | Token system redesign, web list removal |
| **1.5.0** | **Video broadcasting**, OPUS-only, WebRTC improvements, sidebar modes |
| **1.4.22** | Conversation modes (none/public/private) |
| **1.4.21** | File transfer crash fix, logging properties |
| **1.4.20** | Web client whisper support, echo tests |
| **1.4.19** | Raw command support for web client, whisper API |
| **1.4.18** | Database improvements, compressed snapshots, snapshot deploy improvements |
| **1.4.17** | YT-DL improvements, file transfer changes |
| **1.4.16** | Server logging system, `logadd`/`logquery` commands |
| **1.4.15** | File transfer restructure, bulked responses, `ftrenamefile` |
| **1.4.14** | Permission checking rework, bulk operations, query newline change |
| **1.4.13** | Statistics improvements, packet loss calculation, RTO adjustment |
| **1.4.12** | Connection statistics, UDP packet loss, RTO RFC 6298 |
| **1.4.11** | WebRTC thread pool, automated rlimit check |
| **1.4.10** | License renewal system, music bot fixes |
| **1.4.8** | Playlist client commands, skip/negate fix |
| **1.4.7** | Packet handling restructure (voice separation) |
| **1.4.6** | Command API rework, permission system overhaul |
| **1.4.5** | ARM support, join flood protection |
| **1.4.4** | Config reload, default certificates |
| **1.4.3** | libnice bundled, music bot slot counting |
| **1.4.1** | Music bot properties, country code, IP2Location |
| **1.4.0** | Server snapshots, conversation system, new permissions |
| **1.3.26b** | Critical packet ordering fix |
| **1.3.22b** | Permission system performance improvements |
| **1.3b** | Music bot overhaul, playlist system introduction |
---
## References
- **TeaSpeak Server Issues**: https://github.com/TeaSpeak/TeaSpeak/issues
- **TeaWeb Issues**: https://github.com/TeaSpeak/TeaWeb/issues (archived)
- **TeaMusic Issues**: https://github.com/TeaSpeak/TeaMusic/issues
- **Archived Website**: https://web.archive.org/web/2024/https://teaspeak.de/
- **Forum** (archived): https://forum.teaspeak.de/
- **Docker Hub**: https://hub.docker.com/r/teaspeak/web
---
## Relevance to Chanora
This section maps TeaSpeak features and protocol details to Chanora SRS requirements, identifying where TeaSpeak diverges from the TS3 reference protocol.
### Feature Mapping to SRS Requirements
| TeaSpeak Feature | Chanora SRS Area | Notes |
|---|---|---|
| OPUS-only codec (since 1.5.0) | SRS-071, SRS-072 (Opus encode/decode) | Simplifies Chanora codec support — no legacy Speex/CELT needed for TeaSpeak servers |
| WebRTC voice bridge | SRS-045 (protocol adapter) | TeaSpeak web clients use WebRTC, not UDP; Chanora uses `tsclientlib` (UDP) — bridge is server-side only |
| Channel tree with hidden/private channels | SRS-020 (channel tree display) | `i_channel_view_power` / `channel_flag_private` controls visibility; Chanora state sync must handle partial visibility |
| Conversation modes (none/public/private) | SRS-024 (text chat) | TeaSpeak channel conversations are persistent; affects chat history expectations |
| Extended ServerQuery notify events | SRS-047 (event translation) | TeaSpeak exposes more events to query clients than TS3 (e.g., music bot events); protocol adapter must handle unknown events gracefully (SRS-060) |
| Music bot system | Out of scope (SRS-010) | Chanora does not host bots; music bot clients appear as normal clients in channel tree |
| Token system redesign (1.5.1+) | SRS-045 (connect flow) | Token length changed from 20→32 chars; token-based group assignment may differ |
| Ban system (global bans, HWID bans, ban editing) | SRS-048 (error handling) | TeaSpeak adds `banedit` command and HWID bans; Chanora must handle unknown ban types gracefully |
| `listfeaturesupport` command | SRS-052 (protocol probe) | TeaSpeak exposes `advanced-channel-chat`, `sidebar-mode`, etc.; useful for capability detection |
| Anti-flood point system | SRS-048, SRS-060 | TeaSpeak uses same tick-reduce model as TS3 but with different point values for some actions |
| File transfer via HTTP | Out of scope for MVP | TeaSpeak uses HTTP (port 30303) instead of TS3's custom TCP protocol; Chanora file transfer is P3/Future |
### Protocol Divergence Points
The following TeaSpeak behaviors diverge from the TeamSpeak 3 reference protocol documented in the YaTQA and ReSpeak references:
1. **Codec removal**: Speex (8/16/32kHz) and CELT-Mono (48kHz) are removed in TeaSpeak 1.5.0+. Chanora's Opus-only strategy (SRS-071/072) aligns, but connecting to older TeaSpeak or TS3 servers may require codec negotiation awareness.
2. **ServerQuery line terminator**: TeaSpeak changed from `\n\r` to `\n` in 1.4.14-beta6. TS3 uses `0x0A 0x0D`. Chanora connects as a voice client (not query), so this does not affect the voice protocol path.
3. **WebRTC vs UDP**: TeaSpeak supports both UDP (native clients) and WebRTC (web clients). Chanora uses `tsclientlib` which implements the UDP voice protocol. The WebRTC bridge is server-side and transparent to native clients.
4. **New commands**: TeaSpeak adds `propertylist`, `listfeaturesupport`, `logquery`, `logadd`, `conversationhistory`, `conversationfetch`, `conversationmessagedelete`, `tokenactionlist`, `tokenedit`, `ftrenamefile`, `ftlist`, `ftstop`. These are ServerQuery-only and do not affect Chanora's voice-client protocol path.
5. **Extended permissions**: TeaSpeak adds music bot permissions, channel view power, conversation mode permissions, video permissions, and channel limit permissions. Unknown permissions must be ignored gracefully (SRS-060).
6. **Video broadcasting**: TeaSpeak supports VP8/H264 video via WebRTC. Chanora does not implement video in MVP (SRS-010 scope constraint). Video streams from other clients should not crash the application (SRS-060).
7. **Conversation system**: TeaSpeak's persistent channel conversations (`conversationhistory`, `conversationfetch`) differ from TS3's simpler text message model. If Chanora connects to a TeaSpeak server, chat history behavior may differ from TS3 expectations.
8. **VPN detection**: TeaSpeak has `b_client_ignore_vpn` permission. Chanora does not control server-side VPN detection but should handle any resulting connection failures gracefully.
9. **Snapshot format differences**: TeaSpeak snapshot version 2 includes music bot data with breaking changes. Not relevant to Chanora client (server-side only).
10. **Error code extensions**: TeaSpeak may return undocumented error codes for its extended features. Chanora's protocol adapter (SRS-048) should map unknown error codes to a generic error category.