pure-bot
TypeScript icon, indicating that this package has built-in type declarations

0.0.7 • Public • Published

pure-bot

基于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(如fastReply)将统一返回promise
    await ctx.fastReply('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.fastReply('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: '心跳事件',
    }
};

更多的API

如何调用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的文档,但实际上不太需要,我写了注释

调用时如图: 效果1

也可以查看详细的:

效果2

全局事件拦截器

可以在任何事件执行前启动拦截器进行检查,如果拦截器拒绝,事件将不会执行。

注册拦截器

注册方法

  • 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.fastReply('hello, world');
    } catch (err) {
        // 使用bot内置logger打印错误。
        bot.error(err);
    }
});

常规

bot.onMessage('private', (ctx) => {
    ctx.fastReply('hello, world').then((res) => {
        // 处理...
    }).catch((err) => {
        // 处理
    })
});
  • 如你所见,pure-bot大多数回调方法同时支持 AsyncFunctionFunction,可自由安排。

日志

bot中默认内置了四种日志打印,具有不同的样式。

bot.log('hi', 'hello', { obj: '直接传参数' })
bot.info('hi')
bot.warn('hi')
bot.error('hi')

同时启动多个bot实例

如果需要使用多个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,然后重启。

全部的API

一般可在ctx.client处调用, 如果有未支持的API,可调用ctx.ws手动发送消息,或者提交PR。

cq_api.ts

/**
 * 发送消息 / 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);
}

MIT

Pure-Peace

特别感谢

arily
arily(阿日)

Package Sidebar

Install

npm i pure-bot

Weekly Downloads

15

Version

0.0.7

License

MIT

Unpacked Size

155 kB

Total Files

57

Last publish

Collaborators

  • purepeace