import { ACL, ChannelState } from '@tf2pickup-org/mumble-protocol';
import { Change } from './change.js';
import { Client } from './client.js';
import { Permissions } from './permissions.js';
import { User } from './user.js';
type ChannelChangeableProps = Pick<Channel, 'name' | 'parent' | 'temporary' | 'linkedChannels'>;
export type ChannelChanges = {
    -readonly [P in keyof ChannelChangeableProps]?: Change<Channel[P]>;
};
export declare class Channel {
    readonly client: Client;
    readonly id: number;
    name?: string;
    parent?: number;
    temporary: boolean;
    private links;
    constructor(client: Client, channelState: ChannelState & {
        channelId: number;
    });
    get users(): User[];
    get subChannels(): Channel[];
    get linkedChannels(): Channel[];
    createSubChannel(name: string): Promise<Channel>;
    remove(): Promise<this>;
    getPermissions(): Promise<Permissions>;
    link(otherChannel: Channel | number): Promise<this>;
    unlink(otherChannel: Channel | number): Promise<this>;
    fetchAcl(): Promise<ACL>;
    saveAcl(acl: ACL): Promise<void>;
}
export {};
