feat: 使用 link preview 显示 QQ 头像和名称

This commit is contained in:
Clansty 2024-02-01 00:09:02 +08:00
parent 17669d5a60
commit eb77e7a936
No known key found for this signature in database
GPG Key ID: 3A6BE8BAF2EDE134
4 changed files with 53 additions and 32 deletions

View File

@ -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",

View File

@ -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

View File

@ -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;

View File

@ -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<Array<QQMessageSent>> {
// console.log(message);
try {
const tempFiles: FileResult[] = [];
let chain: Sendable = [];