import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.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"; declare const LOCAL_LIMITS: Readonly<{ channelDescriptionCharacters: 50; channels: 5; descriptionCharacters: 140; }>; export type WelcomeScreenEmojiRequest = { emojiId: string; kind: "custom"; } | { kind: "none"; } | { kind: "unicode"; unicode: string; }; export interface WelcomeScreenChannelRequest { channelId: string; description: string; emoji: WelcomeScreenEmojiRequest; } export interface WelcomeScreenChangeRequest { auditReason: string; channels: readonly WelcomeScreenChannelRequest[]; description: string | null; enabled: boolean; guildId: string; operationKey: string; } export interface NormalizedWelcomeScreenChangeRequest { auditReason: string; channels: WelcomeScreenChannelRequest[]; description: string | null; enabled: boolean; guildId: string; operationKeyHash: string; } export interface WelcomeScreenAccessEvidence { appliedRoleIds: string[]; authorizedForChange: boolean; botAdministrator: boolean; botIsGuildOwner: boolean; complete: true; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; manageGuild: boolean; requiredChangePermission: "MANAGE_GUILD"; unknownPermissionBits: string; warnings: string[]; } export interface WelcomeScreenChannelReferenceView { channelId: string; direct: boolean; everyoneCanView: boolean | null; exists: boolean; parentId: string | null; type: number | null; } export interface WelcomeScreenEmojiView { animated: boolean | null; available: boolean | null; customEmojiId: string | null; healthy: boolean; kind: "custom" | "none" | "unicode"; restrictedRoleIds: string[]; unicode: string | null; } export interface WelcomeScreenChannelView { channel: WelcomeScreenChannelReferenceView; description: string | null; descriptionCharacters: number; emoji: WelcomeScreenEmojiView; } export interface WelcomeScreenConfigurationView { available: boolean; channels: WelcomeScreenChannelView[]; communityGuild: boolean; description: string | null; descriptionCharacters: number | null; enabled: boolean; issues: string[]; replacementBlockedReasons: string[]; textIncluded: boolean; unknownFieldCount: number; } export interface WelcomeScreenPrivacyProjection { persistence: "none"; rawPayloads: "omitted"; text: "included" | "omitted"; unknownFields: "counts-only"; } export interface WelcomeScreenAuditResult { access: WelcomeScreenAccessEvidence; applicationId: string; botId: string; configuration: WelcomeScreenConfigurationView; guild: { id: string; name: string; }; localLimits: typeof LOCAL_LIMITS; privacy: WelcomeScreenPrivacyProjection; schemaVersion: number; status: "ok"; verificationBoundary: { apiReadback: true; freshNonStaffClientCheckRecommended: boolean; memberExperienceVerified: false; }; } export interface WelcomeScreenChangeDiff { channelEntriesAdded: number; channelEntriesModified: number; channelEntriesMoved: number; channelEntriesRemoved: number; descriptionChanged: boolean; emojiChanges: number; enabledChanged: boolean; textChanges: number; } export interface WelcomeScreenChangePlan { access: WelcomeScreenAccessEvidence; applicationId: string; auditReason: string; botId: string; createdAt: string; current: WelcomeScreenConfigurationView; desired: WelcomeScreenConfigurationView; diff: WelcomeScreenChangeDiff; digest: string; guild: { id: string; name: string; }; localLimits: typeof LOCAL_LIMITS; operationKeyHash: string; privacy: WelcomeScreenPrivacyProjection; risks: string[]; schemaVersion: number; status: "already-current" | "planned"; verificationBoundary: WelcomeScreenAuditResult["verificationBoundary"]; warnings: string[]; writeRequired: boolean; } export interface WelcomeScreenChangeResult { activityId: string | null; guildId: string; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; verification: "drift" | "match" | "not-required"; } export interface WelcomeScreenServiceClient extends Pick { } export interface WelcomeScreenServiceOptions { activityStore: ActivityStore; client: WelcomeScreenServiceClient; clock?: () => Date; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function isWelcomeScreenUnicodeEmoji(value: string): boolean; export declare function assertWelcomeScreenGetInput(guildId: string, includeText: boolean): void; export declare function normalizeWelcomeScreenChangeRequest(request: WelcomeScreenChangeRequest): NormalizedWelcomeScreenChangeRequest; export declare class WelcomeScreenService { #private; constructor(options: WelcomeScreenServiceOptions); get(applicationId: string, botId: string, guildId: string, includeText?: boolean, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: WelcomeScreenChangeRequest, options?: RequestOptions): Promise; reconcilePlan(applicationId: string, botId: string, request: WelcomeScreenChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: WelcomeScreenChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=welcome-screen-service.d.ts.map