lemon-bot
Version:
a qq bot framework
160 lines • 7.21 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fetch_1 = require("node-fetch");
const utils_1 = require("@xhmm/utils");
var APIList;
(function (APIList) {
APIList["send_private_msg"] = "send_private_msg";
APIList["send_group_msg"] = "send_group_msg";
APIList["send_msg"] = "send_msg";
APIList["delete_msg"] = "delete_msg";
APIList["send_like"] = "send_like";
APIList["set_group_kick"] = "set_group_kick";
APIList["set_group_ban"] = "set_group_ban";
APIList["set_group_anonymous_ban"] = "set_group_anonymous_ban";
APIList["set_group_whole_ban"] = "set_group_whole_ban";
APIList["set_group_admin"] = "set_group_admin";
APIList["set_group_anonymous"] = "set_group_anonymous";
APIList["set_group_card"] = "set_group_card";
APIList["set_group_leave"] = "set_group_leave";
APIList["set_group_special_title"] = "set_group_special_title";
APIList["set_friend_add_request"] = "set_friend_add_request";
APIList["set_group_add_request"] = "set_group_add_request";
APIList["get_login_info"] = "get_login_info";
APIList["get_stranger_info"] = "get_stranger_info";
APIList["get_friend_list"] = "get_friend_list";
APIList["get_group_list"] = "get_group_list";
APIList["get_group_info"] = "get_group_info";
APIList["get_group_member_info"] = "get_group_member_info";
APIList["get_group_member_list"] = "get_group_member_list";
APIList["get_cookies"] = "get_cookies";
APIList["get_csrf_token"] = "get_csrf_token";
APIList["get_credentials"] = "get_credentials";
APIList["get_record"] = "get_record";
APIList["get_image"] = "get_image";
APIList["can_send_image"] = "can_send_image";
APIList["can_send_record"] = "can_send_record";
APIList["get_status"] = "get_status";
APIList["get_version_info"] = "get_version_info";
APIList["set_restart_plugin"] = "set_restart_plugin";
APIList["clean_data_dir"] = "clean_data_dir";
APIList["clean_plugin_log"] = "clean_plugin_log";
})(APIList || (APIList = {}));
class HttpPluginError extends Error {
constructor(APIName, message, retcode) {
if (retcode)
super(`${APIName} failed, ${message}(${retcode})`);
else
super(`${APIName} failed, ${message}`);
this.name = this.constructor.name;
this.APIName = APIName;
if (retcode)
this.retcode = retcode;
Error.captureStackTrace(this, this.constructor);
}
}
class HttpPlugin {
constructor(endpoint, config) {
this.endpoint = endpoint;
this.config = config || {};
}
sendPrivateMsg(personQQ, message, escape = false) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.send_private_msg, {
user_id: personQQ,
message,
auto_escape: escape,
});
});
}
sendGroupMsg(groupQQ, message, escape = false) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.send_group_msg, {
group_id: groupQQ,
message,
auto_escape: escape,
});
});
}
sendMsg(numbers, message, escape = false) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.send_msg, {
user_id: numbers.user,
group_id: numbers.group,
message,
auto_escape: escape,
});
});
}
getGroupList() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.get_group_list);
});
}
getGroupMemberList(groupQQ) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.get_group_member_list, {
group_id: groupQQ,
});
});
}
downloadImage(cqFile) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getResponseData(APIList.get_image, {
file: cqFile,
});
});
}
getResponseData(api, data) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield node_fetch_1.default(`${this.endpoint}/${api}`, {
method: 'POST',
headers: utils_1.conditionalObjectMerge({
'Content-Type': 'application/json'
}, [
this.config.accessToken !== undefined,
{
Authorization: `Bearer ${this.config.accessToken}`,
},
]),
body: JSON.stringify(data)
});
if (response.status === 200) {
const { status, retcode, data } = yield response.json();
if (status === 'ok' && retcode === 0)
return data;
let reason = `请前往 https://cqhttp.cc/docs/#/API?id=响应说明 或 酷Q运行日志(不是http插件) 根据状态码${retcode}查询原因`;
if (status === 'failed') {
if (retcode === -23)
reason = `找不到与目标QQ的关系,消息无法发送`;
if (retcode === -34)
reason = '机器人被禁言了';
if (retcode === -38)
reason = '接收者帐号错误或帐号不在该群组内';
if (retcode === 100)
reason = '参数缺失或参数无效(比如QQ号小于0、message字段无内容等)';
}
return Promise.reject(new HttpPluginError(api, reason, retcode));
}
else {
return Promise.reject(new HttpPluginError(api, `HTTP响应码是${response.status}`));
}
}
catch (e) {
throw new HttpPluginError(api, e.message);
}
});
}
}
exports.HttpPlugin = HttpPlugin;
//# sourceMappingURL=HttpPlugin.js.map