import type { ActivityStore } from "./activity-log.js"; import { type DiscordPermissionName } from "./permissions.js"; import { type CreateGuildChannelInput, type CreateGuildChannelPermissionOverwriteInput, type DiscordClient } from "./discord-client.js"; import type { GatewayChannelLayoutSource } from "./gateway-channel-layout.js"; import { type GuildChannelHttpEvidenceMode } from "./guild-channel-evidence.js"; import { type OperationStore } from "./operation-store.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export type ChannelCloneType = "announcement" | "category" | "forum" | "media" | "stage" | "text" | "voice"; export interface ChannelCloneRequest { auditReason: string; guildId: string; name?: string; operationKey: string; sourceChannelId: string; } export interface NormalizedChannelCloneRequest { auditReason: string; guildId: string; name: string | null; operationKey: string; operationKeyHash: string; sourceChannelId: string; } export interface ChannelCloneTagState { emojiId: string | null; emojiName: string | null; id: string; moderated: boolean; name: string; } export interface ChannelCloneState { availableTags: ChannelCloneTagState[] | null; bitrate: number | null; defaultAutoArchiveDuration: number | null; defaultForumLayout: number | null; defaultReactionEmoji: { emojiId: string | null; emojiName: string | null; } | null; defaultSortOrder: number | null; defaultThreadRateLimitPerUser: number | null; flags: number; guildId: string; id: string; name: string; nsfw: boolean | null; parentId: string | null; permissionOverwrites: CreateGuildChannelPermissionOverwriteInput[]; position: number; rateLimitPerUser: number | null; rtcRegion: string | null; topic: string | null; type: number; typeName: ChannelCloneType; userLimit: number | null; videoQualityMode: number | null; } export interface ChannelClonePlan { applicationId: string; auditReason: string; botId: string; capacity: { guildChannels: number; guildLimit: number; parentChildren: number | null; parentLimit: number | null; }; createdAt: string; digest: string; evidence: { httpMode: GuildChannelHttpEvidenceMode; layoutRevision: number; layoutUpdatedAt: string; obfuscatedChannels: number; }; guild: { features: string[]; id: string; name: string; ownerId: string; premiumTier: number; }; operationKeyHash: string; parent: { id: string; name: string; } | null; permission: { administrator: boolean; guildEffectivePermissionNames: DiscordPermissionName[]; guildEffectivePermissions: string; guildManageChannels: boolean; sourceEffectivePermissionNames: DiscordPermissionName[]; sourceEffectivePermissions: string; sourceViewChannel: boolean; }; privacy: { channelMetadata: "transient-untrusted"; hiddenMetadataReturned: false; omittedFields: readonly string[]; persistence: "content-free-only"; }; risks: string[]; schemaVersion: number; source: ChannelCloneState; status: "planned"; target: { payload: CreateGuildChannelInput; placement: "discord-default"; regeneratedTagIds: boolean; }; warnings: string[]; } export interface ChannelCloneResult { activityId: string; baselineLayoutRevision: number; createdChannelId: string; guildId: string; observedLayoutRevision: number; operationKeyHash: string; parentId: string | null; planDigest: string; schemaVersion: number; sourceChannelId: string; status: "completed"; tagIdMap: Array<{ createdTagId: string; sourceTagId: string; }>; type: number; typeName: ChannelCloneType; verification: "match"; } export interface ChannelCloneServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; verificationTimeoutMs?: number; } export declare function normalizeChannelCloneRequest(request: ChannelCloneRequest): NormalizedChannelCloneRequest; export declare class ChannelCloneService { #private; constructor(options: ChannelCloneServiceOptions); plan(applicationId: string, botId: string, request: ChannelCloneRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: ChannelCloneRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=channel-clone-service.d.ts.map