From d5cdf7625fd86caa5c9ee96b6987541aee996dd7 Mon Sep 17 00:00:00 2001 From: Clansty Date: Sat, 16 Mar 2024 09:19:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20QQ=20=E7=BE=A4=E5=86=85=E5=8F=91?= =?UTF-8?q?=E9=80=81=20at=20=E6=97=B6=E5=9C=A8=20tg=20=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=B8=AD=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/src/helpers/forwardHelper.ts | 11 ++++++++++- main/src/services/ForwardService.ts | 21 ++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/main/src/helpers/forwardHelper.ts b/main/src/helpers/forwardHelper.ts index 34f35eb..4c925f8 100644 --- a/main/src/helpers/forwardHelper.ts +++ b/main/src/helpers/forwardHelper.ts @@ -6,6 +6,8 @@ import { Entity } from 'telegram/define'; import { ForwardMessage } from 'icqq'; import { Api } from 'telegram'; import { imageSize } from 'image-size'; +import env from '../models/env'; +import { md5B64 } from '../utils/hashing'; const log = getLogger('ForwardHelper'); @@ -30,7 +32,7 @@ export default { || dimensions.width + dimensions.height > 10000 ) { // 让 Telegram 服务器下载 - return url + return url; } } if (allowWebp) { @@ -192,4 +194,11 @@ export default { } return null; }, + + generateRichHeaderUrl(apiKey: string, userId: number, messageHeader = '') { + const url = new URL(`${env.WEB_ENDPOINT}/richHeader/${apiKey}/${userId}`); + // 防止群名片刷新慢 + messageHeader && url.searchParams.set('hash', md5B64(messageHeader).substring(0, 10)); + return url.toString(); + }, }; diff --git a/main/src/services/ForwardService.ts b/main/src/services/ForwardService.ts index 7ab73fd..8e72ac7 100644 --- a/main/src/services/ForwardService.ts +++ b/main/src/services/ForwardService.ts @@ -169,6 +169,10 @@ export default class ForwardService { case 'at': { if (event.source?.user_id === elem.qq || event.source?.user_id === this.oicq.uin) break; + if (env.WEB_ENDPOINT && typeof elem.qq === 'number') { + message += `[${helper.htmlEscape(elem.text)}]`; + break; + } } case 'face': case 'sface': { @@ -382,27 +386,14 @@ export default class ForwardService { else if (files.length) { messageToSend.file = files; } - else if (event.message_type === 'group' && (pair.flags | this.instance.flags) & flags.RICH_HEADER) { + else if (event.message_type === 'group' && (pair.flags | this.instance.flags) & flags.RICH_HEADER && env.WEB_ENDPOINT) { // 没有文件时才能显示链接预览 richHeaderUsed = true; - let url: URL; - if (env.WEB_ENDPOINT) { - url = new URL(`${env.WEB_ENDPOINT}/richHeader/${pair.apiKey}/${event.sender.user_id}`); - // 防止群名片刷新慢 - url.searchParams.set('hash', md5B64(messageHeader).substring(0, 10)); - } - else { - 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 // https://github.com/gram-js/gramjs/pull/633 messageToSend.file = new Api.InputMediaWebPage({ - url: url.toString(), + url: helper.generateRichHeaderUrl(pair.apiKey, event.sender.user_id, messageHeader), forceSmallMedia: true, optional: true, });