Skip to content

feat: add Teamspeak 6 support#756

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

feat: add Teamspeak 6 support#756
yellowfromseegg wants to merge 10 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.

@podrivo

podrivo commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

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

podrivo commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

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

@yellowfromseegg

yellowfromseegg commented Apr 5, 2026

Copy link
Copy Markdown
Contributor Author

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

podrivo commented Apr 5, 2026

Copy link
Copy Markdown
Contributor

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?

@yellowfromseegg

yellowfromseegg commented Apr 5, 2026

Copy link
Copy Markdown
Contributor Author

Yes makes sense

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

@podrivo

podrivo commented Apr 5, 2026

Copy link
Copy Markdown
Contributor

Thank you!

@CosminPerRam Looks good to me!

@CosminPerRam CosminPerRam left a comment

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.

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 Outdated
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 Outdated

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 Outdated
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.

@podrivo

podrivo commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

@yellowfromseegg Last minute changes. Let us know if there's any questions! 🙏

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.
Prevent TCP connection to voice port before HTTP request for TS6 WebQuery.
added a table with all the needed options and theyre default values
yellowfromseegg added a commit to yellowfromseegg/gamedig that referenced this pull request Jun 21, 2026
- Remove verbose explanatory comments from teamspeak6 protocol
- Rephrase TeamSpeak 6 docs in GAMES_LIST.md per maintainer wording
- Add changelog entry for TeamSpeak 6 support

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
yellowfromseegg and others added 2 commits June 21, 2026 21:23
- Remove verbose explanatory comments from teamspeak6 protocol
- Rephrase TeamSpeak 6 docs in GAMES_LIST.md per maintainer wording
- Add changelog entry for TeamSpeak 6 support

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Removed default query port assignment in teamspeak6 class.
@yellowfromseegg

Copy link
Copy Markdown
Contributor Author

hi, sorry, hope this is good now, kinda forgott about it😅

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