func (c *Client) SetChannelCommander(val bool) error {
	return c.ClientUpdate(NewArg(ClientIsChannelCommander, val))
}
SetChannelCommander sets whether the client is a channel commander.
package ts3
func (c *Client) Login(user, passwd string) error {
	_, err := c.ExecCmd(NewCmd("login").WithArgs(
		NewArg("client_login_name", user),
		NewArg("client_login_password", passwd)),
	)
	return err
}
func (c *Client) Logout() error {
	_, err := c.Exec("logout")
	return err
}
type Version struct {
	Version  string
	Platform string
	Build    int
}
func (c *Client) Version() (*Version, error) {
	v := &Version{}
	if _, err := c.ExecCmd(NewCmd("version").WithResponse(v)); err != nil {
		return nil, err
	}
	return v, nil
}
func (c *Client) Use(id int) error {
	_, err := c.ExecCmd(NewCmd("use").WithArgs(NewArg("sid", id)))
	return err
}
func (c *Client) UsePort(port int) error {
	_, err := c.ExecCmd(NewCmd("use").WithArgs(NewArg("port", port)))
	return err
}
type ConnectionInfo struct {
	ServerStatus           string `ms:"virtualserver_status"`
	ServerID               int    `ms:"virtualserver_id"`
	ServerUniqueIdentifier string `ms:"virtualserver_unique_identifier"`
	ServerPort             int    `ms:"virtualserver_port"`
	ClientID               int    `ms:"client_id"`
	ClientChannelID        int    `ms:"client_channel_id"`
	ClientName             string `ms:"client_nickname"`
	ClientDatabaseID       int    `ms:"client_database_id"`
	ClientLoginName        string `ms:"client_login_name"`
	ClientUniqueIdentifier string `ms:"client_unique_identifier"`
	ClientOriginServerID   int    `ms:"client_origin_server_id"`
}
func (c *Client) Whoami() (*ConnectionInfo, error) {
	i := &ConnectionInfo{}
	if _, err := c.ExecCmd(NewCmd("whoami").WithResponse(&i)); err != nil {
		return nil, err
	}
	return i, nil
}
const (
	ClientNickname           = "client_nickname"
	ClientIsTalker           = "client_is_talker"
	ClientDescription        = "client_description"
	ClientIsChannelCommander = "client_is_channel_commander"
	ClientIconID             = "client_icon_id"
)
func (c *Client) ClientUpdate(properties ...CmdArg) error {
	_, err := c.ExecCmd(NewCmd("clientupdate").WithArgs(properties...))
	return err
}
func (c *Client) SetNick(nick string) error {
	return c.ClientUpdate(NewArg(ClientNickname, nick))
}
func (c *Client) SetTalker(val bool) error {
	return c.ClientUpdate(NewArg(ClientIsTalker, val))
}
func (c *Client) SetDescription(description string) error {
	return c.ClientUpdate(NewArg(ClientDescription, description))
}