Skip to content

feat: add Teamspeak 6 support#756

Open
yellowfromseegg wants to merge 9 commits into
gamedig:masterfrom
yellowfromseegg:master
Open

feat: add Teamspeak 6 support#756
yellowfromseegg wants to merge 9 commits into
gamedig:masterfrom
yellowfromseegg:master

Conversation

@yellowfromseegg
Copy link
Copy Markdown
Contributor

if you need i can provide you with credentials for testing, otherwise you can check here:
website with working api

it currently supports the same functions as the ts3 function but with the http api since the telnet got removed.

Implement TeamSpeak 6 API integration for server and client information retrieval.
Added information about TeamSpeak 6 query port requirements.
Updated TeamSpeak query requirements for version 6 to include API-Key and HTTP queryport.
@podrivo
Copy link
Copy Markdown
Contributor

podrivo commented Apr 4, 2026

Hello @yellowfromseegg! Would you mind sharing the server details so we can also test? Thank you!

@yellowfromseegg
Copy link
Copy Markdown
Contributor Author

I have created a new test server for you guys, heres the data for it:

IP: 136.243.10.251
token: BACo8rIJXCnFH4vLhcPEdz8eo_OyA7QDva16vZR
teamspeakQueryPort: 54010
port: 54011

If u need anything else, let me know

@podrivo
Copy link
Copy Markdown
Contributor

podrivo commented Apr 4, 2026

Thank you!

Are you able to query the server? If so, what command did you use?
I wasn't able to, so I was wondering if I'm doing something wrong.

I used:

node bin/gamedig.js --type teamspeak6 --host 136.243.10.251 --teamspeakQueryPort 54010 --token BACo8rIJXCnFH4vLhcPEdz8eo_OyA7QDva16vZR

Prevent TCP connection to voice port before HTTP request for TS6 WebQuery.
@yellowfromseegg
Copy link
Copy Markdown
Contributor Author

yellowfromseegg commented Apr 5, 2026

Hey, a fix im running didnt make it into repo. Sorry😅
I added it and it should now work.
For the API to identify which Virtual-Server you are trying to reach, the port is also needed.
The full command would be this then:

node bin/gamedig.js --type teamspeak6 --host 136.243.10.251 --port 54011 --teamspeakQueryPort 54010 --token BACo8rIJXCnFH4vLhcPEdz8eo_OyA7QDva16vZR

@podrivo
Copy link
Copy Markdown
Contributor

podrivo commented Apr 5, 2026

Thank you! It worked!

Here's the response I got:
gamedig --type teamspeak6 136.243.10.251 --port 54011 --teamspeakQueryPort 54010 --token BACo8rIJXCnFH4vLhcPEdz8eo_OyA7QDva16vZR --pretty 

