From a68349c23a68fcf6233a438f4e42346499f6155a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Wed, 1 May 2024 14:18:36 +0800 Subject: [PATCH] build: 1.2.0-beta --- src/common/utils/asyncQuene.ts | 37 ++++++++++++++++++++++++++++++++++ src/onebot11/constructor.ts | 15 +++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/common/utils/asyncQuene.ts diff --git a/src/common/utils/asyncQuene.ts b/src/common/utils/asyncQuene.ts new file mode 100644 index 00000000..a2a7aded --- /dev/null +++ b/src/common/utils/asyncQuene.ts @@ -0,0 +1,37 @@ +import { randomUUID } from "crypto"; + +class AsyncQueue { + private tasks: Map = new Map(); + private MainQuene: any = undefined; + private callbacks: Map = new Map(); + private ArgList: Map = new Map(); + private busy = false; + // 添加任务到队列中 返回任务ID + public async addTask(task: any, args: any[], callBack: any) { + let uuid = randomUUID(); + this.tasks.set(uuid, task); + this.callbacks.set(uuid, callBack); + this.ArgList.set(uuid, args); + return uuid; + } + public async runQueue() { + if (!this.MainQuene) { + this.MainQuene = this.Quene(); + } + await this.MainQuene; + this.MainQuene = undefined; + } + public async Quene() { + for (let [uuid, task] of this.tasks) { + //console.log(uuid,...this.ArgList.get(uuid)); + let result = await task(...this.ArgList.get(uuid)); + console.log(result); + let cb = this.callbacks.get(uuid); + cb(result); + this.tasks.delete(uuid); + this.ArgList.delete(uuid); + this.callbacks.delete(uuid); + } + } +} +export const ImageQuene = new AsyncQueue(); \ No newline at end of file diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index d980de8e..81551c0b 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -44,6 +44,7 @@ import { deleteGroup, getFriend, getGroupMember, groupMembers, selfInfo, tempGro import { NTQQFileApi, NTQQGroupApi, NTQQUserApi } from '../core/src/apis'; import http from 'http'; import { OB11GroupMsgEmojiLikeEvent } from '@/onebot11/event/notice/OB11MsgEmojiLikeEvent'; +import { ImageQuene } from '@/common/utils/asyncQuene'; export class OB11Constructor { @@ -143,7 +144,19 @@ export class OB11Constructor { message_data['data']['file'] = element.picElement.fileName; // message_data["data"]["path"] = element.picElement.sourcePath // let currentRKey = "CAQSKAB6JWENi5LMk0kc62l8Pm3Jn1dsLZHyRLAnNmHGoZ3y_gDZPqZt-64" - message_data['data']['url'] = await NTQQFileApi.getImageUrl(msg); + ImageQuene.addTask(NTQQFileApi.getImageUrl, [msg], (result: string) => { + message_data['data']['url'] = result; + }); + await ImageQuene.runQueue(); + // 缓解获取失败 + try { + if (!message_data['data']['url']) { + message_data['data']['url'] = ""; + } + } catch (e) { + message_data['data']['url'] = ""; + } + // message_data["data"]["file_id"] = element.picElement.fileUuid message_data['data']['file_size'] = element.picElement.fileSize; dbUtil.addFileCache({