/// <reference types="node" />
import { Abstract } from "./Abstract";
import { TeamSpeak } from "../TeamSpeak";
import { ClientList } from "../types/ResponseTypes";
import { ClientDBEdit, ClientEdit } from "../types/PropertyTypes";
import { ClientType } from "../types/enum";
export declare class TeamSpeakClient extends Abstract {
    constructor(parent: TeamSpeak, list: ClientList);
    get clid(): number;
    get cid(): number;
    get databaseId(): number;
    get nickname(): string;
    get type(): ClientType;
    get uniqueIdentifier(): string;
    get away(): number | undefined;
    get awayMessage(): string | undefined;
    get flagTalking(): number | undefined;
    get inputMuted(): number | undefined;
    get outputMuted(): number | undefined;
    get inputHardware(): number | undefined;
    get outputHardware(): number | undefined;
    get talkPower(): number | undefined;
    get isTalker(): number | undefined;
    get isPrioritySpeaker(): number | undefined;
    get isRecording(): number | undefined;
    get isChannelCommander(): number | undefined;
    get servergroups(): number[] | undefined;
    get channelGroupId(): number | undefined;
    get channelGroupInheritedChannelId(): number | undefined;
    get version(): string | undefined;
    get platform(): string | undefined;
    get idleTime(): number | undefined;
    get created(): number | undefined;
    get lastconnected(): number | undefined;
    get country(): string | undefined;
    get connectionClientIp(): string | undefined;
    get badges(): string | undefined;
    /** evaluates if the client is a query client or a normal client */
    isQuery(): boolean;
    /**
     * Retrieves a displayable Client Link for the TeamSpeak Chat
     */
    getUrl(): string;
    /** returns general info of the client, requires the client to be online */
    getInfo(): Promise<import("../types/ResponseTypes").ClientInfo>;
    /** returns the clients database info */
    getDBInfo(): Promise<import("../types/ResponseTypes").ClientDBInfo>;
    /** returns a list of custom properties for the client */
    customInfo(): Promise<import("../types/ResponseTypes").CustomInfo[]>;
    /**
     * removes a custom property from the client
     * @param ident the key which should be deleted
     */
    customDelete(ident: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * creates or updates a custom property for the client
     * ident and value can be any value, and are the key value pair of the custom property
     * @param ident the key which should be set
     * @param value the value which should be set
     */
    customSet(ident: string, value: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * kicks the client from the server
     * @param msg the message the client should receive when getting kicked
     */
    kickFromServer(msg: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * kicks the client from their currently joined channel
     * @param msg the message the client should receive when getting kicked (max 40 Chars)
     */
    kickFromChannel(msg: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * bans the chosen client with its uid
     * @param banreason ban reason
     * @param time bantime in seconds, if left empty it will result in a permaban
     */
    ban(banreason: string, time?: number): Promise<import("../types/ResponseTypes").BanAdd>;
    /**
     * moves the client to a different channel
     * @param cid channel id in which the client should get moved
     * @param cpw the channel password
     */
    move(cid: number, cpw?: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * adds the client to one or more groups
     * @param sgid one or more servergroup ids which the client should be added to
     */
    addGroups(sgid: number | number[]): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * Removes the client from one or more groups
     * @param sgid one or more servergroup ids which the client should be added to
     */
    delGroups(sgid: number | number[]): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * edits the client
     * @param properties the properties to change
     */
    edit(properties: ClientEdit): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * Changes a clients settings using given properties.
     * @param properties the properties which should be modified
     */
    dbEdit(properties: ClientDBEdit): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * pokes the client with a certain message
     * @param msg the message the client should receive
     */
    poke(msg: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * sends a textmessage to the client
     * @param msg the message the client should receive
     */
    message(msg: string): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * returns a list of permissions defined for the client
     * @param permsid if the permsid option is set to true the output will contain the permission names
     */
    permList(permsid?: boolean): Promise<import("../types/ResponseTypes").PermList[]>;
    /**
     * Adds a set of specified permissions to a client.
     * Multiple permissions can be added by providing the three parameters of each permission.
     * A permission can be specified by permid or permsid.
     * @param perm the permid or permsid
     * @param value value of the permission
     * @param skip whether the skip flag should be set
     * @param negate whether the negate flag should be set
     */
    addPerm(perm: string | number, value: number, skip?: number, negate?: number): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /**
     * Removes a set of specified permissions from a client.
     * Multiple permissions can be removed at once.
     * A permission can be specified by permid or permsid
     * @param perm the permid or permsid
     */
    delPerm(perm: string | number): Promise<import("../types/QueryResponse").QueryResponseTypes[]>;
    /** returns a Buffer with the avatar of the user */
    getAvatar(): Promise<Buffer>;
    /** returns a Buffer with the icon of the client */
    getIcon(): Promise<Buffer>;
    /** returns the avatar name of the client */
    getAvatarName(): Promise<string>;
    /** gets the icon name of the client */
    getIconName(): Promise<string>;
}
