import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.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 ForumPostRequest { appliedTagIds?: readonly string[]; auditReason: string; autoArchiveDuration?: number; channelId: string; content: string; name: string; notifyUserIds?: readonly string[]; operationKey: string; rateLimitPerUser?: number; } export interface NormalizedForumPostRequest { appliedTagIds: string[]; auditReason: string; autoArchiveDuration: number | null; channelId: string; content: string; name: string; notifyUserIds: string[]; operationKey: string; operationKeyHash: string; rateLimitPerUser: number | null; } export interface ForumPostPlan { createdAt: string; digest: string; guild: { id: string; name: string; ownerId: string; }; operationKeyHash: string; parent: { availableTagCount: number; defaultAutoArchiveDuration: number | null; defaultThreadRateLimitPerUser: number | null; flags: number; guildId: string; id: string; name: string; requireTag: boolean; type: number; }; permission: { administrator: boolean; confidence: "complete"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; requiredPermissionNames: DiscordPermissionName[]; }; schemaVersion: number; selectedTags: Array<{ id: string; moderated: boolean; name: string; }>; status: "planned"; target: { appliedTagIds: string[]; auditReason: string; autoArchiveDuration: number | null; content: string; name: string; notificationUserIds: string[]; rateLimitPerUser: number | null; }; warnings: string[]; } export type ForumPostDriftField = "applied-tags" | "auto-archive-duration" | "content" | "name" | "rate-limit-per-user" | "thread-state"; export interface ForumPostResult { activityId: string; driftFields: ForumPostDriftField[]; guildId: string; messageId: string; operationKeyHash: string; parentChannelId: string; planDigest: string; schemaVersion: number; status: "completed" | "completed-with-drift"; threadId: string; url: string; verification: "drift" | "match"; } export interface ForumPostServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; limiter: InteractionLimiter; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeForumPostRequest(request: ForumPostRequest): NormalizedForumPostRequest; export declare class ForumPostService { #private; constructor(options: ForumPostServiceOptions); plan(botId: string, request: ForumPostRequest, options?: RequestOptions): Promise; execute(botId: string, request: ForumPostRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=forum-post-service.d.ts.map