From bd8092c3119ab7d7b78c7e0c9a7a5cf18fea4c19 Mon Sep 17 00:00:00 2001 From: Clansty Date: Thu, 1 Feb 2024 17:31:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20richHeader=20?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E6=97=A0=E6=B3=95=20/q=20=E6=9D=A5=E8=87=AA?= =?UTF-8?q?=20QQ=20=E7=9A=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 只对新的消息有效 --- prisma/schema.prisma | 33 ++++++++--------- src/controllers/ForwardController.ts | 54 +++++++++++++--------------- src/controllers/QuotLyController.ts | 2 +- src/services/ForwardService.ts | 4 +-- 4 files changed, 45 insertions(+), 48 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2f189485..64f096d1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -60,22 +60,23 @@ model QqBot { } model Message { - id Int @id @default(autoincrement()) - qqRoomId BigInt @db.BigInt - qqSenderId BigInt @db.BigInt - time Int - brief String? - seq Int - rand BigInt @db.BigInt - pktnum Int - tgChatId BigInt @db.BigInt - tgMsgId Int - instanceId Int @default(0) - instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) - tgFileId BigInt? @db.BigInt - tgMessageText String? - nick String? // /抱 的时候会用到 - tgSenderId BigInt? @db.BigInt + id Int @id @default(autoincrement()) + qqRoomId BigInt @db.BigInt + qqSenderId BigInt @db.BigInt + time Int + brief String? + seq Int + rand BigInt @db.BigInt + pktnum Int + tgChatId BigInt @db.BigInt + tgMsgId Int + instanceId Int @default(0) + instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) + tgFileId BigInt? @db.BigInt + tgMessageText String? + nick String? // /抱 的时候会用到 + tgSenderId BigInt? @db.BigInt + richHeaderUsed Boolean @default(false) @@index([qqRoomId, qqSenderId, seq, rand, pktnum, time, instanceId]) @@index([tgChatId, tgMsgId, instanceId]) diff --git a/src/controllers/ForwardController.ts b/src/controllers/ForwardController.ts index 389975d1..3eed952d 100644 --- a/src/controllers/ForwardController.ts +++ b/src/controllers/ForwardController.ts @@ -61,36 +61,32 @@ export default class ForwardController { }); if (existed) return; // 开始转发过程 - let tgMessages: Api.Message | Api.Message[] = await this.forwardService.forwardFromQq(event, pair); - if (!tgMessages) return; - if (!Array.isArray(tgMessages)) { - tgMessages = [tgMessages]; - } - for (const tgMessage of tgMessages) { - // 更新数据库 - await db.message.create({ - data: { - qqRoomId: pair.qqRoomId, - qqSenderId: event.sender.user_id, - time: event.time, - brief: event.raw_message, - seq: event.seq, - rand: event.rand, - pktnum: event.pktnum, - tgChatId: pair.tgId, - tgMsgId: tgMessage.id, - instanceId: this.instance.id, - tgMessageText: tgMessage.message, - tgFileId: forwardHelper.getMessageDocumentId(tgMessage), - nick: event.nickname, - tgSenderId: BigInt(this.tgBot.me.id.toString()), - }, - }); - await this.forwardService.addToZinc(pair.dbId, tgMessage.id, { - text: event.raw_message, + let { tgMessage, richHeaderUsed } = await this.forwardService.forwardFromQq(event, pair); + if (!tgMessage) return; + // 更新数据库 + await db.message.create({ + data: { + qqRoomId: pair.qqRoomId, + qqSenderId: event.sender.user_id, + time: event.time, + brief: event.raw_message, + seq: event.seq, + rand: event.rand, + pktnum: event.pktnum, + tgChatId: pair.tgId, + tgMsgId: tgMessage.id, + instanceId: this.instance.id, + tgMessageText: tgMessage.message, + tgFileId: forwardHelper.getMessageDocumentId(tgMessage), nick: event.nickname, - }); - } + tgSenderId: BigInt(this.tgBot.me.id.toString()), + richHeaderUsed, + }, + }); + await this.forwardService.addToZinc(pair.dbId, tgMessage.id, { + text: event.raw_message, + nick: event.nickname, + }); } catch (e) { this.log.error('处理 QQ 消息时遇到问题', e); diff --git a/src/controllers/QuotLyController.ts b/src/controllers/QuotLyController.ts index e3d80a2a..5a5a8361 100644 --- a/src/controllers/QuotLyController.ts +++ b/src/controllers/QuotLyController.ts @@ -163,7 +163,7 @@ export default class { title: message.nick, photo: { url: getAvatarUrl(message.qqSenderId) }, }; - if (message.qqRoomId > 0) { + if (message.qqRoomId > 0 || message.richHeaderUsed) { quoteMessage.text = message.tgMessageText; } else if (message.tgMessageText.includes('\n')) { diff --git a/src/services/ForwardService.ts b/src/services/ForwardService.ts index 0687da3c..e21bc9dd 100644 --- a/src/services/ForwardService.ts +++ b/src/services/ForwardService.ts @@ -430,7 +430,7 @@ export default class ForwardService { } tempFiles.forEach(it => it.cleanup()); - return tgMessage; + return { tgMessage, richHeaderUsed }; } catch (e) { this.log.error('从 QQ 到 TG 的消息转发失败', e); @@ -439,7 +439,7 @@ export default class ForwardService { } catch { } - return null; + return {}; } }