ntqq-cqhttp
Version:
基于 ntqq onebot 框架进行二次封装的 sdk 开发包,主要方便直接进行机器人的操作。
968 lines (967 loc) • 29.2 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Robot = void 0;
const Event_1 = require("../core/Event");
const qs_1 = __importDefault(require("qs"));
const CQCode_1 = __importDefault(require("./CQCode"));
/**
* 机器人类,有回调事件,上发操作等功能。
*/
class Robot extends Event_1.Event {
constructor(qq, http, botID) {
super();
this.qq = '';
this.botID = '';
this.http = null;
this._onPrivateMsg = [];
this._onGroupMsg = [];
this._onEventMsg = [];
this.groupFunMap = null;
this.privateCmdAction = null;
this.groupCmdAction = null;
this.qq = String(qq);
this.http = http;
this.botID = botID;
this.groupFunMap = new Map();
this.privateCmdAction = new Map();
this.groupCmdAction = new Map();
this.on('private', pack => {
if (this._onPrivateMsg) {
this._onPrivateMsg.forEach(fun => {
if (fun) {
fun(pack);
}
});
}
// 遍历注册指令
this.privateCmdAction.forEach((doAction, cmdArray) => {
if (cmdArray.includes(pack.rawMessage)) {
doAction(pack);
}
});
});
this.on('group', pack => {
if (this._onGroupMsg) {
this._onGroupMsg.forEach(fun => {
if (fun) {
fun(pack);
}
});
}
let groupFun = this.groupFunMap.get(String(pack.fromGroup));
if (groupFun) {
groupFun(pack);
}
// 遍历注册指令
this.groupCmdAction.forEach((doAction, cmdArray) => {
if (cmdArray.includes(pack.rawMessage) && (doAction.group == pack.fromGroup)) {
doAction(pack);
}
});
});
this.on('notice', pack => {
if (this._onEventMsg) {
this._onEventMsg.forEach(fun => {
if (fun) {
fun(pack);
}
});
}
});
}
/**
* 获取 CQ Code 模板对象
*/
get CQCode() {
return CQCode_1.default;
}
/**
* 返回实例化机器人的请求器
*/
get httpRequest() {
return this.http;
}
/**
* 返回机器人序号 ID
*/
get id() {
return this.botID;
}
/**
* 返回机器人 QQ 号
*/
get QQ() {
return this.qq;
}
/**
* 当私聊信息触发时,回调时带回消息包
* @param resPack 参数包
* ```
* {
* fromUser: 发送者QQ
* rawMessage:接收的消息
* robot: 框架QQ
* isAt: 机器人是否被 at 的
* OOInfo:{card,nickname} // 昵称,群昵称
* success: 成功状态
* }
* ```
*/
onPrivateMsg(fun) {
this._onPrivateMsg.push(fun);
}
/**
* 当群聊消息触发时,回调时带回消息包
* @param resPack 参数包
* ```
* {
* fromUser: 发送者QQ
* fromGroup: 接收群
* rawMessage:接收的消息
* robot: 框架QQ
* isAt: 机器人是否被 at 的
* OOInfo:{card,nickname} // 昵称,群昵称
* success: 成功状态
* }
* ```
*/
onGroupMsg(fun) {
this._onGroupMsg.push(fun);
}
/**
* 绑定特定群组回调消息
* @param group 群号
* @param fun 回调函数,返回的参数为消息数据包
*/
setOnGroupMsg(group, fun) {
this.groupFunMap.set(String(group), fun);
}
getOnGroupMsg(group) {
return this.groupFunMap.get(String(group));
}
/**
* 当操作事件触发时,回调时带回消息包
*/
onEventMsg(fun) {
this._onEventMsg.push(fun);
}
/**
* 快速注册一个私聊指令并执行对应的方法
* @param {Array<string>} cmd 监听的指令
* @param doAction 要执行的动作,回调参数为发送者相关信息
*/
regPrivateCmd(cmd, doAction) {
this.privateCmdAction.set(cmd, doAction);
}
/**
* 快速注册一个群要使用的指令并执行对应的方法
* @param group 监听的目标群
* @param {Array<string>} cmd 监听的指令
* @param doAction 要执行的动作,回调参数为发送者相关信息
*/
regGroupCmd(group, cmd, doAction) {
Object.assign(doAction, {
group
});
this.groupCmdAction.set(cmd, doAction);
}
/************************************ Bot 账号 *************************************/
/**
* 获取登录号信息
* @return Promise
*/
getLoginInfo() {
return this.http.post('/get_login_info');
}
/**
* 设置登录号资料
* @param nickname 名称
* @param company 公司
* @param email 邮箱
* @param college 学校
* @param personal_note 个人说明
* @return Promise
*/
setQQProfile(nickname, company, email, college, personal_note) {
return this.http.post('/send_msg', qs_1.default.stringify({
nickname,
company,
email,
college,
personal_note
}));
}
/**
* 获取企点账号信息,该API只有企点协议可用
* @return promise
*/
qidianGetAccountInfo() {
return this.http.post('/qidian_get_account_info');
}
/**
* 获取在线机型
* @param model 机型名称
* @return promise
*/
getModelShow(model) {
return this.http.post('/_get_model_show', qs_1.default.stringify({
model
}));
}
/**
* 设置在线机型
* @param model 机型名称
* @param model_show
* @return promise
*/
setModelShow(model, model_show) {
return this.http.post('/_set_model_show', qs_1.default.stringify({
model,
model_show
}));
}
/**
* 获取当前账号在线客户端列表
* @param no_cache 是否无视缓存
* @return Promise
*/
getOnlineClients(no_cache) {
return this.http.post('/get_online_clients', qs_1.default.stringify({
no_cache
}));
}
/************************************ 好友信息 *************************************/
/**
* 获取当前账号在线客户端列表
* @param user_id QQ 号
* @param no_cache 是否不使用缓存(使用缓存可能更新不及时, 但响应更快)
* @return Promise
*/
getStrangerInfo(user_id, no_cache) {
return this.http.post('/get_stranger_info', qs_1.default.stringify({
user_id,
no_cache
}));
}
/**
* 获取好友列表
* @return Promise
*/
getFriendList() {
return this.http.post('/get_friend_list');
}
/**
* 获取单向好友列表
* @return Promise
*/
getUnidirectionalFriendList() {
return this.http.post('/get_unidirectional_friend_list');
}
/************************************ 好友操作 *************************************/
/**
* 删除好友
* @param user_id 好友 QQ 号
* @return Promise
*/
deleteFriend(user_id) {
return this.http.post('/delete_friend', qs_1.default.stringify({
user_id
}));
}
/**
* 删除单向好友
* @param user_id 好友 QQ 号
* @return Promise
*/
deleteUnidirectionalFriend(user_id) {
return this.http.post('/delete_unidirectional_friend', qs_1.default.stringify({
user_id
}));
}
/************************************ 消息 *************************************/
/**
* 发送好友私聊消息
* @param toqq 目标 QQ
* @param text 发送的文本
* @param type 文本类型:xml,json,可不传
* @return httpRequestPromise 返回请求的 promise
*/
sendPrivateMsg(toqq, text) {
return this.http.post('/send_msg', qs_1.default.stringify({
message_type: 'private',
user_id: toqq,
message: text,
}));
}
/**
* 发送群临时会话消息
* @param fromGroup 来自群号
* @param toqq 目标 QQ
* @param text 发送文本
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupPrivateMsg(fromGroup, toqq, text) {
return this.http.post('/send_private_msg', qs_1.default.stringify({
user_id: toqq,
group_id: fromGroup,
message: text,
}));
}
/**
* 发送群组消息
* @param toGroup 目标群
* @param text 文本
* @param anonymous 是否匿名,默认:false
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupMsg(toGroup, text, anonymous = false) {
return this.http.post('/send_msg', qs_1.default.stringify({
message_type: 'group',
group_id: toGroup,
message: text,
anonymous
}));
}
/**
* 私聊发送图片
* @param toqq 发送目标 qq
* @param imgSrc 图片资源:url,base64,路径均可
* @param flashpic 是否发送闪照,默认 false
* @return httpRequestPromise 返回请求的 promise
*/
sendPrivateImg(toqq, imgSrc, flashpic = false) {
return this.sendPrivateMsg(toqq, `[CQ:image,file=${imgSrc},type=${flashpic ? 'flash' : 'show'},id=40004]`);
}
/**
* 发送群临时私聊图片
* @param fromGroup 群号
* @param toqq 目标 qq
* @param imgSrc 图片资源
* @param flashpic 是否闪照
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupPrivateImg(fromGroup, toqq, imgSrc, flashpic = false) {
return this.sendGroupPrivateMsg(fromGroup, toqq, `[CQ:image,file=${imgSrc},type=${flashpic ? 'flash' : 'show'},id=40004]`);
}
/**
* 向群发送图片
* @param togroup 目标群号
* @param imgSrc 图片资源
* @param flashpic 是否为闪照
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupImg(togroup, imgSrc, flashpic = false) {
return this.sendGroupMsg(togroup, `[CQ:image,file=${imgSrc},type=${flashpic ? 'flash' : ''},id=40004,subType=0]`);
}
/**
* 私聊发送语音
* @param toqq 发送目标 qq
* @param recordSrc 图片资源:url,base64,路径均可
* @return httpRequestPromise 返回请求的 promise
*/
sendPrivateRecord(toqq, recordSrc) {
return this.sendPrivateMsg(toqq, `[CQ:image,file=${recordSrc}]`);
}
/**
* 发送群临时私聊图片
* @param fromGroup 群号
* @param toqq 目标 qq
* @param recordSrc 图片资源:url,base64,路径均可
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupPrivateRecord(fromGroup, toqq, recordSrc) {
return this.sendGroupPrivateMsg(fromGroup, toqq, `[CQ:record,file=${recordSrc}]`);
}
/**
* 向群发送图片
* @param togroup 目标群号
* @param recordSrc 图片资源:url,base64,路径均可
* @return httpRequestPromise 返回请求的 promise
*/
sendGroupRecord(togroup, recordSrc) {
return this.sendGroupMsg(togroup, `[CQ:record,file=${recordSrc}]`);
}
/**
* 获取消息
* @param message_id 消息id
* @return promise
*/
getMsg(message_id) {
return this.http.post('/get_msg', qs_1.default.stringify({
message_id
}));
}
/**
* 撤回消息
* @param message_id 消息id
* @return promise
*/
deleteMsg(message_id) {
return this.http.post('/delete_msg', qs_1.default.stringify({
message_id
}));
}
/**
* 标记消息已读
* @param message_id 消息id
* @return promise
*/
markMsgAsRead(message_id) {
return this.http.post('/mark_msg_as_read', qs_1.default.stringify({
message_id
}));
}
/**
* 获取合并转发内容
* @param message_id 消息id
* @return promise
*/
getForwardMsg(message_id) {
return this.http.post('/get_forward_msg', qs_1.default.stringify({
message_id
}));
}
/**
* 获取合并转发内容
* @param group_id 群号
* @param messages 自定义转发消息, 具体看 CQcode
* @return promise
*/
sendGroupForwardMsg(group_id, messages) {
return this.http.post('/send_group_forward_msg', qs_1.default.stringify({
group_id,
messages
}));
}
/**
* 发送合并转发 ( 好友 )
* @param user_id 好友QQ号
* @param messages 自定义转发消息, 具体看 CQcode
* @return promise
*/
sendPrivateForwardMsg(user_id, messages) {
return this.http.post('/send_private_forward_msg', qs_1.default.stringify({
user_id,
messages
}));
}
/**
* 获取群消息历史记录
* @param message_seq 起始消息序号, 可通过 get_msg 获得
* @param group_id 号
* @return promise
*/
getGroupMsgHistory(message_seq, group_id) {
return this.http.post('/get_group_msg_history', qs_1.default.stringify({
message_seq,
group_id
}));
}
/************************************ 图片 *************************************/
/**
* 获取图片信息
* @param file 图片缓存文件名
* @return promise
*/
getImage(file) {
return this.http.post('/get_image', qs_1.default.stringify({
file
}));
}
/**
* 检查是否可以发送图片
* @return promise
*/
canSendImage(file) {
return this.http.post('/can_send_image');
}
/**
* 图片 OCR
* @param image 图片ID
* @return promise
*/
ocrImage(image) {
return this.http.post('/ocr_image', qs_1.default.stringify({
image
}));
}
/************************************ 语音 *************************************/
/**
* 检查是否可以发送语音
* @return promise
*/
canSendRecord(file) {
return this.http.post('/can_send_record');
}
/************************************ 处理 *************************************/
/**
* 处理加好友请求
* @param flag 加好友请求的 flag(需从上报的数据中获得)
* @param approve 是否同意请求
* @param remark 添加后的好友备注(仅在同意时有效)
* @return promise
*/
setFriendAddRequest(flag, approve, remark) {
return this.http.post('/set_friend_add_request', qs_1.default.stringify({
flag,
approve,
remark
}));
}
/**
* 处理加群请求/邀请
* @param flag 加群请求的 flag(需从上报的数据中获得)
* @param sub_type add 或 invite, 请求类型(需要和上报消息中的 sub_type 字段相符)
* @param approve 是否同意请求/邀请
* @param reason 拒绝理由(仅在拒绝时有效)
* @return promise
*/
setGroupAddRequest(flag, sub_type, approve, reason) {
return this.http.post('/set_group_add_request', qs_1.default.stringify({
flag,
sub_type,
approve,
reason
}));
}
/************************************ 群消息 *************************************/
/**
* 获取群信息
* @param group_id 群号
* @param no_cache 是否不使用缓存(使用缓存可能更新不及时, 但响应更快)
* @return promise
*/
getGroupInfo(group_id, no_cache) {
return this.http.post('/get_group_info', qs_1.default.stringify({
group_id,
no_cache
}));
}
/**
* 获取群列表
* @param no_cache 是否不使用缓存(使用缓存可能更新不及时, 但响应更快)
* @return promise
*/
getGroupList(no_cache) {
return this.http.post('/get_group_list', qs_1.default.stringify({
no_cache
}));
}
/**
* 获取群成员信息
* @param group_id 群号
* @param user_id QQ 号
* @param no_cache 是否不使用缓存(使用缓存可能更新不及时, 但响应更快)
* @return promise
*/
getGroupMemberInfo(group_id, user_id, no_cache) {
return this.http.post('/get_group_member_info', qs_1.default.stringify({
group_id,
user_id,
no_cache
}));
}
/**
* 获取群成员列表
* @param group_id 群号
* @param no_cache 是否不使用缓存(使用缓存可能更新不及时, 但响应更快)
* @return promise
*/
getGroupMemberList(group_id, no_cache) {
return this.http.post('/get_group_member_list', qs_1.default.stringify({
group_id,
no_cache
}));
}
/**
* 获取群荣誉信息
* @param group_id 群号
* @param type 要获取的群荣誉类型, 可传入 talkative performer legend strong_newbie emotion 以分别获取单个类型的群荣誉数据, 或传入 all 获取所有数据
* @return promise
*/
getGroupHonorInfo(group_id, type) {
return this.http.post('/get_group_honor_info', qs_1.default.stringify({
group_id,
type
}));
}
/**
* 获取群系统消息
* @return promise
*/
getGroupSystemMsg() {
return this.http.post('/get_group_system_msg');
}
/**
* 获取精华消息列表
* @param group_id 群号
* @return promise
*/
getEssenceMsgList(group_id) {
return this.http.post('/get_essence_msg_list', qs_1.default.stringify({
group_id
}));
}
/**
* 获取群 @全体成员 剩余次数
* @param group_id 群号
* @return promise
*/
getGroupAtallremain(group_id) {
return this.http.post('/get_group_at_all_remain', qs_1.default.stringify({
group_id
}));
}
/************************************ 群设置 *************************************/
/**
* 设置群名
* @param group_id 群号
* @param group_name 新群名
* @return promise
*/
setGroupName(group_id, group_name) {
return this.http.post('/set_group_name', qs_1.default.stringify({
group_id,
group_name
}));
}
/**
* 设置群头像
* @param group_id 群号
* @param file 图片文件名,格式同图片参数接口
* @param cache 表示是否使用已缓存的文件
* @return promise
*/
setGroupPortrait(group_id, file, cache) {
return this.http.post('/set_group_portrait', qs_1.default.stringify({
group_id,
file,
cache
}));
}
/**
* 设置群管理员
* @param group_id 群号
* @param user_id 要设置管理员的 QQ 号
* @param enable true 为设置, false 为取消
* @return promise
*/
setGroupAdmin(group_id, user_id, enable) {
return this.http.post('/set_group_admin', qs_1.default.stringify({
group_id,
user_id,
enable
}));
}
/**
* 设置群名片 ( 群备注 )
* @param group_id 群号
* @param user_id 要设置的 QQ 号
* @param card 群名片内容, 不填或空字符串表示删除群名片
* @return promise
*/
setGroupCard(group_id, user_id, card) {
return this.http.post('/set_group_card', qs_1.default.stringify({
group_id,
user_id,
card
}));
}
/**
* 设置群组专属头衔
* @param group_id 群号
* @param user_id 要设置的 QQ 号
* @param special_title 专属头衔, 不填或空字符串表示删除专属头衔
* @param duration 专属头衔有效期, 单位秒, -1 表示永久, 不过此项似乎没有效果, 可能是只有某些特殊的时间长度有效, 有待测试
* @return promise
*/
setGroupSpecialTitle(group_id, user_id, special_title, duration) {
return this.http.post('/set_group_special_title', qs_1.default.stringify({
group_id,
user_id,
special_title,
duration
}));
}
/************************************ 群操作 *************************************/
/**
* 群单人禁言
* @param group_id 群号
* @param user_id 要禁言的 QQ 号
* @param duration 禁言时长, 单位秒, 0 表示取消禁言
* @return promise
*/
setGroupBan(group_id, user_id, duration) {
return this.http.post('/set_group_ban', qs_1.default.stringify({
group_id,
user_id,
duration
}));
}
/**
* 群全员禁言
* @param group_id 群号
* @param enable 是否禁言
* @return promise
*/
setGroupWholeBan(group_id, enable) {
return this.http.post('/set_group_whole_ban', qs_1.default.stringify({
group_id,
enable
}));
}
/**
* 群匿名用户禁言
* @param group_id 群号
* @param anonymous 可选, 要禁言的匿名用户对象(群消息上报的 anonymous 字段)
* @param flag 可选, 要禁言的匿名用户的 flag(需从群消息上报的数据中获得)
* @param duration 禁言时长, 单位秒, 无法取消匿名用户禁言
* @return promise
*/
setGroupAnonymousBan(group_id, anonymous, flag, duration) {
return this.http.post('/set_group_anonymous_ban', qs_1.default.stringify({
group_id,
anonymous,
flag,
duration
}));
}
/**
* 设置精华消息
* @param message_id 消息ID
* @return promise
*/
setEssenceMsg(message_id) {
return this.http.post('/set_essence_msg', qs_1.default.stringify({
message_id
}));
}
/**
* 移出精华消息
* @param message_id 消息ID
* @return promise
*/
deleteEssenceMsg(message_id) {
return this.http.post('/delete_essence_msg', qs_1.default.stringify({
message_id
}));
}
/**
* 群打卡
* @param group_id 群号
* @return promise
*/
sendGroupSign(group_id) {
return this.http.post('/send_group_sign', qs_1.default.stringify({
group_id
}));
}
/**
* 发送群公告
* @param group_id 群号
* @param content 公告内容
* @param image 图片路径(可选)
* @return promise
*/
sendGroupNotice(group_id, content, image) {
return this.http.post('/_send_group_notice', qs_1.default.stringify({
group_id,
content,
image
}));
}
/**
* 获取群公告
* @param group_id 群号
* @return promise
*/
getGroupNotice(group_id) {
return this.http.post('/_get_group_notice', qs_1.default.stringify({
group_id
}));
}
/**
* 群组踢人
* @param group_id 群号
* @param user_id 要踢的 QQ 号
* @param reject_add_request 拒绝此人的加群请求
* @return promise
*/
setGroupKick(group_id, user_id, reject_add_request) {
return this.http.post('/set_group_kick', qs_1.default.stringify({
group_id,
user_id,
reject_add_request
}));
}
/**
* 退出群组
* @param group_id 群号
* @param is_dismiss 是否解散, 如果登录号是群主, 则仅在此项为 true 时能够解散
* @return promise
*/
setGroupLeave(group_id, is_dismiss) {
return this.http.post('/set_group_leave', qs_1.default.stringify({
group_id,
is_dismiss
}));
}
/************************************ 文件 *************************************/
/**
* 上传群文件
* @param group_id 群号
* @param file 本地文件路径,只能上传本地文件, 需要上传 http 文件的话请先调用 download_file API下载
* @param name 储存名称
* @param folder 父目录ID,在不提供 folder 参数的情况下默认上传到根目录
* @return promise
*/
uploadGroupFile(group_id, file, name, folder) {
return this.http.post('/upload_group_file', qs_1.default.stringify({
group_id,
file,
name,
folder
}));
}
/**
* 删除群文件
* @param group_id 群号
* @param file_id 文件ID 参考 File 对象
* @param busid 文件类型 参考 File 对象
* @return promise
*/
deleteGroupFile(group_id, file_id, busid) {
return this.http.post('/delete_group_file', qs_1.default.stringify({
group_id,
file_id,
busid
}));
}
/**
* 创建群文件文件夹,仅能在根目录创建文件夹
* @param group_id 群号
* @param name 文件夹名称
* @param parent_id 仅能为 /
* @return promise
*/
createGroupFileFolder(group_id, name, parent_id) {
return this.http.post('/create_group_file_folder', qs_1.default.stringify({
group_id,
name,
parent_id
}));
}
/**
* 删除群文件文件夹
* @param group_id 群号
* @param folder_id 文件夹ID 参考 Folder 对象
* @return promise
*/
deleteGroupFolder(group_id, folder_id) {
return this.http.post('/delete_group_folder', qs_1.default.stringify({
group_id,
folder_id
}));
}
/**
* 获取群文件系统信息
* @param group_id 群号
* @return promise
*/
getGroupFileSystemInfo(group_id) {
return this.http.post('/get_group_file_system_info', qs_1.default.stringify({
group_id
}));
}
/**
* 获取群根目录文件列表
* @param group_id 群号
* @return promise
*/
getGroupRootFiles(group_id) {
return this.http.post('/get_group_root_files', qs_1.default.stringify({
group_id
}));
}
/**
* 获取群文件资源链接
* @param group_id 群号
* @param file_id 文件ID 参考 File 对象
* @param busid 文件类型 参考 File 对象
* @return promise
*/
getGroupFileUrl(group_id, file_id, busid) {
return this.http.post('/get_group_file_url', qs_1.default.stringify({
group_id,
file_id,
busid
}));
}
/**
* 上传私聊文件,只能上传本地文件, 需要上传 http 文件的话请先调用 download_file API下载
* @param user_id 对方 QQ 号
* @param file 本地文件路径
* @param name 文件名称
* @return promise
*/
uploadPrivateFile(user_id, file, name) {
return this.http.post('/upload_private_file', qs_1.default.stringify({
user_id,
file,
name
}));
}
/************************************ Go-CqHttp 相关 *************************************/
/**
* 获取版本信息
* @return promise
*/
getVersionInfo() {
return this.http.post('/get_version_info');
}
/**
* 获取状态
* @return promise
*/
getStatus() {
return this.http.post('/get_status');
}
/**
* 获取状态
* @param file 事件过滤器文件
* @return promise
*/
reloadEventFilter(file) {
return this.http.post('/reload_event_filter', qs_1.default.stringify({
file
}));
}
/**
* 下载文件到缓存目录
* @param url 链接地址
* @param thread_count 下载线程数
* @param headers 自定义请求头
* @return promise
*/
downloadFile(url, thread_count, headers) {
return this.http.post('/download_file', qs_1.default.stringify({
url,
thread_count,
headers
}));
}
/**
* 检查链接安全性
* @param url 需要检查的链接
* @return promise
*/
checkUrlSafely(url) {
return this.http.post('/check_url_safely', qs_1.default.stringify({
url
}));
}
}
exports.Robot = Robot;