import type { Client, Message, VoiceBasedChannel } from "discord.js";
import type { GatewayConversationEndpoint } from "./adapters.ts";
import type { DiscordAccountConfig } from "./chat/core/config-types.ts";
export type DiscordVoiceCommand = "join" | "leave" | "status";
interface DiscordVoiceControllerOptions {
    client: Client<true>;
    account: DiscordAccountConfig;
    sendText(channelId: string, text: string): Promise<string>;
    onActivity(): void;
    onError(error: Error): void;
}
interface DiscordVoiceSpeaker {
    userId: string;
    userName?: string;
    roleIds?: string[];
    isBot?: boolean;
}
export declare function parseDiscordVoiceCommandText(text: string, options?: {
    account?: DiscordAccountConfig;
    botName?: string;
}): DiscordVoiceCommand | undefined;
export declare function createWavBuffer(pcm: Buffer, options?: {
    sampleRate?: number;
    channels?: number;
    bitsPerSample?: number;
}): Buffer;
export declare class DiscordVoiceController {
    private readonly client;
    private readonly account;
    private readonly sendText;
    private readonly onActivity;
    private readonly onError;
    private readonly sessions;
    constructor(options: DiscordVoiceControllerOptions);
    handleMessage(message: Message, endpoint: GatewayConversationEndpoint): Promise<boolean>;
    executeCommand(command: DiscordVoiceCommand, endpoint: GatewayConversationEndpoint, voiceChannel?: VoiceBasedChannel): Promise<string>;
    canUse(endpoint: GatewayConversationEndpoint, speaker: DiscordVoiceSpeaker): boolean;
    join(endpoint: GatewayConversationEndpoint, voiceChannel: VoiceBasedChannel): Promise<string>;
    leave(textChannelId: string): string;
    status(textChannelId: string): string;
    speakReply(textChannelId: string, text: string, attachmentPaths?: string[]): Promise<void>;
    disconnect(): Promise<void>;
    private handleSpeakingStart;
    private playFile;
    private reportError;
}
export {};
//# sourceMappingURL=discord-voice.d.ts.map