/**
 * discord:// adapter — outbound delivery via discord.js v14.
 *
 * URI scheme: `discord://<guild_id>/<channel_id>` (both snowflake numerics).
 *
 * Dependency: `discord.js` is an OPTIONAL peerDependency. Users who never
 * configure a Discord channel pay nothing — we lazy-load the module on
 * first `start()`/`send()`. If the dependency is missing at runtime, the
 * adapter surfaces a structured error via `SendResult` rather than
 * crashing the process.
 *
 * Intents: deliberately narrow to `GatewayIntentBits.Guilds` only. We do
 * NOT request `MessageContent` (which requires verified-bot approval
 * after 100 servers) because the adapter is outbound-only — we never
 * read message contents.
 *
 * Lifecycle: `start()` logs in + waits for the `ready` event before
 * resolving so the first `send()` cannot race the gateway handshake.
 * `stop()` destroys the client. `send()` auto-starts if not yet ready.
 *
 * Security: the bot token is closed over by this function and never
 * appears in any log output, error message, or SendResult — the same
 * discipline as the Telegram adapter.
 */
import type { InboundChannelEvent } from '../../runtime/event.js';
import type { ChannelAdapter, InboundSubscription } from '../types.js';
export interface DiscordAdapterOpts {
    /** Bot token from the Discord Developer Portal. */
    token: string;
}
export interface DiscordAdapter extends ChannelAdapter {
    start(): Promise<void>;
    stop(): Promise<void>;
    /**
     * AUTO.6 — attach a `messageCreate` listener that emits a unified
     * `InboundChannelEvent`. The first call upgrades the gateway intents
     * to include `GuildMessages` + `MessageContent` (intents are immutable
     * after client construction; a subscribeInbound that comes AFTER the
     * outbound client is already running throws — callers must subscribe
     * before send() or start()).
     */
    subscribeInbound(handler: (event: InboundChannelEvent) => Promise<void>): Promise<InboundSubscription>;
}
export declare function discordAdapter(opts: DiscordAdapterOpts): DiscordAdapter;
//# sourceMappingURL=discord.d.ts.map