{
  "name": "TeamSpeak 6 Server",
  "map": "",
  "password": false,
  "raw": {
    "serverinfo": {
      "connection_bandwidth_received_last_minute_total": "0",
      "connection_bandwidth_received_last_second_total": "0",
      "connection_bandwidth_sent_last_minute_total": "0",
      "connection_bandwidth_sent_last_second_total": "0",
      "connection_bytes_received_control": "6687",
      "connection_bytes_received_keepalive": "2895797",
      "connection_bytes_received_speech": "0",
      "connection_bytes_received_total": "2902484",
      "connection_bytes_sent_control": "12260",
      "connection_bytes_sent_keepalive": "2886031",
      "connection_bytes_sent_speech": "0",
      "connection_bytes_sent_total": "2898291",
      "connection_filetransfer_bandwidth_received": "0",
      "connection_filetransfer_bandwidth_sent": "0",
      "connection_filetransfer_bytes_received_total": "0",
      "connection_filetransfer_bytes_sent_total": "0",
      "connection_packets_received_control": "61",
      "connection_packets_received_keepalive": "70385",
      "connection_packets_received_speech": "0",
      "connection_packets_received_total": "70446",
      "connection_packets_sent_control": "57",
      "connection_packets_sent_keepalive": "70391",
      "connection_packets_sent_speech": "0",
      "connection_packets_sent_total": "70448",
      "virtualserver_address": "",
      "virtualserver_administrative_domain": "",
      "virtualserver_antiflood_points_needed_command_block": "150",
      "virtualserver_antiflood_points_needed_ip_block": "250",
      "virtualserver_antiflood_points_needed_plugin_block": "0",
      "virtualserver_antiflood_points_tick_reduce": "5",
      "virtualserver_ask_for_privilegekey": "0",
      "virtualserver_autostart": "1",
      "virtualserver_canonical_name": "",
      "virtualserver_capability_extensions": "FILETIME,STREAM_P2P",
      "virtualserver_channel_temp_delete_delay_default": "0",
      "virtualserver_channelsonline": "1",
      "virtualserver_client_connections": "1",
      "virtualserver_clientsonline": "1",
      "virtualserver_codec_encryption_mode": "0",
      "virtualserver_complain_autoban_count": "0",
      "virtualserver_complain_autoban_time": "1200",
      "virtualserver_complain_remove_time": "3600",
      "virtualserver_created": "1775338456",
      "virtualserver_default_channel_admin_group": "5",
      "virtualserver_default_channel_group": "8",
      "virtualserver_default_server_group": "8",
      "virtualserver_download_quota": "4294967295",
      "virtualserver_filebase": "files/virtualserver_1",
      "virtualserver_flag_password": "0",
      "virtualserver_homebase_storage_quota": "4294967295",
      "virtualserver_homebases": "0",
      "virtualserver_hostbanner_gfx_interval": "0",
      "virtualserver_hostbanner_gfx_url": "",
      "virtualserver_hostbanner_mode": "0",
      "virtualserver_hostbanner_url": "",
      "virtualserver_hostbutton_gfx_url": "",
      "virtualserver_hostbutton_tooltip": "",
      "virtualserver_hostbutton_url": "",
      "virtualserver_hostmessage": "",
      "virtualserver_hostmessage_mode": "0",
      "virtualserver_icon_id": "0",
      "virtualserver_id": "1",
      "virtualserver_ip": "0.0.0.0, ::",
      "virtualserver_log_channel": "0",
      "virtualserver_log_client": "0",
      "virtualserver_log_filetransfer": "0",
      "virtualserver_log_permissions": "1",
      "virtualserver_log_query": "0",
      "virtualserver_log_server": "0",
      "virtualserver_machine_id": "",
      "virtualserver_max_download_total_bandwidth": "18446744073709551615",
      "virtualserver_max_homebases": "64",
      "virtualserver_max_upload_total_bandwidth": "18446744073709551615",
      "virtualserver_maxclients": "32",
      "virtualserver_min_android_version": "1559834030",
      "virtualserver_min_client_version": "1560850141",
      "virtualserver_min_clients_in_channel_before_forced_silence": "100",
      "virtualserver_min_ios_version": "1559144369",
      "virtualserver_month_bytes_downloaded": "0",
      "virtualserver_month_bytes_uploaded": "0",
      "virtualserver_mytsid_connect_only": "0",
      "virtualserver_name": "TeamSpeak 6 Server",
      "virtualserver_name_phonetic": "",
      "virtualserver_needed_identity_security_level": "8",
      "virtualserver_nickname": "",
      "virtualserver_password": "",
      "virtualserver_platform": "Linux",
      "virtualserver_port": "54011",
      "virtualserver_priority_speaker_dimm_modificator": "-18.0000",
      "virtualserver_query_client_connections": "3",
      "virtualserver_queryclientsonline": "1",
      "virtualserver_reserved_slots": "0",
      "virtualserver_sfu_endpoint": "",
      "virtualserver_status": "online",
      "virtualserver_storage_quota": "4294967295",
      "virtualserver_total_bytes_downloaded": "0",
      "virtualserver_total_bytes_uploaded": "0",
      "virtualserver_total_packetloss_control": "0.0000",
      "virtualserver_total_packetloss_keepalive": "0.0000",
      "virtualserver_total_packetloss_speech": "0.0000",
      "virtualserver_total_packetloss_total": "0.0000",
      "virtualserver_total_ping": "0.0000",
      "virtualserver_unique_identifier": "EnqQaM2yXRITBE7Xh6+ePeETI2AQC7uo8z87kWGthEw=",
      "virtualserver_upload_quota": "4294967295",
      "virtualserver_uptime": "16285",
      "virtualserver_version": "v6.0.0-beta8 [Build: 1769077290]",
      "virtualserver_version_sign": "b'3ZX4bN3vzOrwrBU3ZReISZ0PjQ7Gxn/z/9RgdP6Ri8qZ3/8e2r2NMOJhPhFhWqYc8qLGV508/vyP4Jk9kTQ9BQ=='",
      "virtualserver_weblist_enabled": "1",
      "virtualserver_welcomemessage": "Welcome to TeamSpeak, check [URL]www.teamspeak.com[/URL] for latest information"
    },
    "channels": [
      {
        "channel_name": "Default Channel",
        "channel_needed_subscribe_power": "0",
        "channel_order": "0",
        "channel_topic": "Default Channel has no topic",
        "cid": "1",
        "pid": "0",
        "total_clients": "1"
      }
    ]
  },
  "version": "v6.0.0-beta8 [Build: 1769077290]",
  "maxplayers": 32,
  "numplayers": 1,
  "players": [],
  "bots": [],
  "queryPort": 54011,
  "connect": "136.243.10.251:54011",
  "ping": 0
}

Should we also make it clear in docs that --host is required?

added a table with all the needed options and theyre default values
@yellowfromseegg
Copy link
Copy Markdown
Contributor Author

yellowfromseegg commented Apr 5, 2026

Yes makes sense

i have adjusted the description in the Games List, it should be clear now.

@podrivo
Copy link
Copy Markdown
Contributor

podrivo commented Apr 5, 2026

Thank you!

@CosminPerRam Looks good to me!

Copy link
Copy Markdown
Member

@CosminPerRam CosminPerRam left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, sorry for the awfully long delay, could you rebase with master?
Also if you'd like to add lines to the changelog file (with pr link and if credit if wanted, see other lines for reference).

Comment thread protocols/teamspeak6.js
Comment on lines +6 to +7
// Prevent Core.request() from TCP-connecting to the voice port before the HTTP request.
// TS6 WebQuery is HTTP-only; setting usedTcp=true skips the internal tcpPing() call.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this section.

Comment thread protocols/teamspeak6.js

const queryPort = this.options.teamspeakQueryPort || 10080

// Reuse built-in GameDig "token" option as the TS6 API key
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this section.

Comment thread GAMES_LIST.md
Comment on lines +468 to +479
For teamspeak 6 queries to work correctly, you need the voice port, http queryport and the API-Key of the teamspeak 6 server. The API-Key is displayed in the log of the **first** server start.
To identify different virtualServers the specific Voice Port of the server is needed.

Needed Options:
| option | Value | Default |
|---------------------|------------------|-----------|
| port | Voice Port | 9987 |
| teamspeakQueryPort | http queryport | 10080 |
| token | < API-Key > | - |
| type | teamspeak6 | - |
| host | < your host ip > | - |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please rephrase as:

Requires the API key passed as token (it is displayed in the logs of the first server start).
HTTP query port passed as teamspeakQueryPort (it is different from port, which is the voice one).
If no port is passed but the query is successful, an error with (possibly) available ports will be returned.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants