import type { ActivityStore } from "./activity-log.js"; import { type AttachmentFileReview } from "./attachment-file.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 AttachmentMessageRequest { channelId: string; content?: string; description?: string; filePath: string; filename?: string; notifyReplyAuthor?: boolean; notifyUserIds?: readonly string[]; operationKey: string; replyToMessageId?: string; } export interface NormalizedAttachmentMessageRequest { channelId: string; content: string | null; description: string | null; filePath: string; filename: string; notifyReplyAuthor: boolean; notifyUserIds: string[]; operationKey: string; operationKeyHash: string; replyToMessageId: string | null; } export interface AttachmentMessagePlan { channel: { guildId: string; id: string; parentId: string | null; type: number; }; createdAt: string; digest: string; file: AttachmentFileReview & { description: string | null; filename: string; maxBytes: number; }; notificationUserIds: string[]; notifyReplyAuthor: boolean; operationKeyHash: string; permission: { administrator: boolean; confidence: "complete"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; permissionSourceChannelId: string; requiredPermissionNames: DiscordPermissionName[]; }; reply: { authorId: string; messageId: string; } | null; schemaVersion: number; status: "planned"; target: { content: string | null; description: string | null; filename: string; }; warnings: string[]; } export interface AttachmentMessageResult { activityId: string; attachment: { descriptionPresent: boolean; filename: string; sizeBytes: number; }; channelId: string; guildId: string; messageId: string; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "completed"; url: string; } export interface AttachmentMessageServiceOptions { activityStore: ActivityStore; attachmentMaxBytes: number; attachmentRoots: readonly string[]; client: Pick; clock?: () => Date; limiter: InteractionLimiter; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeAttachmentMessageRequest(request: AttachmentMessageRequest): NormalizedAttachmentMessageRequest; export declare function attachmentMessageNonce(channelId: string, operationKey: string): string; export declare class AttachmentMessageService { #private; constructor(options: AttachmentMessageServiceOptions); plan(botId: string, request: AttachmentMessageRequest, options?: RequestOptions): Promise; execute(botId: string, request: AttachmentMessageRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=attachment-message-service.d.ts.map