import { ActionRowBuilder, ButtonBuilder, type SendableChannels } from "discord.js"; import type { ApprovalRequest, ApprovalVerdict } from "./base.js"; export type ApprovalAction = "y" | "n" | "n2" | "cancel"; export declare function buildApprovalId(id: string, action: ApprovalAction): string; export declare function parseApprovalId(customId: string): { id: string; action: ApprovalAction; } | null; /** The ✅승인 / ❌거절 row, optionally rendered disabled (post-click). */ export declare function approvalRow(id: string, disabled?: boolean): ActionRowBuilder; /** The ephemeral 2-step "정말 거절?" row (recovery ①). */ export declare function confirmRejectRow(id: string): ActionRowBuilder; export interface AwaitApprovalOpts { /** How long to wait for the first decision before resolving "n". */ timeoutMs: number; } /** * Post the approval card to `channel` and resolve with the user's verdict. * Never throws — a Discord failure or timeout resolves "n" (fail-safe: no * explicit approval ⇒ block). The authoritative gate timeout still lives in the * dev-confirm controller; this inner timeout is a backstop. */ export declare function awaitApproval(channel: SendableChannels, req: ApprovalRequest, opts: AwaitApprovalOpts): Promise;