基于onebot,简单、易用的QQ机器人框架。
目前已测试支持 go-cqhttp 反向websocket。 后续可能将添加更多方式...
注意:项目刚开始写……只有最基本的功能……并且可能会遭到较大修改。
安装
npm i pure-bot 下载go-cqhttp,在其配置中开启反向websocket后启动,接着启动pure-bot,将尝试自动连接。
如何配置go-cqhttp的反向websocket:
config.hjson
// 反向WS设置 ws_reverse_servers: [ // 可以添加多个反向WS推送 { // 启用该推送 enabled: true // 反向WS地址 reverse_url: ws://127.0.0.1:8080/cqhttp/ws // 重连间隔 单位毫秒 reverse_reconnect_interval: 3000 } ]最简示例
index.js
const { onebot: { QQbot } } = require('pure-bot'); const bot = new QQbot({ name: '阿光', logUnhandledInfo: true, // 打印已收到,但未被处理的事件 logHeartbeat: false, // 打印心跳事件 debug: false, // debug,开启将显示被filter阻止的事件 serverOptions: { port: 8080 // cqhttp服务的反向websocket端口 } }); // 注册一个私信事件,bot将在收到私信时处理 // 事件路径:message.private.common // ctx是消息上下文MessageContext bot.onMessage('private', async (ctx) => { // bot收到你的消息后将会进行回复。 // 执行api(如reply)将统一返回promise await ctx.reply('hello, world') });支持 onebot 协议制定的事件,共四种:
注册方法
bot.onMessage (type: ('common' | 'private' | 'group'), handler: (AsyncFunction | Function), options: handleOptions); bot.onNotice (type: ('common' | 'private' | 'group'), handler: (AsyncFunction | Function), options: handleOptions); bot.onRequest (type: ('common' | 'friend' | 'group'), handler: (AsyncFunction | Function), options: handleOptions); bot.onMetaEvent (type: ('common' | 'lifecycle' | 'heartbeat'), handler: (AsyncFunction | Function), options: handleOptions); // 生命周期事件,此事件实际上属于元事件 (meta_event) bot.onLifecycle (lifecycle: ('connect' | 'enable' | 'disable'), handler: (AsyncFunction | Function));- 参数 type:每种事件有不同的类型,common代表所有类型。
- 参数 handler:处理方法,可传入异步方法(
AsyncFunction),也可传入普通方法,处理方法需要接收一个上下文(MessageContext)作为参数。 - 参数 options:处理选项,可定义过滤器
filters,也可以添加钩子(执行前处理函数、执行后处理函数)。
关于上下文 MessageContext (ctx)的内容,可以查看源代码文件:context.ts,或者点这里看 关于 options 东西有点多,请直接查看下面的完整示例,有注释。
事件类型总结:
常规
- common:所有类型
- private:仅私聊
- group:仅群聊
- friend:仅好友
元事件
- lifecycle:生命周期
- heartbeat:心跳事件
生命周期
- connect:连接到websocket时
- enable:停用onebot实现
- disable:启用onebot实现
完整注册示例
// 首先创建bot实例……然后开始注册事件处理: // 给bot注册一个私人消息事件处理 bot.onMessage('private', async (ctx) => { try { // 对发送者进行回复,同时等待onbot协议返回结果 const result = await ctx.reply('666'); return result; } catch (err) { bot.error(err); return err; } }, /* 下面是handleOptions */ { // 事件过滤,此处 friend 对应:message.private.friend (仅处理私聊消息中的[好友消息]) // 默认为空,也就是 message.private.common(不进行区分,处理所有私聊消息) where: 'friend', // 过滤器选项 filters: { // 要求的消息前缀,只有消息满足条件才会调用处理 prefixes: ['!', '!!'], // 支持多个正则表达式 regexs: [], // 支持多个关键字匹配,消息中出现关键字则处理 keywords: [], // [仅]允许调用处理的qq号列表 include_qq: [], // [仅]允许调用处理的qq群号列表 include_group: [], // 不允许调用处理的qq号列表 exclude_qq: [], // 不允许调用处理的qq群号列表 exclude_group: [] }, // 事件执行前检查器,事件执行前执行(可传async函数,也可为普通函数) beforeChecker: async (ctx) => { // 判断逻辑或检查,如用户绑定等。 // 若return false 将中断事件 bot.info('before checker'); // 如果发送消息的qq不等于xx,则拒绝处理 if (ctx.user_id !== 111) { bot.warn('拒绝!'); return false; } }, // 事件执行后处理器(可传async函数,也可为普通函数) // 第二个参数接收事件处理完成后得到的结果(result) afterHandler: (ctx, result) => { // 事件执行完后干什么…… result为事件处理完后返回的结果,可用于根据结果继续执行一些事情 bot.info('after handler:', result); } }); // 注册一个群聊消息处理 bot.onMessage('group', async (ctx) => { bot.info('收到群聊消息:', ctx.raw_message) }); // 注册一个群聊[匿名]消息处理 bot.onMessage('group', async (ctx) => { bot.info('收到群聊匿名消息:', ctx.raw_message) }, { where: 'anonymous' }); // 注册一个notice事件处理,如戳一戳 // notice.private.common bot.onNotice('private', async (ctx) => { bot.info(ctx.sender_id, '敢戳我?真牛'); }); // 注册元事件中的heartbeat事件处理 bot.onMetaEvent('heartbeat', async (ctx) => { bot.info(ctx.msg.status, '接收到一个心跳'); });pure-bot 完整的事件树
详情可以查看onebot的文档
bot.events = { message: { common: '所有消息事件', private: { common: '所有私聊消息事件', friend: '来自好友的私聊消息', group: '来自群的私聊消息(临时会话)', other: '其它' }, group: { common: '所有群聊消息事件', normal: '正常群聊消息', anonymous: '群匿名消息', notice: '群系统提示' } }, notice: { common: '所有通知事件', private: { common: '所有个人通知事件', friend_add: '好友添加', friend_recall: '好友撤回消息', notify: { common: 'notify事件(龙王、红包运气王、荣誉)', poke: '龙王', lucky_king: '红包运气王', honor: '荣誉', } }, group: { common: '所有的群通知事件', group_upload: '群文件上传', group_admin: { common: '管理员设置/取消事件', set: '管理员添加', unset: '管理员取消', }, group_decrease: { common: '群成员减少', leave: '退群', kick: '被踢', kick_me: '机器人被踢', }, group_increase: { common: '群成员增加', approve: '管理员同意入群', invite: '经邀请入群', }, group_ban: { common: '群禁言', ban: '禁言', lift_ban: '解除禁言', }, group_recall: '群消息撤回事件', notify: { common: '群内notify事件(龙王、红包运气王、荣誉)', poke: '龙王', lucky_king: '红包运气王', honor: '荣誉', } } }, request: { common: '所有的请求事件', friend: '好友请求', group: { common: '群请求', add: '加群请求', invite: 'bot收到入群邀请', } }, meta_event: { common: '所有元事件', lifecycle: { common: '所有生命周期', connect: '连接到ws服务器', enable: 'onebot启用', disable: 'onebot禁用', }, heartbeat: '心跳事件', } };如何调用CQAPI,或者说,onebot API。
在大多数处理程序(handler)中,上下文都会被作为参数传入。通过上下文的client对象,我们可以进行CQAPI的调用。
关于上下文 MessageContext (ctx)的内容,可以查看源代码文件:context.ts。
调用示例
此处演示调用一个 getTargetGroupInfo 方法获取目标群聊的信息。
// 注册一个群聊消息处理 bot.onMessage('group', async (ctx) => { // 使用ctx.client 调用 CQ Api // 这是获取群聊信息 try { const result = await ctx.client.getTargetGroupInfo({ group_id: ctx.group_id }); bot.info('成功获取群聊消息:', result); } catch (err) { bot.error('获取群聊信息失败,错误:', err); } });全部的API一般可参见cqhttp的文档,但实际上不太需要,我写了注释。
-
在README底部可以看到:全部的API
-
或者直接查看源代码 cq_api.ts
也可以查看详细的:
可以在任何事件执行前启动拦截器进行检查,如果拦截器拒绝,事件将不会执行。
注册拦截器
注册方法
- handler支持异步或同步方法,将会接收一个MessageContext。
- name是拦截器的名称,需要唯一。
bot.addBeforeChecker(name, handler)示例
// 全局事件执行前检查器,名称需要唯一 // return false 将阻止事件执行 // 并且,ckecker是顺序执行的,我们在下面注册了test1,但是test1不会触发,因为在test执行时,事件已经结束 bot.addBeforeChecker('test', async (ctx) => { bot.info('check: test'); // 如果事件为心跳,则不处理 if (ctx.msg.meta_event_type === 'heartbeat') { bot.info('心跳?不熟,真不熟') return false; } }); bot.addBeforeChecker('test1', async (ctx) => { bot.info('check: test1'); // 如果事件为心跳,则不处理 if (ctx.msg.meta_event_type === 'heartbeat') { bot.info('1 心跳?不熟,真不熟') return false; } });移除拦截器
输入拦截器的名称即可移除。
bot.removeBeforeChecker('test') bot.removeBeforeChecker('test1')将在事件完成执行后执行,参数与全局拦截器一致。
注册拦截器
注册方法
bot.addAfterHandler(name, handler)示例
bot.addAfterHandler('test', async (ctx) => { bot.info('刚才机器人完成了来自qq: ', ctx.sender_id, '的事件处理。') });移除拦截器
输入拦截器的名称即可移除。
bot.removeBeforeChecker('test')使用async
bot.onMessage('private', async (ctx) => { // 使用try catch try { await ctx.reply('hello, world'); } catch (err) { // 使用bot内置logger打印错误。 bot.error(err); } });常规
bot.onMessage('private', (ctx) => { ctx.reply('hello, world').then((res) => { // 处理... }).catch((err) => { // 处理 }) });- 如你所见,pure-bot大多数回调方法同时支持
AsyncFunction和Function,可自由安排。
bot中默认内置了四种日志打印,具有不同的样式。
bot.log('hi', 'hello', { obj: '直接传参数' }) bot.info('hi') bot.warn('hi') bot.error('hi')如果需要使用多个qq号,可能得在cqhttp进行配置,开启多个服务
index.js
const { onebot: { QQbot } } = require('pure-bot'); const bot1 = new QQbot({ name: '阿猫', serverOptions: { port: 8080 // 不同qq号使用不同端口 } }); const bot2 = new QQbot({ name: '阿狗', serverOptions: { port: 8089 // 不同qq号使用不同端口 } }); const bot3 = new QQbot({ name: '阿猫2', serverOptions: { port: 8080 // 相同qq号,但需要建立多个bot实例可以使用相同端口 } }); // 继续注册事件即可 bot1.on('private', async (ctx) => { ... }) bot2.on('private', async (ctx) => { ... }) bot3.on('group', (ctx) => { ... })克隆项目并安装依赖
git clone https://github.com/Pure-Peace/pure-bot npm i 直接运行
npm run go 运行内置示例来方便开发调试pure-bot这个项目,内置bot示例位于项目example目录。
运行后将会启动一个机器人,会尝试连接cqhttp的反向ws服务器。
进行任何代码修改程序将自动重启, 若修改pure-bot的源代码,会自动重新编译typescript,然后重启。
一般可在ctx.client处调用, 如果有未支持的API,可调用ctx.ws手动发送消息,或者提交PR。
/** * 发送消息 / send_msg * @param {number} user_id - 目标QQ号 The target QQ number * @param {number} group_id - 目标群号 The target QQ group number * @param {string} message - content * @param {boolean} auto_escape - 不解析消息内容 send as plain text */ sendMsg (params: { user_id: number, group_id: number, message: any, auto_escape: boolean }, timeout: number = undefined) { return this.apiCall('send_msg', params, timeout); } /** * 发送私聊消息 / send_private_msg * @param {number} user_id - 目标QQ号 The target QQ number * @param {number} group_id - 主动发起临时会话群号 * @param {string} message - content * @param {boolean} auto_escape - 不解析消息内容 send as plain text */ sendPrivateMsg (params: { user_id: number, group_id: number, message: any, auto_escape: boolean }, timeout: number = undefined) { return this.apiCall('send_private_msg', params, timeout); } /** * 发送群消息 / send_group_msg * @param {number} group_id - 目标群号 The target QQ group number * @param {number} message - content * @param {boolean} auto_escape - 不解析消息内容 send as plain text */ sendGroupMsg (params: { group_id: number, message: any, auto_escape: boolean }, timeout: number = undefined) { return this.apiCall('send_group_msg', params, timeout); } /** * 合并转发消息节点 / send_group_forward_msg * @param {number} group_id - 目标群号 The target QQ group number * @param {array} messages - CQnode, Doc: https://docs.go-cqhttp.org/cqcode/#合并转发消息节点 */ sendGroupForwardMsg (params = { group_id: undefined, messages: [ { type: 'node', data: { name: '消息发送者A', uin: '10086', content: [ { type: 'text', data: { text: '测试消息1' } } ] } }, { type: 'node', data: { name: '消息发送者B', uin: '10087', content: '666' } } ] }, timeout: number = undefined) { return this.apiCall('send_group_forward_msg', params, timeout); } /** * 撤回消息 / delete_msg * @param {number} message_id - 消息id The message id */ deleteMsg (params: { message_id: number } = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('delete_msg', params, timeout); } /** * 获取消息 / get_msg * @param {number} message_id - 消息id The message id */ getMsg (params = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('get_msg', params, timeout); } /** * 获取合并转发消息 / get_forward_msg * @param {number} message_id - 消息id The message id */ getForwardMsg (params: { message_id: number } = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('get_forward_msg', params, timeout); } /** * 获取图片信息 / get_image * @param {string} file - 图片缓存文件名 File cache name (CQ) */ getImage (params: { file: string } = { file: undefined }, timeout: number = undefined) { return this.apiCall('get_image', params, timeout); } /** * QQ群踢人 / set_group_kick * @param {number} group_id - QQ Group number * @param {number} user_id - Target user QQ number * @param {boolean} reject_add_request - 拒绝此人的加群请求 */ groupKick (params: { group_id: number, user_id: number, reject_add_request: boolean } = { group_id: undefined, user_id: undefined, reject_add_request: false }, timeout: number = undefined) { return this.apiCall('set_group_kick', params, timeout); } /** * QQ群禁言 / set_group_ban * @param {number} group_id - QQ Group number * @param {number} user_id - Target user QQ number * @param {number} duration - 禁言时长, 单位秒, 0 表示取消禁言 */ groupBan (params: { group_id: number, user_id: number, duration: 300 } = { group_id: undefined, user_id: undefined, duration: 300 }, timeout: number = undefined) { return this.apiCall('set_group_ban', params, timeout); } /** * QQ群禁言匿名用户 / set_group_anonymous_ban * @param {number} group_id - QQ Group number * @param {object} anonymous - Target anonymous object (from message) * @param {string} anonymous_flag - Target anonymous flag (from message) * @param {number} duration - 禁言时长, 单位秒, 无法取消 */ groupBanAnonymous (params: { group_id: number, anonymous: object, anonymous_flag: string, duration: number } = { group_id: undefined, anonymous: undefined, anonymous_flag: undefined, duration: 300 }, timeout: number = undefined) { return this.apiCall('set_group_anonymous_ban', params, timeout); } /** * QQ群全体禁言 / set_group_whole_ban * @param {number} group_id - QQ Group number * @param {boolean} enable - 是否开启 */ groupBanAll (params: { group_id: number, enable: boolean } = { group_id: undefined, enable: true }, timeout: number = undefined) { return this.apiCall('set_group_whole_ban', params, timeout); } /** * QQ群设置管理员 / set_group_admin * @param {number} group_id - QQ Group number * @param {number} user_id - Target user QQ number * @param {boolean} enable - 是否设为管理员 */ setGroupAdmin (params: { group_id: number, user_id: number, enable: boolean } = { group_id: undefined, user_id: undefined, enable: true }, timeout: number = undefined) { return this.apiCall('set_group_admin', params, timeout); } /** * QQ群设置匿名聊天 / set_group_anonymous * @param {number} group_id - QQ Group number * @param {boolean} enable - 是否设为管理员 */ setGroupAnonymous (params: { group_id: undefined, enable: boolean } = { group_id: undefined, enable: true }, timeout: number = undefined) { this.bot.error('Unimplement: set_group_anonymous'); return this.apiCall('set_group_anonymous', params, timeout); } /** * QQ群设置用户群名片 / set_group_card * @param {number} group_id - QQ Group number * @param {number} user_id - Target user QQ number * @param {string} card - 群名片内容,为空将删除 */ setGroupCard (params: { group_id: number, user_id: number, card: string } = { group_id: undefined, user_id: undefined, card: '' }, timeout: number = undefined) { return this.apiCall('set_group_card', params, timeout); } /** * QQ群设置群名 / set_group_name * @param {number} group_id - QQ Group number * @param {string} group_name - New group name */ setGroupName (params: { group_id: number, group_name: string } = { group_id: undefined, group_name: undefined }, timeout: number = undefined) { return this.apiCall('set_group_name', params, timeout); } /** * QQ群退群或解散 / set_group_leave * @param {number} group_id - QQ Group number * @param {boolean} is_dismiss - 是否解散 (仅群主可用) */ groupLeave (params: { group_id: number, is_dismiss: boolean } = { group_id: undefined, is_dismiss: false }, timeout: number = undefined) { return this.apiCall('set_group_leave', params, timeout); } /** * QQ群设置用户专属头衔 / set_group_special_title * @param {number} group_id - QQ Group number * @param {number} user_id - Target user QQ number * @param {string} special_title - Title 头衔,为空将删除 * @param {number} duration - 持续时间,可能无效 */ groupSetUserTitle (params: { group_id: number, user_id: number, special_title: string, duration: number } = { group_id: undefined, user_id: undefined, special_title: undefined, duration: -1 }, timeout: number = undefined) { return this.apiCall('set_group_special_title', params, timeout); } /** * 处理好友请求 / set_friend_add_request * @param {string} flag - From message * @param {boolean} approve - 同意或拒绝 * @param {string} remark - 备注 */ friendAddHandle (params: { flag: string, approve: boolean, remark: string } = { flag: undefined, approve: true, remark: '' }, timeout: number = undefined) { return this.apiCall('set_friend_add_request', params, timeout); } /** * 处理加群请求 / set_group_add_request * @param {string} flag - From message * @param {string} sub_type - 'add' or 'invite' (From message) * @param {boolean} approve - 同意或拒绝 * @param {string} reason - 拒绝理由 */ groupAddHandle (params: { flag: string, sub_type: string, approve: boolean, reason: string } = { flag: undefined, sub_type: undefined, approve: true, reason: '' }, timeout: number = undefined) { return this.apiCall('set_group_add_request', params, timeout); } /** * 获取登录QQ号信息 / get_login_info */ getLoginInfo (params = {}, timeout: number = undefined) { return this.apiCall('get_login_info', params, timeout); } /** * 获取好友列表 / get_friend_list */ getFriendList (params = {}, timeout: number = undefined) { return this.apiCall('get_friend_list', params, timeout); } /** * 获取QQ群列表 / get_group_list */ getGroupList (params = {}, timeout: number = undefined) { return this.apiCall('get_group_list', params, timeout); } /** * 获取指定QQ号信息 / get_stranger_info * @param {number} user_id - QQ number * @param {boolean} no_cache - 不使用缓存 */ getTargetQQInfo (params: { user_id: number, no_cache: boolean } = { user_id: undefined, no_cache: false }, timeout: number = undefined) { return this.apiCall('get_stranger_info', params, timeout); } /** * 获取指定QQ群信息 / get_group_info * @param {number} group_id - QQ group number * @param {boolean} no_cache - 不使用缓存 */ getTargetGroupInfo (params: { group_id: number, no_cache: boolean } = { group_id: undefined, no_cache: false }, timeout: number = undefined) { return this.apiCall('get_group_info', params, timeout); } /** * 获取指定群成员信息 / get_group_member_info * @param {number} group_id - QQ group number * @param {number} user_id - QQ number * @param {boolean} no_cache - 不使用缓存 */ getGroupMemberInfo (params: { group_id: number, user_id: number, no_cache: boolean } = { group_id: undefined, user_id: undefined, no_cache: false }, timeout: number = undefined) { return this.apiCall('get_group_member_info', params, timeout); } /** * 获取群成员列表 / get_group_member_list * @param {number} group_id - QQ group number */ getGroupMemberList (params: { group_id: number } = { group_id: undefined }, timeout: number = undefined) { return this.apiCall('get_group_member_list', params, timeout); } /** * 获取群荣誉信息 / get_group_honor_info * @param {number} group_id - QQ group number * @param {string} type - input: talkative / performer / legend / strong_newbie / emotion / all */ getGroupHonorInfo (params: { group_id: number, type: string } = { group_id: undefined, type: undefined }, timeout: number = undefined) { return this.apiCall('get_group_honor_info', params, timeout); } /** * 获取Cookies / get_cookies * @param {string} domain - Target domain */ getCookies (params: { domain: string } = { domain: undefined }, timeout: number = undefined) { this.bot.error('Unimplement: get_cookies'); return this.apiCall('get_cookies', params, timeout); } /** * 获取CsrfToken / get_csrf_token */ getCsrfToken (params = {}, timeout: number = undefined) { this.bot.error('Unimplement: get_csrf_token'); return this.apiCall('get_csrf_token', params, timeout); } /** * 获取Credentials凭证 / get_credentials */ getCredentials (params = {}, timeout: number = undefined) { this.bot.error('Unimplement: get_credentials'); return this.apiCall('get_credentials', params, timeout); } /** * 获取语音 / get_record * @param {string} file - 消息段的 file 参数, 如 0B38145AA44505000B38145AA4450500.silk * @param {string} out_format - input: mp3 / amr / wma / m4a / spx / ogg / wav / flac */ getRecord (params: { file: string, out_format: string } = { file: undefined, out_format: 'mp3' }, timeout: number = undefined) { this.bot.error('Unimplement: get_record'); return this.apiCall('get_record', params, timeout); } /** * 检查是否可以发送图片 / can_send_image */ checkCanSendImage (params = {}, timeout: number = undefined) { return this.apiCall('can_send_image', params, timeout); } /** * 检查是否可以发送语音 / can_send_record */ checkCanSendRecord (params = {}, timeout: number = undefined) { return this.apiCall('can_send_record', params, timeout); } /** * 获取版本信息 / get_version_info */ getVersionInfo (params = {}, timeout: number = undefined) { return this.apiCall('get_version_info', params, timeout); } /** * 重启 go-cqhttp / set_restart * @param {number} delay - 延迟 Delay ms */ restartCQ (params = { delay: 0 }, timeout: number = undefined) { return this.apiCall('set_restart', params, timeout); } /** * 清理缓存 / clean_cache */ cleanCache (params = {}, timeout: number = undefined) { this.bot.error('Unimplement: clean_cache'); return this.apiCall('clean_cache', params, timeout); } /** * 设置群头像 / set_group_portrait * @param {number} group_id - QQ group number * @param {string} file - image path: file:///C:\\xx\xx.png / http://xxx/xx.jpg / base64://xxxx== * @param {number} cache - 是否使用已缓存的文件 0 / 1 */ setGroupImage (params: { group_id: number, file: string, cache: number } = { group_id: undefined, file: undefined, cache: 1 }, timeout = 10000) { return this.apiCall('set_group_portrait', params, timeout); } /** * 获取中文分词 ( 隐藏 API ) / .get_word_slices * @param {string} content - content */ getWordSlices (params: { content: string } = { content: undefined }, timeout: number = undefined) { return this.apiCall('.get_word_slices', params, timeout); } /** * 图片 OCR / ocr_image * @param {string} image - 图片id */ ocrImage (params: { image: string } = { image: undefined }, timeout = 10000) { return this.apiCall('ocr_image', params, timeout); } /** * 获取群系统消息 / get_group_system_msg */ getGroupSystemMsg (params = {}, timeout: number = undefined) { return this.apiCall('get_group_system_msg', params, timeout); } /** * 上传群文件 / upload_group_file * @param {number} group_id - QQ group number * @param {string} file - local image path: file:///C:\\xx\xx.png * @param {string} name - 储存名称 * @param {string} folder - 父目录ID */ groupUploadFile (params: { group_id: number, file: string, name: string, folder: string } = { group_id: undefined, file: undefined, name: undefined, folder: undefined }, timeout = 20000) { return this.apiCall('upload_group_file', params, timeout); } /** * 获取群文件信息 / get_group_file_system_info * @param {number} group_id - QQ group number */ getGroupFileInfo (params: { group_id: number } = { group_id: undefined }, timeout = 10000) { return this.apiCall('get_group_file_system_info', params, timeout); } /** * 获取群根目录文件列表 / get_group_root_files * @param {number} group_id - QQ group number */ getGroupRootFileList (params: { group_id: number } = { group_id: undefined }, timeout: number = undefined) { return this.apiCall('get_group_root_files', params, timeout); } /** * 获取群子目录文件列表 / get_group_files_by_folder * @param {number} group_id - QQ group number * @param {number} folder_id - 文件夹ID */ getGroupFilesByFolder (params: { group_id: number, folder_id: number } = { group_id: undefined, folder_id: undefined }, timeout: number = undefined) { return this.apiCall('get_group_files_by_folder', params, timeout); } /** * 获取群文件资源链接 / get_group_file_url * @param {number} group_id - QQ group number * @param {number} file_id - 文件ID * @param {number} busid - File type */ getGroupFileUrl (params: { group_id: number, file_id: number, busid: number } = { group_id: undefined, file_id: undefined, busid: undefined }, timeout: number = undefined) { return this.apiCall('get_group_file_url', params, timeout); } /** * 获取CQ状态 / get_status */ getCqStatus (params = {}, timeout: number = undefined) { return this.apiCall('get_status', params, timeout); } /** * 获取群 @ 全体成员 剩余次数 / get_group_at_all_remain * @param {number} group_id - QQ group number */ getGroupAtAllRemain (params: { group_id: number } = { group_id: undefined }, timeout: number = undefined) { return this.apiCall('get_group_at_all_remain', params, timeout); } /** * 对事件执行快速操作 ( 隐藏 API ) / .handle_quick_operation * @param {object} context - 事件数据对象 * @param {object} context - 快速操作对象, 例如 {"ban": true, "reply": "请不要说脏话"} * @doc 文档 https://docs.go-cqhttp.org/event/#快速操作 */ quckHandle (params: { context: object, operation: object, } = { context: undefined, operation: undefined }, timeout: number = undefined) { return this.apiCall('.handle_quick_operation', params, timeout); } /** * 获取Vip状态 / _get_vip_info * @param {number} user_id - Target QQ number */ getQQvipInfo (params: { user_id: number } = { user_id: undefined }, timeout: number = undefined) { return this.apiCall('_get_vip_info', params, timeout); } /** * 发送群公告 / _send_group_notice * @param {number} group_id - Target QQ group number * @param {string} content - content */ groupSendNotice (params: { group_id: number, content: string } = { group_id: undefined, content: undefined }, timeout: number = undefined) { return this.apiCall('_send_group_notice', params, timeout); } /** * 重载事件过滤器 / reload_event_filter */ reloadEventFilter (params = {}, timeout: number = undefined) { return this.apiCall('reload_event_filter', params, timeout); } /** * 下载文件到缓存目录 / download_file * @param {string} url - download url * @param {string} thread_count - 下载线程数 * @param {array} headers - 自定义请求头 * [ * "User-Agent=YOUR_UA", * "Referer=https://www.baidu.com" * ] */ downloadFile ( params: { url: string, thread_count: string, headers: Array<string> } = { url: undefined, thread_count: undefined, headers: [] }, timeout: number = undefined) { return this.apiCall('download_file', params, timeout); } /** * 获取当前账号在线客户端列表 / get_online_clients * @param {boolean} no_cache - 是否无视缓存 */ getOnlineClients (params: { no_cache: boolean } = { no_cache: undefined }, timeout: number = undefined) { return this.apiCall('get_online_clients', params, timeout); } /** * 获取群消息历史记录 / get_group_msg_history * @param {number} message_seq - 起始消息序号, 可通过 get_msg 获得 * @param {number} group_id - 群号 */ groupGetMsgHistory (params: { message_seq: number, group_id: number } = { message_seq: undefined, group_id: undefined }, timeout: number = undefined) { return this.apiCall('get_group_msg_history', params, timeout); } /** * 设置精华消息 / set_essence_msg * @param {number} message_id - msg id */ setEssenceMsg (params: { message_id: number } = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('set_essence_msg', params, timeout); } /** * 移出精华消息 / delete_essence_msg * @param {number} message_id - msg id */ deleteEssenceMsg (params: { message_id: number } = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('delete_essence_msg', params, timeout); } /** * 获取精华消息列表 / get_essence_msg_list * @param {number} group_id - QQ group id */ getEssenceMsgList (params: { message_id: number } = { message_id: undefined }, timeout: number = undefined) { return this.apiCall('get_essence_msg_list', params, timeout); } /** * 检查链接安全性 / check_url_safely * @param {string} url - url */ checkUrlSafely (params: { url: string } = { url: undefined }, timeout: number = undefined) { return this.apiCall('check_url_safely', params, timeout); }Pure-Peace
arily(阿日) |
|---|

