import type { ForumChannel, ThreadChannel, Guild, TextChannel } from 'discord.js'; /** * Ensures both the forum channel and notification channel exist. * Creates them if their IDs are null, then persists the IDs via saveConfig. */ export declare function ensureForums(guild: Guild, config: { forumChannelId: string | null; notificationChannelId: string | null; }, saveConfig: (key: 'forumChannelId' | 'notificationChannelId', value: string) => Promise): Promise<{ forumChannel: ForumChannel | TextChannel; notificationChannel: TextChannel; }>; /** * Creates a new thread for a session. * - Forum Channel: creates a forum post (thread with initial message) * - Text Channel: creates a public thread */ export declare function createSessionThread(forumChannel: ForumChannel | TextChannel, name: string): Promise; /** * Edits the starter message of a session thread. * * In TextChannel mode the starter message is the parent-channel preview the * thread was started from; in Forum mode it's the post's first message. Both * default to "⏳ Setting up..." when the thread is created — this lets callers * replace that placeholder once the session is ready. */ export declare function updateSessionThreadStarter(thread: ThreadChannel, content: string): Promise; /** * Fetches and renames a thread. Ignores all errors (thread may be deleted/archived). */ export declare function renameSessionThread(guild: Guild, threadId: string, newName: string): Promise; /** * Archives and locks a thread instead of permanently deleting it. * Unlike Telegram (which just closes a topic), Discord delete is permanent * and destroys all messages. Archiving preserves the conversation history. */ export declare function deleteSessionThread(guild: Guild, threadId: string): Promise; /** * If the thread is archived, unarchives it. */ export declare function ensureUnarchived(thread: ThreadChannel): Promise; /** * Builds a Discord deep link URL to a channel/thread, optionally to a specific message. */ export declare function buildDeepLink(guildId: string, channelId: string, messageId?: string): string;