This commit is contained in:
1-6
2023-07-30 17:36:50 +08:00
parent 48720766ec
commit c975996023
18 changed files with 619 additions and 552 deletions
+144 -122
View File
@@ -26,14 +26,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.console = exports.utils = exports.sleep = exports.sender = exports.Bucket = exports.Adapter = void 0;
const srpc_1 = require("./srpc");
const grpc_1 = __importStar(require("@grpc/grpc-js"));
const util_1 = require("util");
grpc_1.setLogVerbosity(grpc_1.logVerbosity.NONE);
let client = new srpc_1.srpc.SillyGirlServiceClient("localhost:50051", grpc_1.credentials.createInsecure());
let senders = [];
let plugin_id = process.env?.PLUGIN_ID ?? "";
process.on("beforeExit", () => {
for (let sender of senders) {
sender.destructor();
}
});
const metadata = new grpc_1.Metadata();
metadata.add("RUNTIME_ID", process.env?.RUNTIME_ID ?? "");
class Sender {
uuid;
destoried = false;
@@ -41,22 +40,22 @@ class Sender {
this.uuid = uuid;
senders.push(this);
}
destructor() {
destroy() {
if (this.destoried)
return;
this.destoried = true;
client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), (err, resp) => { });
client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), metadata, (err, resp) => { });
}
async getUserId() {
return new Promise((resolve, reject) => {
client.SenderGetUserId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -65,12 +64,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetUserName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -79,12 +78,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetChatId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -93,12 +92,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetChatName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -107,12 +106,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -121,12 +120,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -135,12 +134,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetBotId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -149,12 +148,12 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderGetContent(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
@@ -164,7 +163,7 @@ class Sender {
client.SenderParam(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content: `${key}`,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
@@ -179,7 +178,7 @@ class Sender {
client.SenderSetContent(new srpc_1.srpc.SenderContentRequest({
uuid: this.uuid,
content,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
@@ -193,7 +192,7 @@ class Sender {
return new Promise((resolve, reject) => {
client.SenderContinue(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
@@ -217,21 +216,18 @@ class Sender {
timeout: options?.timeout,
listen_private: options?.listen_private,
listen_group: options?.listen_group,
allow_platforms: options?.allow_platforms,
prohibit_platforms: options?.prohibit_platforms,
allow_platforms: options?.allow_platforms ?? [],
prohibit_platforms: options?.prohibit_platforms ?? [],
allow_groups: options?.allow_groups,
prohibit_groups: options?.prohibit_groups,
allow_users: options?.allow_users,
prohibit_users: options?.prohibit_users,
persistent: options?.persistent,
plugin_id,
};
if (!this.uuid) {
params.persistent = true;
}
const call = client.SenderListen();
// let callback: any = options.replyHandler;
// console.log("===",this.uuid)
const call = client.SenderListen(metadata);
call.on("data", (response) => {
if (response.echo == "END") {
call.cancel();
@@ -239,74 +235,54 @@ class Sender {
}
let s = response.uuid ? new Sender(response.uuid) : undefined;
if (options?.handle && s) {
// console.log(`options?.handle`, options.persistent)
let obj = options?.handle(s);
if (typeof obj == "string") {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: obj,
}));
}
else if (obj) {
obj
.then((v) => {
try {
let obj = options?.handle(s);
if (typeof obj == "string") {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: v ?? "",
value: obj,
}));
})
.catch((e) => {
}
else if (obj) {
obj
.then((v) => {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: v ?? "",
}));
})
.catch((e) => {
console.error(e);
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
});
}
else {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
});
}
}
else {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
catch (e) {
console.error(e);
}
// console.log(`options?.handle`, options.persistent)
}
else {
// console.log(`call.cancel()`, options?.persistent)
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
// console.log(`call.cancel()`, options?.persistent)
}
// console.log("response", JSON.stringify(response));
// call.cancel()
resolve(s);
});
call.on("error", (err) => {
reject(err);
// console.error(err);
});
// console.log("params", JSON.stringify(params));
call.write(new srpc_1.srpc.SenderListenRequest(params));
}
// client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => {
// if (err) {
// reject(err);
// } else {
// if (resp?.value) {
// let handle = options?.handle;
// let s = new Sender(resp.value);
// resolve(s);
// if (handle) {
// handle(s);
// }
// } else {
// reject(new Error("timeout"));
// }
// }
// });
// }
);
});
}
holdOn(str) {
return "go_again_" + str;
@@ -316,33 +292,48 @@ class Sender {
client.SenderReply(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content,
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(resp?.value ?? "");
}
});
});
}
async action(options) {
async doAction(options) {
return new Promise((resolve, reject) => {
console.log({
uuid: this.uuid,
content: JSON.stringify(options),
});
client.SenderAction(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content: JSON.stringify(options),
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
resolve(JSON.parse(resp?.value ?? "{}"));
}
});
});
}
async event() {
return;
async getEvent() {
return new Promise((resolve, reject) => {
client.SenderEvent(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(JSON.parse(resp?.value ?? "{}"));
}
});
});
}
}
class Bucket {
@@ -471,7 +462,7 @@ class Bucket {
reject(err);
}
else {
resolve(resp?.keys);
resolve(resp?.keys ?? []);
}
});
});
@@ -483,7 +474,7 @@ class Bucket {
reject(err);
}
else {
resolve(resp?.length);
resolve(resp?.length ?? 0);
}
});
});
@@ -495,7 +486,7 @@ class Bucket {
reject(err);
}
else {
resolve(resp?.buckets);
resolve(resp?.buckets ?? []);
}
});
});
@@ -504,7 +495,12 @@ class Bucket {
const call = client.BucketWatch();
call.on("data", async (response) => {
let fin = handle(this.transform(response.old), this.transform(response.now), response.key);
fin = await fin;
try {
fin = await fin;
}
catch (e) {
console.error(e);
}
let result = {
echo: response.echo,
};
@@ -527,7 +523,7 @@ class Bucket {
plugin_id,
}));
}
async _name() {
async getName() {
return this.name;
}
}
@@ -540,46 +536,47 @@ class Adapter {
this.platform = options.platform;
this.bot_id = options.bot_id;
if (options.replyHandler) {
const call = client.AdapterRegist();
// let callback: any = ;
const call = client.AdapterRegist(metadata);
call.on("data", async (response) => {
// console.log("start on data")
let message = JSON.parse(response.value);
const { echo, __type__ } = message;
delete message.__type__;
delete message.echo;
if (__type__ == "reply" && options.replyHandler) {
let v = (await options.replyHandler(message)) ?? "";
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: v,
}));
try {
let v = (await options.replyHandler(message)) ?? "";
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: v,
}));
}
catch (e) {
console.error(e);
}
}
if (__type__ == "action" && options.actionHandler) {
let v = await options.actionHandler(message);
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: v,
}));
try {
let v = await options.actionHandler(message);
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: v,
}));
}
catch (e) {
console.error(e);
}
}
// console.log("end on data")
});
call.on("error", (err) => {
console.error("adapter disc", err);
});
// console.log("before write")
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: options.bot_id,
platform: options.platform,
}));
// console.log("after write write")
this.call = call;
}
}
setActionHandler(func) {
// 将从服务端不断接收action消息,并处理
// 事件处理巨饼
}
async receive(message) {
//投递消息
return new Promise((resolve, reject) => {
@@ -587,12 +584,12 @@ class Adapter {
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(message),
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else if (resp?.value) {
resolve(new Sender(resp.value));
else {
resolve(undefined);
}
});
});
@@ -604,7 +601,7 @@ class Adapter {
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(message),
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
@@ -623,7 +620,7 @@ class Adapter {
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(options),
}), (err, resp) => {
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
@@ -637,7 +634,7 @@ class Adapter {
exports.Adapter = Adapter;
let sender = new Sender(process.env?.SENDER_ID ?? "");
exports.sender = sender;
async function sleep(ms) {
async function sleep(ms = 1000) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
exports.sleep = sleep;
@@ -648,6 +645,17 @@ class Console {
debug = (message, ...optionalParams) => { };
}
let utils = {
buildCQTag: (type, params, prefix = "CQ") => {
const paramStrings = [];
for (const key in params) {
const value = params[key];
const paramString = `${key}=${value}`;
paramStrings.push(paramString);
}
const paramString = paramStrings.join(",");
const cqString = `[${prefix}:${type}${paramString ? "," + paramString : ""}]`;
return cqString;
},
parseCQText: (text, prefix = "CQ") => {
const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g");
const cqMatches = text.matchAll(cqRegex);
@@ -679,23 +687,37 @@ let utils = {
},
};
exports.utils = utils;
let slog = (type, ...args) => { };
let console = {
log(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "log", content, plugin_id }), (err, resp) => { });
client.Console(new srpc_1.srpc.ConsoleRequest({
type: "log",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
},
info(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "info", content, plugin_id }), (err, resp) => { });
client.Console(new srpc_1.srpc.ConsoleRequest({
type: "info",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
},
error(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "error", content, plugin_id }), (err, resp) => { });
client.Console(new srpc_1.srpc.ConsoleRequest({
type: "error",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
},
debug(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "debug", content, plugin_id }), (err, resp) => { });
client.Console(new srpc_1.srpc.ConsoleRequest({
type: "debug",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
},
};
exports.console = console;