ReSpeak / tsclientlib

A TeamSpeak3 protocol implementation for usage in clients and bots
Apache License 2.0
121 stars 15 forks source link
rust teamspeak teamspeak-client teamspeak3

TsClientlib Build status

TsClientlib is a library that enables you to write voip clients and bots using the TeamSpeak protocol.

TeamSpeak is a proprietary voice-over-Internet Protocol (VoIP) application for audio communication between users on a chat channel, much like a telephone conference call. Users typically use headphones with a microphone. The client software connects to a TeamSpeak server of the user's choice, from which the user may join chat channels. – Wikipedia

The various libraries in this repository are currently a work in progress so don‘t expect everything to work. Many things you would expect from a library are working, like connecting, getting events, writing and receiving messages, etc. Some features like automatic reconnects are not yet there.

If you are searching for a usable client instead of a library, Qint will be a cross-platform TeamSpeak client, which is based on this library (but it is not ready yet).

Dependencies

Getting Started

An example of a simple chat bot can be found here.

Clone

This repository embeds the declarations as submodule. You can clone with

git clone https://github.com/ReSpeak/tsclientlib.git --recurse-submodules

or download the submodule afterwards with

git clone https://github.com/ReSpeak/tsclientlib.git
cd tsclientlib
git submodule update --init --recursive

Build and run the example client

The code can be found here.

cd tsclientlib
cargo run --example simple

Build and run the example audio client

The code can be found here.

cd tsclientlib
cargo run --example audio

Projects

You probably want to use tsclientlib, it builds upon all other projects. This list shows what each library does and it may be useful if you want to help developing.

Utils

The utils folder contains smaller building blocks for the library.

How this works

tsproto implements the basic TeamSpeak protocol stuff (uh, who would have expected that), which comes down to creating a connection, make sure that udp packets are delivered, encrypt and compress the communication and give access to all these low-level things.

The convenient client library on top is tsclientlib. It uses all the versions, messages, structures and errors which are written down in a machine readable format and provides a nice and safe api.

Performance

For benchmarks, a TeamSpeak server has to run at localhost. Run

cd tsproto
cargo bench -- <name>

where <name> is connect or message.

On a i7-5280K with 6 cores/12 threads @3.6 GHz, which uses more or less only one thread because we only test a single connection, we get:

Miscellaneous

This project is not an official TeamSpeak project. We started to write an own client for fun and because we want some features (and bugfixes) which are not available in the official client.

That said, we do not want to harm the company behind TeamSpeak because we like their product. Otherwise we would just use something else and not write our own client 😉. As TeamSpeak earns its money with selling servers and thus their existence depends on it, we will not publish any server related code and we encourage you to do the same (this may change with the new licensing system, introduced in the 3.1 server).

Thanks TeamSpeak for your software!

License

Licensed under either of

at your option.