UNPKG

cyberbot-core

Version:

cyberbot, 基于napcat-ts, nodejs,轻量qq机器人框架。

386 lines 14 kB
import { NCWebsocket, Structs, type AllHandlers, type Send } from "node-napcat-ts"; import axios from "axios"; import { Logger } from "./logger.js"; export { Structs, Send, NCWebsocket, AllHandlers, CyberPluginContext, axios as http }; export declare function getConfig(): Config; export interface Config { baseUrl: string; accessToken: string; throwPromise: boolean; reconnection: { enable: boolean; attempts: number; delay: number; debug: boolean; }; bot: number; master: Array<number>; admins: Array<number>; plugins: { system: Array<string>; user: Array<string>; }; logger: { level: string; maxSize: string; maxDays: number; }; } export declare const log: Logger; export declare class Bot { private bot; private config; private pluginManager; private plugins; constructor(); start(): Promise<void>; /** * 向所有主人发送机器人上线通知 */ private sendOnlineNotificationToMasters; stop(): Promise<void>; } export declare function definePlugin(plugin: CyberPlugin): CyberPlugin; interface PluginInfo { version: string; description: string; type: 'system' | 'user'; setup: { enable: boolean; listeners: Array<listener>; cron: Array<any>; }; } interface listener { event: keyof AllHandlers; fn: any; } interface pluginUtil { getPlugins: () => Map<string, PluginInfo>; onPlugin: (pluginName: string) => string; offPlugin: (pluginName: string) => string; reloadPlugin: (pluginName: string) => Promise<string>; getPluginsFromDir: () => string[]; loadPlugin: (pluginName: string) => Promise<string>; } export type ExtendedEvent = { reply: (content: string | number | any[] | any, quote?: boolean) => Promise<{ message_id: number; }>; kick: (user_id: number, reject_add_request?: boolean) => Promise<void>; }; export interface BaseMessageEvent { raw_message: string; message_id: number; user_id: number; message_type: 'private' | 'group'; sender: { user_id: number; }; } export interface GroupMessageEvent extends BaseMessageEvent { message_type: 'group'; group_id: number; } export interface PrivateMessageEvent extends BaseMessageEvent { message_type: 'private'; } export type MessageEvent = GroupMessageEvent | PrivateMessageEvent; export type CyberMessageEvent = AllHandlers['message'] & ExtendedEvent; interface CyberPluginContext { config: Config; /** axios 实例 */ http: typeof axios; bot: NCWebsocket; bot_uin: number; plugin: pluginUtil; /** cron 定时任务 * @param cronTasks - 定时任务配置 * 支持两种格式: * 1. 单个任务: cron("* * * * * *", () => {}) * 2. 多个任务数组: cron([ * ['* * * * * *', async (ctx, e) => { e.reply("task1") }], * ['0 * * * * *', async (ctx, e) => { e.reply("task2") }] * ]) */ cron: (cronTasks: string | Array<[string, (ctx: CyberPluginContext, e: MessageEvent & ExtendedEvent) => any]>, func?: () => any) => any; /** 注册事件处理器 */ handle: <EventName extends keyof AllHandlers>(eventName: EventName, handler: EventName extends "message" | "message.group" | "message.private" ? (e: CyberMessageEvent) => any : (e: AllHandlers[EventName] & ExtendedEvent) => any) => any; /** 是否为主人 */ isMaster: (id: number | { sender: { user_id: number; }; }) => boolean; /** 是否为管理员 */ isAdmin: (id: number | { sender: { user_id: number; }; }) => boolean; /** * 检查用户是否有权限。 * * @param user_id - 用户的ID。 * @returns 如果用户是管理员或主人,则返回 `true`,否则返回 `false`。 */ hasRight: (user_id: number) => boolean; /** * 发送私聊消息。 * * @param user_id - 目标ID。 * @param message - 要发送的消息内容,可以是字符串、数字或消息段数组。 * @returns - 返回发送消息的结果,包含消息ID。 * @throws - 如果发送消息失败,抛出错误。 */ sendPrivateMessage: (user_id: number, message: string | number | Array<any>) => Promise<{ message_id: number; }>; /** * 发送消息到指定的群组。 * * @param group_id - 目标群组的ID。 * @param message - 要发送的消息内容,可以是字符串、数字或消息段数组。 * @returns - 返回发送消息的结果,包含消息ID。 * @throws - 如果发送消息失败,抛出错误。 */ sendGroupMessage: (group_id: number, message: string | number | Array<any>) => Promise<{ message_id: number; }>; /** * 撤回指定的消息。 * * @param message_id - 要撤回的消息的ID。 * @throws - 如果撤回消息失败,抛出错误。 */ delete_msg: (message_id: number) => Promise<void>; /** * 将指定用户从群组中踢出。 * * @param group_id - 群ID。 * @param user_id - 要踢出的用户的ID。 * @param reject_add_request - 是否拒绝该用户的加群请求。默认值为 `false`。 * @throws - 如果踢出用户失败,抛出错误。 */ kick: (group_id: number, user_id: number, reject_add_request?: boolean) => Promise<void>; /** * 将指定用户在群组中禁言。 * * @param group_id - 群ID。 * @param user_id - 要禁言的用户的ID。 * @param duration - 禁言时长,单位为秒。默认值为 `30` 秒。 * @throws - 如果禁言用户失败,抛出错误。 */ ban: (group_id: number, user_id: number, duration?: number) => Promise<void>; /** * 设置群组全员禁言状态。 * * @param group_id - 群ID。 * @param enable - 是否开启全员禁言。默认值为 `false`,即关闭全员禁言。 * @throws - 如果设置全员禁言状态失败,抛出错误。 */ banAll: (group_id: number, enable: boolean) => Promise<void>; /** * 设置群组名称。 * * @param group_id - 群ID。 * @param name - 要设置的群组名称。 * @throws - 如果设置群组名称失败,抛出错误。 */ setGroupName: (group_id: number, name: string) => Promise<void>; /** * 设置群组管理员。 * * @param group_id - 群ID。 * @param user_id - 要设置或取消管理员权限的用户的ID。 * @param enable - 是否设置为管理员。默认值为 `true`,即设置为管理员。 * @throws - 如果设置管理员权限失败,抛出错误。 */ setAdmin: (group_id: number, user_id: number, enable: boolean) => Promise<void>; /** * 设置群组成员的特殊头衔。 * * @param group_id - 群ID。 * @param user_id - 要设置特殊头衔的用户的ID。 * @param title - 要设置的特殊头衔。 * @throws - 如果设置特殊头衔失败,抛出错误。 */ setTitle: (group_id: number, user_id: number, title: string) => Promise<void>; /** * 处理群组加入请求,自动同意请求。 * @param flag - 从上报消息获取 * @throws - 如果处理请求失败,抛出错误。 */ aprroveGroup: (flag: string) => Promise<void>; /** * 处理群组加入请求,自动拒绝请求。 * * @param flag - 从上报消息获取 * @throws - 如果处理请求失败,抛出错误。 */ rejectGroup: (flag: string) => Promise<void>; /** * 检查用户是否是群组管理员或群主。 * * @param group_id - 群ID。 * @param user_id - 用户的ID。 * @returns 如果用户是群组管理员或群主,则返回 `true`,否则返回 `false`。 * @throws - 如果获取群组成员信息失败,抛出错误。 */ isGroupAdmin: (group_id: number, user_id: number) => Promise<boolean>; /** * 检查用户是否是群组群主。 * * @param group_id - 群ID。 * @param user_id - 用户的ID。 * @returns 如果用户是群组群主,则返回 `true`,否则返回 `false`。 * @throws - 如果获取群组成员信息失败,抛出错误。 */ isGroupOwner: (group_id: number, user_id: number) => Promise<boolean>; /** * MD5 加密 * @param {string} text 待 MD5 加密数据 * @return {string} MD5 加密后的 hex 字符串 */ md5: (text: string) => string; /** * 生成随机整数 * @param {number} min 最小值 * @param {number} max 最大值 * @return {number} 随机范围内的整数 */ randomInt: (min: number, max: number) => number; /** * 取数组内随机一项 * @param {Array<T>} array 待操作数组 * @return {T} 数组内的随机一项 */ randomItem: <T>(array: T[]) => T; /** * 获取群组头像链接 * @param group_id 群组ID * @param size 头像大小,可选值为40、64、100、200 * @return 群组头像链接 */ getGroupAvatarLink: (group_id: number, size?: number) => string; /** * 获取QQ头像链接 * @param user_id QQ号 * @param size 头像大小,可选值为40、64、100、200 * @return QQ头像链接 */ getQQAvatarLink: (user_id: number, size?: number) => string; /** * 获取图片链接 * @param e 原始消息 * @return 图片链接 */ getImageLink: (e: CyberMessageEvent) => string; /** * 替换 URL 中的 rkey 参数, 获取直链 * @param url - 原始 URL * @returns 替换 rkey 后的新 URL */ getDirectLink: (url: string) => Promise<string>; /** * 从消息内容中提取回复消息的ID。 * 该方法使用正则表达式从传入的 `raw_message` 中提取 `[CQ:reply,id=...]` 格式的回复消息ID。 * 如果找到回复消息ID,则返回该ID;否则,返回空字符串。 * * @param e - 包含回复消息信息的原始消息。 * @returns 提取的回复消息ID字符串,如果未找到则返回空字符串。 * @throws 如果在提取过程中发生错误,记录错误日志并返回空字符串。 */ getReplyMessageId: (e: CyberMessageEvent) => string; /** * 从消息内容中提取 @ 消息的 ID。 * 该方法使用正则表达式从传入的 `raw_message` 中提取 `[CQ:at,qq=...]` 格式的 @ 消息ID。 * 如果找到 @ 消息ID,则返回该ID;否则,返回空字符串。 * * @param e - 原始消息字符串。 * @returns 提取的 @ 消息ID字符串,如果未找到则返回空字符串。 * @throws 如果在提取过程中发生错误,记录错误日志并返回空字符串。 */ getMessageAt: (e: CyberMessageEvent) => number[]; /** * 从消息内容中提取纯文本内容。 * 该方法使用正则表达式从传入的 `raw_message` 中移除所有的 CQ 码,并返回剩余的纯文本内容。 * * @param e - 原始消息对象。 * @returns 提取的纯文本内容字符串。 * @throws 如果在提取过程中发生错误,记录错误日志并抛出错误。 */ getText: (e: CyberMessageEvent) => string; /** * 从消息内容中提取被回复的消息内容。 * 该方法使用正则表达式从传入的 `raw_message` 中提取被回复的消息内容。 * * @param e - 包含被回复消息信息的原始消息。 * @returns 提取的被回复消息内容字符串。 * @throws 如果在提取过程中发生错误,记录错误日志并抛出错误。 */ getQuotedText: (e: CyberMessageEvent) => Promise<string>; /** * 发送伪造消息。 * * @param target_id - 目标用户的ID(如果是私聊)或群组的ID(如果是群聊)。 * @param message - 要发送的消息内容,格式为 `Send['node'][]`。 * @param isGroup - 是否发送到群组。默认值为 `true`。 * @returns - 返回发送消息的结果,包含消息ID和资源ID。 * @throws - 如果发送消息失败,抛出错误。 */ fakeMessage: (target_id: number, message: Send['node'][], isGroup: boolean) => Promise<{ message_id: number; res_id: string; }>; /** 工具函数 */ utils: { /** 为事件对象添加reply方法 */ addReplyMethod: <T extends any>(e: T) => T & ExtendedEvent; }; } interface CyberPlugin { /** 插件 ID */ name: string; /** 插件版本 */ version?: string; /** 插件描述 */ description?: string; /** 插件初始化,可返回一个函数用于清理 */ setup?: (ctx: CyberPluginContext) => any; } export declare class PluginManager { plugins: Map<string, PluginInfo>; bot: NCWebsocket; private pluginCtxProxies; private sharedMethodWrappers; private pluginErrorHandlers; ctx: CyberPluginContext; private tempListener; private tempCronJob; private jiti; private cronTaskPool; constructor(bot: NCWebsocket, config: Config); private createPluginContextProxy; init(): Promise<Map<string, PluginInfo>>; getPluginsFromDir(): string[]; loadPlugin(pluginName: string): Promise<any>; getPlugins(): Map<string, PluginInfo>; /** * 保存配置到文件 * @param pluginName 插件名称 * @param isEnabled 是否启用 * @private */ private saveConfig; offPlugin(pluginName: string): string; onPlugin(pluginName: string): string; reloadPlugin(pluginName: string): Promise<any>; private cleanPluginModuleCache; /** * 释放插件相关的所有资源 * @param pluginName 插件名称 */ private releasePluginResources; } //# sourceMappingURL=index.d.ts.map