diff --git a/src/onebot11/main.ts b/src/onebot11/main.ts index fb630bb1..f906937a 100644 --- a/src/onebot11/main.ts +++ b/src/onebot11/main.ts @@ -86,7 +86,8 @@ export class NapCatOnebot11 { // console.log('ob11 onRecvMsg', JSON.stringify(msg, null, 2)); logDebug('收到消息', msg); for (const m of msg) { - if (this.bootTime > parseInt(m.msgTime)) { + // try: 减掉3s 试图修复消息半天收不到 + if (this.bootTime - 3> parseInt(m.msgTime)) { logDebug(`消息时间${m.msgTime}早于启动时间${this.bootTime},忽略上报`); continue; } diff --git a/src/onebot11/rkey.ts b/src/onebot11/rkey.ts new file mode 100644 index 00000000..b60a2677 --- /dev/null +++ b/src/onebot11/rkey.ts @@ -0,0 +1,58 @@ +//远端rkey获取 +class ServerRkeyWrapper { + serverUrl: string = ""; + GroupRkey: string = ""; + PrivateRkey: string = ""; + expired_time: number = 0; + async Init(ServerUrl: string) { + this.serverUrl = ServerUrl; + } + async GetGroupRkey(): Promise { + if (await this.IsRkeyExpired()) { + await this.RefreshRkey(); + } + return this.GroupRkey; + } + async GetPrivateRkey(): Promise { + if (await this.IsRkeyExpired()) { + await this.RefreshRkey(); + } + return this.PrivateRkey; + } + async IsRkeyExpired(): Promise { + return new Promise((resolve, reject) => { + let now = new Date().getTime(); + if (now > this.expired_time || this.expired_time == 0) { + resolve(true); + } else { + resolve(false); + } + reject("error"); + }); + } + async RefreshRkey(): Promise { + //刷新rkey + let data = await this.Internal_RefreshRkey(); + this.GroupRkey = data.group_rkey; + this.PrivateRkey = data.private_rkey; + this.expired_time = data.expired_time; + } + async Internal_RefreshRkey(): Promise { + return new Promise((resolve, reject) => { + fetch(this.serverUrl) + .then(response => { + if (!response.ok) { + reject(response.statusText); // 请求失败,返回错误信息 + } + return response.json(); // 解析 JSON 格式的响应体 + }) + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } +} +export const serverRkey = new ServerRkeyWrapper(); \ No newline at end of file