import type { ActivityStore } from "./activity-log.js"; import { DISCORD_CHANNEL_TYPES } from "./constants.js"; import type { DiscordClient } from "./discord-client.js"; import { type GatewaySoundboardEffectEvidence, type GatewaySoundboardEffectSource } from "./gateway-soundboard-effect.js"; import { InteractionLimiter } from "./interaction-limiter.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export interface SoundboardPlaybackCheckRequest { channelId: string; soundId: string; sourceGuildId: string | null; } export interface SoundboardPlaybackRequest extends SoundboardPlaybackCheckRequest { operationKey: string; } export interface NormalizedSoundboardPlaybackRequest extends SoundboardPlaybackRequest { operationKeyHash: string; } export interface SoundboardPlaybackPermissionEvidence { administrator: boolean; appliedRoleIds: string[]; confidence: "complete"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; permissionSourceChannelId: string; requiredPermissionNames: DiscordPermissionName[]; } export interface SoundboardPlaybackReadiness { applicationId: string; botId: string; channel: { guildId: string; id: string; type: typeof DISCORD_CHANNEL_TYPES.voice; }; checkedAt: string; permission: SoundboardPlaybackPermissionEvidence; privacy: { activityRecords: "content-free"; channelNames: "omitted"; rawPayloads: "omitted"; soundNames: "transient"; voiceProfiles: "omitted"; }; schemaVersion: number; sound: { available: true; id: string; name: string; sourceGuildId: string | null; unknownFieldCount: number; }; status: "ready"; voice: { channelId: string; deaf: false; guildId: string; mute: false; selfDeaf: false; selfMute: boolean; suppressed: false; unknownFieldCount: number; userId: string; }; } export interface SoundboardPlaybackResult { activityId: string; channelId: string; gatewayEvidence: GatewaySoundboardEffectEvidence | null; guildId: string; localReplay: boolean; operationKeyHash: string; requestDigest: string; schemaVersion: number; soundId: string; sourceGuildId: string | null; status: "completed"; verification: "gateway-match" | "response-only" | "verified-local-replay"; } export interface SoundboardPlaybackServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; gateway?: GatewaySoundboardEffectSource; intentKey: Uint8Array; limiter: InteractionLimiter; operationStore: OperationStore; policy: Pick; randomId?: () => string; } export declare function normalizeSoundboardPlaybackCheckRequest(request: SoundboardPlaybackCheckRequest): SoundboardPlaybackCheckRequest; export declare function normalizeSoundboardPlaybackRequest(request: SoundboardPlaybackRequest): NormalizedSoundboardPlaybackRequest; export declare function soundboardPlaybackIntentKey(token: string): Uint8Array; export declare function soundboardPlaybackRequestDigest(key: Uint8Array, applicationId: string, botId: string, request: NormalizedSoundboardPlaybackRequest): string; export declare class SoundboardPlaybackService { #private; constructor(options: SoundboardPlaybackServiceOptions); requestDigest(applicationId: string, botId: string, request: SoundboardPlaybackRequest): string; replay(applicationId: string, botId: string, request: SoundboardPlaybackRequest): Promise; check(applicationId: string, botId: string, request: SoundboardPlaybackCheckRequest, options?: RequestOptions): Promise; play(applicationId: string, botId: string, request: SoundboardPlaybackRequest, options?: RequestOptions): Promise; } //# sourceMappingURL=soundboard-playback-service.d.ts.map