import type { ThreadChannelStructure } from '../../client/transformers';
import type { APIThreadMember, RESTGetAPIChannelThreadMembersQuery, RESTGetAPIChannelThreadsArchivedQuery, RESTPatchAPIChannelJSONBody, RESTPostAPIChannelMessagesThreadsJSONBody, RESTPostAPIChannelThreadsJSONBody, RESTPostAPIGuildForumThreadsJSONBody } from '../../types';
import type { MakeRequired, When } from '../types/util';
import { BaseShorter } from './base';
export declare class ThreadShorter extends BaseShorter {
    /**
     * Creates a new thread in the channel (only guild based channels).
     * @param channelId The ID of the parent channel.
     * @param reason The reason for unpinning the message.
     * @returns A promise that resolves when the thread is succesfully created.
     */
    create(channelId: string, body: RESTPostAPIChannelThreadsJSONBody | RESTPostAPIGuildForumThreadsJSONBody, reason?: string): Promise<ThreadChannelStructure>;
    fromMessage(channelId: string, messageId: string, options: RESTPostAPIChannelMessagesThreadsJSONBody & {
        reason?: string;
    }): Promise<ThreadChannelStructure>;
    join(threadId: string): Promise<never>;
    leave(threadId: string): Promise<never>;
    lock(threadId: string, locked?: boolean, reason?: string): Promise<ThreadChannelStructure>;
    edit(threadId: string, body: RESTPatchAPIChannelJSONBody, reason?: string): Promise<ThreadChannelStructure>;
    removeMember(threadId: string, memberId: string): Promise<never>;
    fetchMember<WithMember extends boolean = false>(threadId: string, memberId: string, with_member: WithMember): Promise<When<WithMember, Required<APIThreadMember>, GetAPIChannelThreadMemberResult>>;
    addMember(threadId: string, memberId: string): Promise<never>;
    listMembers<T extends RESTGetAPIChannelThreadMembersQuery = RESTGetAPIChannelThreadMembersQuery>(threadId: string, query?: T): Promise<InferWithMemberOnList<T>>;
    listArchivedThreads(channelId: string, type: 'public' | 'private', query?: RESTGetAPIChannelThreadsArchivedQuery): Promise<{
        threads: ThreadChannelStructure[];
        members: GetAPIChannelThreadMemberResult[];
        hasMore: boolean;
    }>;
    listJoinedArchivedPrivate(channelId: string, query?: RESTGetAPIChannelThreadsArchivedQuery): Promise<{
        threads: ThreadChannelStructure[];
        members: GetAPIChannelThreadMemberResult[];
        hasMore: boolean;
    }>;
}
export type GetAPIChannelThreadMemberResult = MakeRequired<APIThreadMember, 'id' | 'user_id'>;
type InferWithMemberOnList<T extends RESTGetAPIChannelThreadMembersQuery> = T extends {
    with_member: infer B;
} ? B extends true ? Required<APIThreadMember>[] : GetAPIChannelThreadMemberResult[] : GetAPIChannelThreadMemberResult[];
export {};
