mirror of https://github.com/Nofated095/Q2TG.git
Merge remote-tracking branch 'origin/rainbowcat' into rainbowcat
This commit is contained in:
commit
4df30e8705
|
@ -42,7 +42,7 @@
|
|||
"nodejs-base64": "^2.0.0",
|
||||
"prisma": "5.8.0",
|
||||
"prompts": "^2.4.2",
|
||||
"quote-api": "https://github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz",
|
||||
"quote-api": "https://github.com/Clansty/quote-api/archive/014b21138afbbe0e12c91b00561414b1e851fc0f.tar.gz",
|
||||
"sharp": "^0.33.2",
|
||||
"silk-sdk": "^0.2.2",
|
||||
"telegram": "https://github.com/clansty/gramjs/releases/download/2.19.10%2Brevert_media/telegram-2.19.10.tgz",
|
||||
|
|
|
@ -60,8 +60,8 @@ dependencies:
|
|||
specifier: ^2.4.2
|
||||
version: 2.4.2
|
||||
quote-api:
|
||||
specifier: https://github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz
|
||||
version: '@github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz'
|
||||
specifier: https://github.com/Clansty/quote-api/archive/014b21138afbbe0e12c91b00561414b1e851fc0f.tar.gz
|
||||
version: '@github.com/Clansty/quote-api/archive/014b21138afbbe0e12c91b00561414b1e851fc0f.tar.gz'
|
||||
sharp:
|
||||
specifier: ^0.33.2
|
||||
version: 0.33.2
|
||||
|
@ -70,7 +70,7 @@ dependencies:
|
|||
version: 0.2.2
|
||||
telegram:
|
||||
specifier: https://github.com/clansty/gramjs/releases/download/2.19.10%2Brevert_media/telegram-2.19.10.tgz
|
||||
version: '@github.com/clansty/gramjs/releases/download/2.19.10%252Brevert_media/telegram-2.19.10.tgz'
|
||||
version: '@github.com/clansty/gramjs/releases/download/2.19.10%25252Brevert_media/telegram-2.19.10.tgz'
|
||||
tmp-promise:
|
||||
specifier: ^3.0.3
|
||||
version: 3.0.3
|
||||
|
@ -3872,10 +3872,10 @@ packages:
|
|||
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
|
||||
dev: false
|
||||
|
||||
'@github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz':
|
||||
resolution: {tarball: https://github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz}
|
||||
'@github.com/Clansty/quote-api/archive/014b21138afbbe0e12c91b00561414b1e851fc0f.tar.gz':
|
||||
resolution: {tarball: https://github.com/Clansty/quote-api/archive/014b21138afbbe0e12c91b00561414b1e851fc0f.tar.gz}
|
||||
name: quote-api
|
||||
version: 0.12.2
|
||||
version: 0.14.0
|
||||
dependencies:
|
||||
canvas: 2.11.2
|
||||
dotenv: 7.0.0
|
||||
|
@ -3903,7 +3903,7 @@ packages:
|
|||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
'@github.com/clansty/gramjs/releases/download/2.19.10%252Brevert_media/telegram-2.19.10.tgz':
|
||||
'@github.com/clansty/gramjs/releases/download/2.19.10%25252Brevert_media/telegram-2.19.10.tgz':
|
||||
resolution: {tarball: https://github.com/clansty/gramjs/releases/download/2.19.10%2Brevert_media/telegram-2.19.10.tgz}
|
||||
name: telegram
|
||||
version: 2.19.10
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -7,4 +7,11 @@ export default {
|
|||
index = index % arr.length;
|
||||
return arr[index];
|
||||
},
|
||||
tgColor(index: number) {
|
||||
// https://github.com/telegramdesktop/tdesktop/blob/7049929a59176a996c4257d5a09df08b04ac3b22/Telegram/SourceFiles/ui/chat/chat_style.cpp#L1043
|
||||
// https://github.com/LyoSU/quote-api/blob/master/utils/quote-generate.js#L163
|
||||
const arr = [...new Intl.Segmenter().segment('❤️🧡💜💚🩵💙🩷')].map(x => x.segment);
|
||||
index = index % arr.length;
|
||||
return arr[index];
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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')) {
|
||||
|
@ -195,7 +195,7 @@ export default class {
|
|||
photo = await convert.cachedBuffer(`${sender.photo.photoId.toString(16)}.jpg`, () => this.tgBot.downloadEntityPhoto(sender));
|
||||
}
|
||||
messageFrom = {
|
||||
id: Number(message.tgSenderId),
|
||||
id: sender.color || Number(message.tgSenderId),
|
||||
name: message.nick,
|
||||
title: message.nick,
|
||||
username: sender.username,
|
||||
|
|
|
@ -387,6 +387,8 @@ export default class ForwardService {
|
|||
richHeaderUsed = true;
|
||||
const url = new URL('https://q2tg-header.clansty.workers.dev');
|
||||
url.searchParams.set('name', sender);
|
||||
url.searchParams.set('title', 'title' in event.sender ? event.sender.title : '');
|
||||
url.searchParams.set('role', 'role' in event.sender ? event.sender.role : '');
|
||||
url.searchParams.set('id', event.sender.user_id.toString());
|
||||
// https://github.com/tdlib/td/blob/437c2d0c6e0ad104022d5ad86ddc8aedc41cb7a8/td/telegram/MessageContent.cpp#L2575
|
||||
// https://github.com/tdlib/td/blob/437c2d0c6e0ad104022d5ad86ddc8aedc41cb7a8/td/generate/scheme/telegram_api.tl#L1841
|
||||
|
@ -394,6 +396,7 @@ export default class ForwardService {
|
|||
messageToSend.file = new Api.InputMediaWebPage({
|
||||
url: url.toString(),
|
||||
forceSmallMedia: true,
|
||||
optional: true,
|
||||
});
|
||||
messageToSend.linkPreview = { showAboveText: true };
|
||||
}
|
||||
|
@ -412,7 +415,7 @@ export default class ForwardService {
|
|||
}
|
||||
catch (e) {
|
||||
if (richHeaderUsed) {
|
||||
this.log.warn('Rich Header 发送错误', messageToSend.file);
|
||||
this.log.warn('Rich Header 发送错误', messageToSend.file, e);
|
||||
delete messageToSend.file;
|
||||
delete messageToSend.linkPreview;
|
||||
message = messageHeader + (message && messageHeader ? '\n' : '') + message;
|
||||
|
@ -427,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);
|
||||
|
@ -436,7 +439,7 @@ export default class ForwardService {
|
|||
}
|
||||
catch {
|
||||
}
|
||||
return null;
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -456,7 +459,7 @@ export default class ForwardService {
|
|||
'') +
|
||||
': \n';
|
||||
if ((pair.flags | this.instance.flags) & flags.COLOR_EMOJI_PREFIX) {
|
||||
messageHeader = emoji.color(message.senderId.toJSNumber()) + messageHeader;
|
||||
messageHeader = emoji.tgColor((message.sender as Api.User)?.color || message.senderId.toJSNumber()) + messageHeader;
|
||||
}
|
||||
if (message.photo instanceof Api.Photo ||
|
||||
// stickers 和以文件发送的图片都是这个
|
||||
|
|
Loading…
Reference in New Issue