import type { ActivityStore } from "./activity-log.js"; import { type GuildAfkTimeoutSeconds, type GuildDefaultMessageNotifications, type GuildExplicitContentFilter, type GuildSettingsField, type GuildSystemNotificationSuppression, type GuildVerificationLevel } from "./constants.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"; declare const LOCAL_CONSTRAINTS: Readonly<{ afkChannelTypes: number[]; afkTimeoutSeconds: (60 | 300 | 900 | 1800 | 3600)[]; defaultMessageNotifications: ("all-messages" | "only-mentions")[]; explicitContentFilters: ("all-members" | "disabled" | "members-without-roles")[]; guildAllowlist: 100; supportedFields: ("afkChannelId" | "afkTimeoutSeconds" | "defaultMessageNotifications" | "explicitContentFilter" | "premiumProgressBarEnabled" | "suppressedSystemNotifications" | "systemChannelId" | "verificationLevel")[]; systemChannelTypes: number[]; systemNotificationSuppressions: ("guild-reminders" | "join-notification-replies" | "join-notifications" | "premium-subscriptions" | "role-subscription-purchase-notification-replies" | "role-subscription-purchase-notifications")[]; verificationLevels: ("high" | "low" | "medium" | "none" | "very-high")[]; }>; export interface GuildSettingsChangeRequest { afkChannelId?: string | null; afkTimeoutSeconds?: GuildAfkTimeoutSeconds; auditReason: string; defaultMessageNotifications?: GuildDefaultMessageNotifications; explicitContentFilter?: GuildExplicitContentFilter; guildId: string; operationKey: string; premiumProgressBarEnabled?: boolean; suppressedSystemNotifications?: readonly GuildSystemNotificationSuppression[]; systemChannelId?: string | null; verificationLevel?: GuildVerificationLevel; } export interface NormalizedGuildSettingsChangeRequest { afkChannelId?: string | null; afkTimeoutSeconds?: GuildAfkTimeoutSeconds; auditReason: string; defaultMessageNotifications?: GuildDefaultMessageNotifications; explicitContentFilter?: GuildExplicitContentFilter; guildId: string; operationKeyHash: string; premiumProgressBarEnabled?: boolean; requestedFields: GuildSettingsField[]; suppressedSystemNotifications?: GuildSystemNotificationSuppression[]; systemChannelId?: string | null; verificationLevel?: GuildVerificationLevel; } export interface GuildSettingsAccessEvidence { appliedRoleIds: string[]; authorizedForChange: boolean; botAdministrator: boolean; botIsGuildOwner: boolean; complete: true; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; manageGuild: boolean; requiredPermission: "MANAGE_GUILD"; unknownPermissionBits: string; warnings: string[]; } export interface GuildSettingsChannelReferenceView { channelId: string; eligible: boolean; exists: boolean; metadata: "missing" | "obfuscated" | "trusted"; parentId: string | null; type: number | null; } export interface GuildSettingsConfigurationView { afkChannel: GuildSettingsChannelReferenceView | null; afkChannelId: string | null; afkTimeoutSeconds: GuildAfkTimeoutSeconds; defaultMessageNotifications: GuildDefaultMessageNotifications; explicitContentFilter: GuildExplicitContentFilter; issues: string[]; premiumProgressBarEnabled: boolean; suppressedSystemNotifications: GuildSystemNotificationSuppression[]; systemChannel: GuildSettingsChannelReferenceView | null; systemChannelId: string | null; unknownSystemChannelFlagsPresent: boolean; verificationLevel: GuildVerificationLevel; } export interface GuildSettingsPrivacyProjection { channelNames: "omitted"; guildPresentation: "omitted"; memberData: "omitted"; persistence: "none"; rawPayloads: "omitted"; roleNames: "omitted"; unknownValues: "bit-presence-only"; } export type GuildSettingsEffect = "noise-increasing" | "noise-reducing" | "presentation-change" | "routing-change" | "strengthening" | "suppression-increase" | "suppression-mixed" | "suppression-reduction" | "timeout-change" | "weakening"; export interface GuildSettingsFieldEffect { effect: GuildSettingsEffect; field: GuildSettingsField; } export interface GuildSettingsVerificationBoundary { automaticRetry: false; freshApiReadback: true; gatewayLayoutContinuity: true; mutationResponse: true; rollback: "not-automatic"; } export interface GuildSettingsAuditResult { access: GuildSettingsAccessEvidence; applicationId: string; botId: string; configuration: GuildSettingsConfigurationView; guildId: string; inventory: GuildChannelEvidenceView; localConstraints: typeof LOCAL_CONSTRAINTS; privacy: GuildSettingsPrivacyProjection; schemaVersion: number; status: "ok"; verificationBoundary: GuildSettingsVerificationBoundary; } export interface GuildSettingsChangePlan { access: GuildSettingsAccessEvidence; applicationId: string; auditReason: string; botId: string; changedFields: GuildSettingsField[]; createdAt: string; current: GuildSettingsConfigurationView; desired: GuildSettingsConfigurationView; digest: string; effects: GuildSettingsFieldEffect[]; guildId: string; inventory: GuildChannelEvidenceView; localConstraints: typeof LOCAL_CONSTRAINTS; operationKeyHash: string; privacy: GuildSettingsPrivacyProjection; requestedFields: GuildSettingsField[]; risks: string[]; schemaVersion: number; status: "already-current" | "planned"; verificationBoundary: GuildSettingsVerificationBoundary; warnings: string[]; writeRequired: boolean; } export interface GuildSettingsChangeResult { activityId: string | null; driftFields: GuildSettingsField[]; guildId: string; operationKeyHash: string; planDigest: string; requestedFields: GuildSettingsField[]; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; verification: "drift" | "match" | "not-required"; warnings: string[]; } export interface GuildSettingsServiceClient extends Pick { } export interface GuildSettingsServiceOptions { activityStore: ActivityStore; client: GuildSettingsServiceClient; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function assertGuildSettingsGetInput(guildId: string): void; export declare function normalizeGuildSettingsChangeRequest(request: GuildSettingsChangeRequest): NormalizedGuildSettingsChangeRequest; export declare class GuildSettingsService { #private; constructor(options: GuildSettingsServiceOptions); get(applicationId: string, botId: string, guildId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: GuildSettingsChangeRequest, options?: RequestOptions): Promise; reconcilePlan(applicationId: string, botId: string, request: GuildSettingsChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: GuildSettingsChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=guild-settings-service.d.ts.map