@kotori-bot/core
Version:
Kotori Core
421 lines (420 loc) • 12.6 kB
TypeScript
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;