import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import type { GatewayChannelLayoutSource } from "./gateway-channel-layout.js"; import { type GuildChannelEvidenceView } from "./guild-channel-evidence.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 declare const GUILD_TEMPLATE_ACTIONS: readonly ["create", "delete", "synchronize", "update-metadata"]; export type GuildTemplateAction = typeof GUILD_TEMPLATE_ACTIONS[number]; export interface GuildTemplateChangeRequest { action: GuildTemplateAction; auditReason: string; description?: string | null; guildId: string; name?: string; operationKey: string; templateRef?: string; } interface NormalizedGuildTemplateChangeRequest { action: GuildTemplateAction; auditReason: string; description?: string | null; guildId: string; name?: string; operationKeyHash: string; templateRef?: string; } export interface GuildTemplateAccessEvidence { appliedRoleIds: string[]; botAdministrator: boolean; botIsGuildOwner: boolean; complete: true; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; manageGuild: true; requiredPermission: "MANAGE_GUILD"; unknownPermissionBits: string; } export interface GuildTemplateStructure { channels: { announcement: number; category: number; directory: number; forum: number; media: number; nsfw: number; stage: number; text: number; threads: number; total: number; unknown: number; voice: number; }; permissionOverwrites: { memberTargets: number; roleTargets: number; total: number; unknownTargets: number; }; roles: { privileged: number; riskyPermissionClasses: number; total: number; unknownPermissionBitfields: number; }; unknownFields: number; } export interface ProjectedGuildTemplate { createdAt: string; creatorUserId: string; isDirty: boolean | null; metadata: { descriptionCharacters: number | null; nameCharacters: number; }; structure: GuildTemplateStructure; templateRef: string; unknownFieldCount: number; updatedAt: string; usageCount: number; } export interface GuildTemplatePrivacyProjection { capabilities: "opaque-process-local-references"; omittedFields: readonly [ "code", "useUrl", "name", "description", "creatorProfile", "guildName", "roleNames", "channelNames", "channelTopics", "iconHashes", "serializedSourceGuild", "rawPayloads" ]; persistence: "content-free-activity-only"; rawPayloads: "omitted"; } export interface GuildTemplateInventoryResult { access: GuildTemplateAccessEvidence; applicationId: string; botId: string; channelEvidence: GuildChannelEvidenceView; guild: { id: string; }; inventory: { returned: number; safetyLimit: number; }; limitations: string[]; liveStructure: GuildTemplateStructure; privacy: GuildTemplatePrivacyProjection; schemaVersion: number; status: "ok"; templates: ProjectedGuildTemplate[]; } export interface GuildTemplateDrift { ambiguousChannelIdentities: number; ambiguousRoleIdentities: number; channelComparisonComplete: boolean; channelSettingsChanged: number; channelsAddedSinceSnapshot: number; channelsMissingFromGuild: number; roleSettingsChanged: number; rolesAddedSinceSnapshot: number; rolesMissingFromGuild: number; } export interface GuildTemplateChangePlan { access: GuildTemplateAccessEvidence; action: GuildTemplateAction; applicationId: string; auditReason: string; botId: string; channelEvidence: GuildChannelEvidenceView; createdAt: string; desiredMetadata: { description: string | null | undefined; name: string | undefined; } | null; digest: string; drift: GuildTemplateDrift | null; guild: { id: string; }; inventory: { returned: number; safetyLimit: number; }; liveStructure: GuildTemplateStructure; mutation: "create" | "delete" | "none" | "synchronize" | "update-metadata"; operationKeyHash: string; privacy: GuildTemplatePrivacyProjection; risks: string[]; schemaVersion: number; status: "already-current" | "planned"; target: ProjectedGuildTemplate | null; warnings: string[]; } export interface GuildTemplateChangeResult { action: GuildTemplateAction; activityId: string | null; guildId: string; operationKeyHash: string; planDigest: string; readbackMatched: boolean; schemaVersion: number; status: "already-current" | "completed"; templateRef: string | null; } export interface GuildTemplateServiceClient extends Pick { } export interface GuildTemplateServiceOptions { activityStore: ActivityStore; client: GuildTemplateServiceClient; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function normalizeGuildTemplateChangeRequest(request: GuildTemplateChangeRequest): NormalizedGuildTemplateChangeRequest; export declare function assertGuildTemplateListInput(guildId: string): void; export declare class GuildTemplateService { #private; constructor(options: GuildTemplateServiceOptions); list(applicationId: string, botId: string, guildId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: GuildTemplateChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: GuildTemplateChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=guild-template-service.d.ts.map