From eb77e7a93633e3a484342fc035f3408dcc19a476 Mon Sep 17 00:00:00 2001 From: Clansty Date: Thu, 1 Feb 2024 00:09:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20link=20preview=20?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=20QQ=20=E5=A4=B4=E5=83=8F=E5=92=8C=E5=90=8D?= =?UTF-8?q?=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- pnpm-lock.yaml | 63 ++++++++++++++++++---------------- src/constants/flags.ts | 1 + src/services/ForwardService.ts | 19 +++++++++- 4 files changed, 53 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 28437d9..278b569 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "quote-api": "https://github.com/Clansty/quote-api/archive/37a0e48a434b94bb04c04c7d86d9f0d2295df869.tar.gz", "sharp": "^0.33.2", "silk-sdk": "^0.2.2", - "telegram": "^2.19.10", + "telegram": "https://github.com/clansty/gramjs/releases/download/2.19.10%2Brevert_media/telegram-2.19.10.tgz", "tmp-promise": "^3.0.3", "undici": "^6.4.0", "zincsearch-node": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45cb77d..051fbc0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,8 +69,8 @@ dependencies: specifier: ^0.2.2 version: 0.2.2 telegram: - specifier: ^2.19.10 - version: 2.19.10 + 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' tmp-promise: specifier: ^3.0.3 version: 3.0.3 @@ -1243,7 +1243,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /buildcheck@0.0.6: @@ -2740,8 +2740,8 @@ packages: whatwg-url: 5.0.0 dev: false - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true requiresBuild: true dev: false @@ -3457,30 +3457,6 @@ packages: - supports-color dev: false - /telegram@2.19.10: - resolution: {integrity: sha512-5Brrn+BcYSjDUmT1/9T4Nq2tYlR1/TreRvpim1UGeuwfnIgFOiTXwDwXBOy6hbn9yssvmtk/dQJU9pBColM7ag==} - dependencies: - '@cryptography/aes': 0.1.1 - async-mutex: 0.3.2 - big-integer: 1.6.52 - buffer: 6.0.3 - htmlparser2: 6.1.0 - mime: 3.0.0 - node-localstorage: 2.2.1 - pako: 2.1.0 - path-browserify: 1.0.1 - real-cancellable-promise: 1.2.0 - socks: 2.7.1 - store2: 2.14.2 - ts-custom-error: 3.3.1 - websocket: 1.0.34 - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - transitivePeerDependencies: - - supports-color - dev: false - /timm@1.7.1: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} dev: false @@ -3563,6 +3539,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + requiresBuild: true dev: false /tsscmp@1.0.6: @@ -3681,7 +3658,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /utif2@4.1.0: @@ -3925,3 +3902,29 @@ packages: - supports-color - utf-8-validate dev: false + + '@github.com/clansty/gramjs/releases/download/2.19.10%252Brevert_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 + dependencies: + '@cryptography/aes': 0.1.1 + async-mutex: 0.3.2 + big-integer: 1.6.52 + buffer: 6.0.3 + htmlparser2: 6.1.0 + mime: 3.0.0 + node-localstorage: 2.2.1 + pako: 2.1.0 + path-browserify: 1.0.1 + real-cancellable-promise: 1.2.0 + socks: 2.7.1 + store2: 2.14.2 + ts-custom-error: 3.3.1 + websocket: 1.0.34 + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + transitivePeerDependencies: + - supports-color + dev: false diff --git a/src/constants/flags.ts b/src/constants/flags.ts index 28676dd..4d52af4 100644 --- a/src/constants/flags.ts +++ b/src/constants/flags.ts @@ -6,6 +6,7 @@ enum flags { NO_DELETE_MESSAGE = 1 << 4, NO_AUTO_CREATE_PM = 1 << 5, COLOR_EMOJI_PREFIX = 1 << 6, + RICH_HEADER = 1 << 7, } export default flags; diff --git a/src/services/ForwardService.ts b/src/services/ForwardService.ts index 97d7460..5f895e8 100644 --- a/src/services/ForwardService.ts +++ b/src/services/ForwardService.ts @@ -44,6 +44,7 @@ import ReplyKeyboardHide = Api.ReplyKeyboardHide; import env from '../models/env'; import { CustomFile } from 'telegram/client/uploads'; import flags from '../constants/flags'; +import BigInteger from 'big-integer'; const NOT_CHAINABLE_ELEMENTS = ['flash', 'record', 'video', 'location', 'share', 'json', 'xml', 'poke']; @@ -331,7 +332,6 @@ export default class ForwardService { } } message = message.trim(); - message = messageHeader + (message && messageHeader ? '\n' : '') + message; // 处理回复 if (event.source) { @@ -382,6 +382,22 @@ export default class ForwardService { else if (files.length) { messageToSend.file = files; } + else if ((pair.flags | this.instance.flags) & flags.RICH_HEADER) { + // 没有文件时才能显示链接预览 + messageHeader = ''; + const url = new URL('https://q2tg-header.clansty.workers.dev'); + url.searchParams.set('name', sender); + 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(), + }); + messageToSend.linkPreview = { showAboveText: true }; + } + + message = messageHeader + (message && messageHeader ? '\n' : '') + message; buttons.length && (messageToSend.buttons = _.chunk(buttons, 3)); replyTo && (messageToSend.replyTo = replyTo); @@ -406,6 +422,7 @@ export default class ForwardService { } public async forwardFromTelegram(message: Api.Message, pair: Pair): Promise> { + // console.log(message); try { const tempFiles: FileResult[] = []; let chain: Sendable = [];