xincbot
Version:
A flexible QQ bot framework based on NapCat and node-napcat-ts
269 lines • 9.37 kB
TypeScript
import { EventKey, EventHandleMap } from './Interfaces';
import { NCWebsocket } from 'node-napcat-ts';
/** 群组信息接口 */
export interface GroupInfo {
/** 群号 */
group_id: number;
/** 群名称 */
group_name: string;
/** 当前成员数 */
member_count: number;
/** 最大成员数 */
max_member_count: number;
}
/** 群成员信息接口 */
export interface GroupMemberInfo {
/** 群号 */
group_id: number;
/** QQ号 */
user_id: number;
/** 昵称 */
nickname: string;
/** 群名片 */
card: string;
/** 角色: 群主、管理员、普通成员 */
role: 'owner' | 'admin' | 'member';
/** 专属头衔 */
title: string;
/** 加群时间(时间戳) */
join_time: number;
/** 最后发言时间(时间戳) */
last_sent_time: number;
}
/** Cookie信息接口 */
export interface CookieInfo {
/** Cookies字符串 */
cookies: string;
/** bkn/gtk值 */
bkn: string;
}
/** 登录凭证信息接口 */
export interface CredentialsInfo {
/** Cookies字符串 */
cookies: string;
/** CSRF Token */
token: string;
}
/** 版本信息接口 */
export interface VersionInfo {
/** 应用标识 */
app_name: string;
/** 应用版本 */
app_version: string;
/** 协议版本 */
protocol_version: string;
}
interface AICharacter {
character_id: string;
character_name: string;
preview_url: string;
}
interface AICharacterGroup {
type: string;
characters: AICharacter[];
}
/** 插件上下文接口 - 提供插件所需的各种方法和工具 */
export interface XincPluginContext {
/** WebSocket客户端实例 */
eventBus: NCWebsocket;
/** 注册事件处理器,自动推导事件类型对应的处理器参数类型 */
handle: <T extends EventKey>(event: T, handler: EventHandleMap[T]) => void;
/** 取消注册事件处理器 */
off: <T extends EventKey>(event: T, handler: EventHandleMap[T]) => void;
/** 获取插件数据目录路径 */
getDataPath: () => string;
/** 获取插件配置目录路径 */
getConfigPath: () => string;
/** 提取消息中的文本内容 */
getText: (e: any) => string;
/** 获取QQ头像URL */
getAvatarLink: (qq: number | string) => string;
/** 获取QQ群头像URL */
getGroupLink: (group_id: number | string) => string;
/** 获取被引用的消息 */
getQuoteMsg: (e: any) => Promise<any>;
/** 获取消息中的第一个图片URL */
getImageURL: (e: any) => string | null;
/** 获取引用消息中的图片URL */
getQuoteImageURL: (e: any) => Promise<string | null>;
/** 获取消息提及的图片URL(消息本身或引用消息中的图片) */
getMentionedImageURL: (e: any) => Promise<string | null>;
/** 获取消息中最后一个被@的用户QQ号 */
getTaggedUserID: (e: any) => number | null;
/** 上传文件到群文件根目录 */
uploadFileToDir: (group_id: number | string, file: string, name?: string) => Promise<void>;
/** 判断是否是主人的消息 */
isRoot: (e: any) => boolean;
/** 判断是否是管理员的消息 */
isAdmin: (e: any) => boolean;
/** 判断是否是群主的消息 */
isGroupOwner: (e: any) => boolean;
/** 判断是否是群管理员的消息 */
isGroupAdmin: (e: any) => boolean;
/** 获取已加载的插件列表 */
getLoadedPlugins: () => XincPlugin[];
/** 重载指定插件 */
reloadPlugin: (name: string) => Promise<void>;
/** 禁用插件 */
disablePlugin: (name: string) => Promise<void>;
/** 启用插件 */
enablePlugin: (name: string) => Promise<void>;
/** 获取框架状态 */
getStatus: () => Promise<{
uptime: string;
memory: number;
pluginCount: number;
groupCount: number;
}>;
/** 关闭框架 */
shutdown: () => Promise<void>;
/** 发送消息并返回消息ID */
respond: (e: any, message: any) => Promise<any>;
/** 撤回消息 */
recallMsg: (message_id: number) => Promise<void>;
/** 给好友点赞
* @param user_id 好友QQ号
* @param times 点赞次数(1-50),默认50次
*/
sendLike: (user_id: number | string, times?: number) => Promise<void>;
/** 踢出群成员
* @param group_id 群号
* @param user_id 要踢的QQ号
* @param reject_add_request 是否拉黑,默认false
*/
kick: (group_id: number | string, user_id: number | string, reject_add_request?: boolean) => Promise<void>;
/** 群禁言
* @param group_id 群号
* @param user_id 要禁言的QQ号
* @param duration 禁言时长(秒),0表示解除禁言,默认1800(30分钟)
*/
mute: (group_id: number | string, user_id: number | string, duration?: number) => Promise<void>;
/** 群组全员禁言
* @param group_id 群号
* @param enable 是否开启全员禁言,默认true
*/
muteGroup: (group_id: number | string, enable?: boolean) => Promise<void>;
/** 设置群管理员
* @param group_id 群号
* @param user_id 要设置的QQ号
* @param enable 是否设为管理员,默认true
*/
setAdmin: (group_id: number | string, user_id: number | string, enable?: boolean) => Promise<void>;
/** 设置群名片
* @param group_id 群号
* @param user_id 要设置的QQ号
* @param card 群名片,空字符串表示删除群名片
*/
setGroupCard: (group_id: number | string, user_id: number | string, card: string) => Promise<void>;
/** 设置群名
* @param group_id 群号
* @param group_name 新群名
*/
setGroupName: (group_id: number | string, group_name: string) => Promise<void>;
/** 退出群组
* @param group_id 群号
*/
quitGroup: (group_id: number | string) => Promise<void>;
/** 设置群头衔
* @param group_id 群号
* @param user_id 要设置的QQ号
* @param special_title 头衔,空字符串表示删除头衔
*/
setTitle: (group_id: number | string, user_id: number | string, special_title: string) => Promise<void>;
/** 获取群信息
* @param group_id 群号
* @returns 群信息对象
*/
getGroupInfo: (group_id: number | string) => Promise<GroupInfo>;
/** 获取群列表
* @returns 群信息数组
*/
getGroupList: () => Promise<GroupInfo[]>;
/** 获取群成员信息
* @param group_id 群号
* @param user_id 要查询的QQ号
* @param no_cache 是否不使用缓存
* @returns 群成员信息
*/
getGroupMemberInfo: (group_id: number | string, user_id: number | string, no_cache?: boolean) => Promise<GroupMemberInfo>;
/** 获取指定域名的 Cookies
* @param domain 域名
* @returns Cookie信息
*/
getCookie: (domain: string) => Promise<CookieInfo>;
/** 获取 CSRF Token
* @returns CSRF Token
*/
getCsrfToken: () => Promise<string>;
/** 获取登录凭证
* @returns 凭证信息
*/
getCredentials: () => Promise<CredentialsInfo>;
/** 获取服务端版本信息
* @returns 版本信息
*/
getVersionInfo: () => Promise<VersionInfo>;
/** 获取群 AI 角色列表
* @param group_id 群号
* @returns AI 角色列表,按类型分组
*/
getAiRoleList: (group_id: number | string) => Promise<AICharacterGroup[]>;
/** 发送群 AI 语音
* @param group_id 群号
* @param character_id AI 角色 ID
* @param text 要转换为语音的文本
* @returns 消息发送结果
*/
sendGroupAiRecord: (group_id: number | string, character: string, text: string) => Promise<null>;
/** 发送WebSocket消息
* @param action 动作名称
* @param params 参数对象
* @returns WebSocket响应结果
*/
wsSend: (action: string, params: any) => Promise<any>;
/** 获取所有插件列表,包含启用状态 */
getPlugins: () => Array<XincPlugin & {
enabled: boolean;
}>;
}
/** 插件接口 */
export interface XincPlugin {
/** 插件ID */
name: string;
/** 插件版本 */
version?: string;
/** 插件描述 */
desc?: string;
/** 插件安装方法 */
setup: (ctx: XincPluginContext) => void;
}
/** 插件管理器接口 */
export interface XincPluginManager {
/** 加载插件 */
loadPlugin(plugin: XincPlugin): Promise<void>;
/** 卸载插件 */
unloadPlugin(name: string): Promise<void>;
/** 获取已加载的插件列表 */
getLoadedPlugins(): XincPlugin[];
}
export declare class PluginManager implements XincPluginManager {
private plugins;
private cleanupFns;
private eventHandlers;
private eventBus;
private dataDir;
private configDir;
private startTime;
constructor(ws: NCWebsocket, dataDir: string, configDir: string);
loadPlugin(plugin: XincPlugin): Promise<void>;
unloadPlugin(name: string): Promise<void>;
private formatUptime;
getLoadedPlugins(): XincPlugin[];
private findPlugin;
reloadPlugin(name: string): Promise<void>;
enablePlugin(name: string): Promise<void>;
disablePlugin(name: string): Promise<void>;
}
export declare function definePlugin(plugin: XincPlugin): XincPlugin;
export {};
//# sourceMappingURL=plugin.d.ts.map