fix: 使用 richHeader 之后无法 /q 来自 QQ 的消息

只对新的消息有效
This commit is contained in:
Clansty 2024-02-01 17:31:08 +08:00
parent 3966a003b1
commit bd8092c311
No known key found for this signature in database
GPG Key ID: 3A6BE8BAF2EDE134
4 changed files with 45 additions and 48 deletions

View File

@ -60,22 +60,23 @@ model QqBot {
} }
model Message { model Message {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
qqRoomId BigInt @db.BigInt qqRoomId BigInt @db.BigInt
qqSenderId BigInt @db.BigInt qqSenderId BigInt @db.BigInt
time Int time Int
brief String? brief String?
seq Int seq Int
rand BigInt @db.BigInt rand BigInt @db.BigInt
pktnum Int pktnum Int
tgChatId BigInt @db.BigInt tgChatId BigInt @db.BigInt
tgMsgId Int tgMsgId Int
instanceId Int @default(0) instanceId Int @default(0)
instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
tgFileId BigInt? @db.BigInt tgFileId BigInt? @db.BigInt
tgMessageText String? tgMessageText String?
nick String? // /抱 的时候会用到 nick String? // /抱 的时候会用到
tgSenderId BigInt? @db.BigInt tgSenderId BigInt? @db.BigInt
richHeaderUsed Boolean @default(false)
@@index([qqRoomId, qqSenderId, seq, rand, pktnum, time, instanceId]) @@index([qqRoomId, qqSenderId, seq, rand, pktnum, time, instanceId])
@@index([tgChatId, tgMsgId, instanceId]) @@index([tgChatId, tgMsgId, instanceId])

View File

@ -61,36 +61,32 @@ export default class ForwardController {
}); });
if (existed) return; if (existed) return;
// 开始转发过程 // 开始转发过程
let tgMessages: Api.Message | Api.Message[] = await this.forwardService.forwardFromQq(event, pair); let { tgMessage, richHeaderUsed } = await this.forwardService.forwardFromQq(event, pair);
if (!tgMessages) return; if (!tgMessage) return;
if (!Array.isArray(tgMessages)) { // 更新数据库
tgMessages = [tgMessages]; await db.message.create({
} data: {
for (const tgMessage of tgMessages) { qqRoomId: pair.qqRoomId,
// 更新数据库 qqSenderId: event.sender.user_id,
await db.message.create({ time: event.time,
data: { brief: event.raw_message,
qqRoomId: pair.qqRoomId, seq: event.seq,
qqSenderId: event.sender.user_id, rand: event.rand,
time: event.time, pktnum: event.pktnum,
brief: event.raw_message, tgChatId: pair.tgId,
seq: event.seq, tgMsgId: tgMessage.id,
rand: event.rand, instanceId: this.instance.id,
pktnum: event.pktnum, tgMessageText: tgMessage.message,
tgChatId: pair.tgId, tgFileId: forwardHelper.getMessageDocumentId(tgMessage),
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,
nick: event.nickname, 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) { catch (e) {
this.log.error('处理 QQ 消息时遇到问题', e); this.log.error('处理 QQ 消息时遇到问题', e);

View File

@ -163,7 +163,7 @@ export default class {
title: message.nick, title: message.nick,
photo: { url: getAvatarUrl(message.qqSenderId) }, photo: { url: getAvatarUrl(message.qqSenderId) },
}; };
if (message.qqRoomId > 0) { if (message.qqRoomId > 0 || message.richHeaderUsed) {
quoteMessage.text = message.tgMessageText; quoteMessage.text = message.tgMessageText;
} }
else if (message.tgMessageText.includes('\n')) { else if (message.tgMessageText.includes('\n')) {

View File

@ -430,7 +430,7 @@ export default class ForwardService {
} }
tempFiles.forEach(it => it.cleanup()); tempFiles.forEach(it => it.cleanup());
return tgMessage; return { tgMessage, richHeaderUsed };
} }
catch (e) { catch (e) {
this.log.error('从 QQ 到 TG 的消息转发失败', e); this.log.error('从 QQ 到 TG 的消息转发失败', e);
@ -439,7 +439,7 @@ export default class ForwardService {
} }
catch { catch {
} }
return null; return {};
} }
} }