import type { ChannelInfoResponse, GetFileDataResponse, GetFilePathResponse, GetFileUrlResponse, GroupInfoResponse, GuildInfoResponse, Message, SelfInfoResponse, SendMessageResponse, UploadFileResponse, UserInfoResponse } from '../types';
import type { EventsMapping } from '../types/events';
import type Adapter from './adapter';
import type { Session } from './session';
type ReverseList = {
    [K in keyof EventsMapping]: Parameters<EventsMapping[K]>[0] extends Session ? K : never;
};
type SessionEvents = ReverseList[keyof ReverseList];
type Actions = Exclude<keyof Api, 'adapter' | 'getSupportedEvents' | 'getSupportedEvents'>;
/**
 * Api which identify bot's standard platform apis.
 *
 * For different `api` child class, not most of them have implementation.
 *
 * @class
 * @abstract
 */
export declare abstract class Api {
    /**
     * Get supported actions for current api implementation.
     *
     * @returns Supported actions
     */
    getSupportedActions(): Actions[];
    abstract getSupportedEvents(): SessionEvents[];
    /**
     * Current api's bot instance.
     *
     * @readonly
     */
    readonly adapter: Adapter<any, any, any>;
    /**
     * Api class constructor.
     *
     * @param adapter - Current api's bot instance
     */
    constructor(adapter: Adapter<any, any, any>);
    /**
     * Send a private message.
     *
     * @param message - Message content to send
     * @param userId - Target user id
     * @param meta - Extra meta data, optional
     * @returns Message id and send time
     *
     * @async
     */
    sendPrivateMsg(message: Message, userId: string, meta?: object): Promise<SendMessageResponse>;
    /**
     * Send a group message.
     *
     * @param message - Message content to send
     * @param groupId - Target group id
     * @param meta - Extra meta data, optional
     * @returns Message id and send time
     *
     * @async
     */
    sendGroupMsg(message: Message, groupId: string, meta?: object): Promise<SendMessageResponse>;
    /**
     * Send a channel message.
     *
     * @param message - Message content to send
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param meta - Extra meta data, optional
     * @returns Message id and send time
     *
     * @async
     */
    sendChannelMsg(message: Message, guildId: string, channelId: string, meta?: object): Promise<SendMessageResponse>;
    /**
     * Delete a message.
     *
     * Required target message that is sent by self or bot had manger permission.
     *
     * @param messageId - Target message id
     * @param meta - Extra meta data, optional
     *
     * @async
     */
    deleteMsg(messageId: string, meta?: object): void;
    /**
     * Get information about the bot itself.
     *
     * @returns Self info
     *
     * @async
     */
    getSelfInfo(meta?: object): Promise<SelfInfoResponse>;
    /**
     * Get user information.
     *
     * @param userId - Target user id, can be the friend or the stronger
     * @param meta - Extra meta data, optional
     * @returns User info
     *
     * @async
     */
    getUserInfo(userId: string, meta?: object): Promise<UserInfoResponse>;
    /**
     * Get friend list.
     *
     * @param meta - Extra meta data, optional
     * @returns Friend list information
     *
     * @async
     */
    getFriendList(meta?: object): Promise<UserInfoResponse[]>;
    /**
     * Get group information.
     *
     * @param groupId - Target group id
     * @param meta - Extra meta data, optional
     * @returns Group info
     *
     * @async
     */
    getGroupInfo(groupId: string, meta?: object): Promise<GroupInfoResponse>;
    /**
     * Get group list.
     *
     * @param meta - Extra meta data, optional
     * @returns Group list information
     *
     * @async
     */
    getGroupList(meta?: object): Promise<GroupInfoResponse[]>;
    /**
     * Get group member information.
     *
     * @param groupId - Target group id
     * @param userId - Target user id
     * @param meta - Extra meta data, optional
     * @returns Group member info
     *
     * @async
     */
    getGroupMemberInfo(groupId: string, userId: string, meta?: object): Promise<SelfInfoResponse>;
    /**
     * Get group member list.
     *
     * @param groupId - Target group id
     * @param meta - Extra meta data, optional
     * @returns Group member list information
     *
     * @async
     */
    getGroupMemberList(groupId: string, meta?: object): Promise<SelfInfoResponse[]>;
    /**
     * Set group information.
     *
     * @param groupId - Target group id
     * @param groupName - Group name
     * @param meta - Extra meta data, optional
     */
    setGroupName(groupId: string, groupName: string, meta?: object): void;
    /**
     * Leave a group, if bot is owner so it will be destroy the group.
     *
     * @param groupId - Target group id
     * @param meta - Extra meta data, optional
     */
    leaveGroup(groupId: string, meta?: object): void;
    /**
     * Get guild information.
     *
     * @param guildId - Target guild id
     * @param meta - Extra meta data, optional
     * @returns Guild info
     *
     * @async
     */
    getGuildInfo(guildId: string, meta?: object): Promise<GuildInfoResponse>;
    /**
     * Get guild list.
     *
     * @param meta - Extra meta data, optional
     * @returns Guild list information
     *
     * @async
     */
    getGuildList(meta?: object): Promise<GuildInfoResponse[]>;
    /**
     * Set guild information.
     *
     * @param guildId - Target guild id
     * @param guildName - Guild name
     * @param meta - Extra meta data, optional
     */
    setGuildName(guildId: string, guildName: string, meta?: object): void;
    /**
     * Get guild member information.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param userId - Target user id
     * @param meta - Extra meta data, optional
     * @returns Guild member info
     *
     * @async
     */
    getGuildMemberInfo(guildId: string, userId: string, meta?: object): Promise<UserInfoResponse>;
    /**
     * Get guild member list.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param meta - Extra meta data, optional
     * @returns Guild member list information
     *
     * @async
     */
    getGuildMemberList(guildId: string, meta?: object): Promise<UserInfoResponse[]>;
    /**
     * Leave a guild.
     *
     * @param guildId - Target guild id
     * @param meta - Extra meta data, optional
     */
    leaveGuild(guildId: string, meta?: object): void;
    /**
     * Get channel information.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param meta - Extra meta data, optional
     * @returns Channel info
     *
     * @async
     */
    getChannelInfo(guildId: string, channelId: string, meta?: object): Promise<ChannelInfoResponse>;
    /**
     * Get channel list.
     *
     * @param guildId - Target guild id
     * @param joinedOnly - Whether to get joined channels only, default is false
     * @param meta - Extra meta data, optional
     * @returns Channel list information
     *
     * @async
     */
    getChannelList(guildId: string, joinedOnly?: boolean, meta?: object): Promise<ChannelInfoResponse[]>;
    /**
     * Set channel information.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param channelName - Channel name
     * @param meta - Extra meta data, optional
     */
    setChannelName(guildId: string, channelId: string, channelName: string, meta?: object): void;
    /**
     * Get channel member information.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param userId - Target user id
     * @param meta - Extra meta data, optional
     * @returns Channel member info
     *
     * @async
     */
    getChannelMemberInfo(guildId: string, channelId: string, userId: string, meta?: object): Promise<UserInfoResponse>;
    /**
     * Get channel member list.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param meta - Extra meta data, optional
     * @returns Channel member list information
     *
     * @async
     */
    getChannelMemberList(guildId: string, channelId: string, meta?: object): Promise<UserInfoResponse[]>;
    /**
     * Leave a channel.
     *
     * @param guildId - Target guild id
     * @param channelId - Target channel id
     * @param meta - Extra meta data, optional
     */
    leaveChannel(guildId: string, channelId: string, meta?: object): void;
    /**
     * Upload file from url.
     *
     * @param name - File name
     * @param url - File url
     * @param headers - File download url headers, optional
     * @param meta - Extra meta data, optional
     * @returns File id
     *
     * @async
     */
    uploadFileUrl(name: string, url: string, headers?: Record<string, string>, meta?: object): Promise<UploadFileResponse>;
    /**
     * Upload file from path.
     *
     * @param name - File name
     * @param path - File path
     * @param meta - Extra meta data, optional
     * @returns File id
     *
     * @async
     */
    uploadFilePath(name: string, path: string, meta?: object): Promise<UploadFileResponse>;
    /**
     * Upload file from data.
     *
     * @param name - File name
     * @param data - File data
     * @param meta - Extra meta data, optional
     * @returns File id
     *
     * @async
     */
    uploadFileData(name: string, data: Buffer, meta?: object): Promise<UploadFileResponse>;
    /**
     * Get file url.
     *
     * @param filedId - File id
     * @param meta - Extra meta data, optional
     * @returns File url data
     *
     * @async
     */
    getFileUrl(filedId: string, meta?: object): Promise<GetFileUrlResponse>;
    /**
     * Get file path.
     *
     * @param filedId - File id
     * @param meta - Extra meta data, optional
     * @returns File path data
     *
     * @async
     */
    getFilePath(filedId: string, meta?: object): Promise<GetFilePathResponse>;
    /**
     * Get file data.
     *
     * @param filedId - File id
     * @param meta - Extra meta data, optional
     * @returns File data
     *
     * @async
     */
    getFileData(filedId: string, meta?: object): Promise<GetFileDataResponse>;
    /**
     * Set group avatar.
     *
     * @param groupId - Target group id
     * @param image - Image data
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    setGroupAvatar(groupId: string, image: string, meta?: object): void;
    /**
     * Set group admin.
     *
     * @param groupId - Target group id
     * @param userId - Target user id
     * @param enable - Whether to set admin
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    setGroupAdmin(groupId: string, userId: string, enable: boolean, meta?: object): void;
    /**
     * Set group card.
     *
     * @param groupId - Target group id
     * @param userId - Target user id
     * @param card - Card content
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    setGroupCard(groupId: string, userId: string, card: string, meta?: object): void;
    /**
     * Set group members ban or unban.
     *
     * @param groupId - Target group id
     * @param userId - Target user id
     * @param time - Ban time, 0 means unban
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    setGroupBan(groupId: string, userId: string, time: number, meta?: object): void;
    /**
     * Set group new notice.
     *
     * @param groupId - Target group id
     * @param content - Notice content
     * @param image - Notice image, optional
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    sendGroupNotice(groupId: string, content: string, image?: string, meta?: object): void;
    /**
     * Set group whole ban
     *
     * @param groupId - Target group id
     * @param enable - Whether to ban
     */
    setGroupWholeBan(groupId: string, enable?: boolean): void;
    /**
     * Set group members kicked.
     *
     * @param groupId - Target group id
     * @param userId - Target user id
     * @param meta - Extra meta data, optional
     *
     * @experimental
     */
    setGroupKick(groupId: string, userId: string, meta?: object): void;
}
export default Api;
