Expand description

Ts3 query library
Small, bare-metal ts query lib without any callback support currently.

A connectivity checking wrapper is available under managed when enabling its feature.

Examples

Simple auth + clients of a server group

use ts3_query::*;

let mut client = QueryClient::new("localhost:10011")?;

client.login("serveradmin", "password")?;
client.select_server_by_port(9987)?;

let group_clients = client.servergroup_client_cldbids(7)?;
println!("Got clients in group 7: {:?}",group_clients);

client.logout()?;

Cloning a channel

use ts3_query::*;

let mut client = QueryClient::new("localhost:10011")?;
client.login("serveradmin", "password")?;
client.select_server_by_port(9987)?;

let channels = client.channels_full()?;
if let Some(channel) = channels.first() {
    client.create_channel(&ChannelEdit {
        channel_name: Some("Cloned channel".to_owned()),
        ..ChannelEdit::from(channel)
    })?;
}

Using the raw interface for setting client descriptions.

use ts3_query::*;

let mut client = QueryClient::new("localhost:10011")?;

client.login("serveradmin", "password")?;
client.select_server_by_port(9987)?;

// escape things like string args, not required for clid
// as it's not user input/special chars in this case
let cmd = format!("clientedit clid={} client_description={}",
 7, raw::escape_arg("Some Description!")
);
// we don't expect any value returned
let _ = client.raw_command(&cmd)?;

client.logout()?;

Raw interface example retrieving online client names

use ts3_query::*;
use std::collections::HashSet;

let mut client = QueryClient::new("localhost:10011")?;

client.login("serveradmin", "password")?;
client.select_server_by_port(9987)?;

let mut res = raw::parse_multi_hashmap(client.raw_command("clientlist")?, false);
let names = res
    .into_iter()
    .map(|mut e| e.remove("client_nickname")
    // ignore empty value & unescape
    .unwrap().map(raw::unescape_val)
     // may want to catch this in a real application
        .unwrap())
    .collect::<HashSet<String>>();
println!("{:?}",names);
client.logout()?;

Modules

managedmanaged

Managed connection module. Handles reconnection and name uniqueness. Wraps a normal query connection with health checks. Handles renaming and claimed names. Useful if running long-lasting connections which tend to break over the wire.

Module with helpers for raw-calls

Structs

This struct defines the values of a channel that are changeable The difference to ChannelFull is that this does not contain values that are not changeable like

Server error response

Ts3 Query client with active connection

Server Group returned from server_group_list. Field names are according to the query protocol.

Enums

This defines when/if the channel gets automatically removed

Target for message sending

Constants

Default DoS limit for read bytes per line

Default DoS limit for read lines

Type Definitions

Server interal ID for client, not it’s Identity / MyTeamspeak ID.

Temporary, per connection ID of a client, reused upon disconnect.
Not to be confused with a client database, myteamspeak or identity ID.

CRC32 checksum of the channel icon, but received as i64 instead of u64, except when using clientdbinfo