import type { PostList, Post } from '@mattermost/types/posts';
import type { UserProfile } from '@mattermost/types/users';
import type { ActionFunc, ActionFuncAsync, ThunkActionFunc } from 'mattermost-redux/types/actions';
/**
 * Adds list(s) of user id(s) to the status fetching poll. Which gets fetched based on user interval polling duration
 * Do not use if status is required immediately.
 */
export declare function addUserIdsForStatusFetchingPoll(userIdsForStatus: Array<UserProfile['id']>): ActionFunc<boolean>;
/**
 * Adds list(s) of user id(s) to the profile fetching poll. Which gets fetched based on user interval polling duration
 * Do not use if profile is required immediately.
 */
export declare function addUserIdsForProfileFetchingPoll(userIdsForProfile: Array<UserProfile['id']>): ActionFunc<boolean>;
export declare function cleanUpStatusAndProfileFetchingPoll(): ThunkActionFunc<void>;
interface UserIdsAndMentions {
    userIdsForProfilePoll: Array<UserProfile['id']>;
    userIdsForStatusPoll: Array<UserProfile['id']>;
    mentionedUsernamesAndGroups: string[];
}
export declare function extractUserIdsAndMentionsFromPosts(posts: Post[]): ActionFunc<UserIdsAndMentions>;
/**
 * Gets in batch the user profiles, user statuses and user groups for the users in the posts list
 * This action however doesn't refetch the profiles and statuses except for groups if they are already fetched once
 */
export declare function batchFetchStatusesProfilesGroupsFromPosts(postsArrayOrMap: Post[] | PostList['posts'] | Post): ActionFunc<boolean>;
export declare function getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups: string[], isLicensed: boolean): ActionFuncAsync<string[]>;
export {};
