feat: QQ 群内发送 at 时在 tg 消息中创建一个链接

This commit is contained in:
Clansty 2024-03-16 09:19:01 +08:00
parent f3ee2b92a2
commit d5cdf7625f
2 changed files with 16 additions and 16 deletions

View File

@ -6,6 +6,8 @@ import { Entity } from 'telegram/define';
import { ForwardMessage } from 'icqq'; import { ForwardMessage } from 'icqq';
import { Api } from 'telegram'; import { Api } from 'telegram';
import { imageSize } from 'image-size'; import { imageSize } from 'image-size';
import env from '../models/env';
import { md5B64 } from '../utils/hashing';
const log = getLogger('ForwardHelper'); const log = getLogger('ForwardHelper');
@ -30,7 +32,7 @@ export default {
|| dimensions.width + dimensions.height > 10000 || dimensions.width + dimensions.height > 10000
) { ) {
// 让 Telegram 服务器下载 // 让 Telegram 服务器下载
return url return url;
} }
} }
if (allowWebp) { if (allowWebp) {
@ -192,4 +194,11 @@ export default {
} }
return null; 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();
},
}; };

View File

@ -169,6 +169,10 @@ export default class ForwardService {
case 'at': { case 'at': {
if (event.source?.user_id === elem.qq || event.source?.user_id === this.oicq.uin) if (event.source?.user_id === elem.qq || event.source?.user_id === this.oicq.uin)
break; break;
if (env.WEB_ENDPOINT && typeof elem.qq === 'number') {
message += `<a href="${helper.generateRichHeaderUrl(pair.apiKey, elem.qq)}">[<i>${helper.htmlEscape(elem.text)}</i>]</a>`;
break;
}
} }
case 'face': case 'face':
case 'sface': { case 'sface': {
@ -382,27 +386,14 @@ export default class ForwardService {
else if (files.length) { else if (files.length) {
messageToSend.file = files; 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; 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/telegram/MessageContent.cpp#L2575
// https://github.com/tdlib/td/blob/437c2d0c6e0ad104022d5ad86ddc8aedc41cb7a8/td/generate/scheme/telegram_api.tl#L1841 // https://github.com/tdlib/td/blob/437c2d0c6e0ad104022d5ad86ddc8aedc41cb7a8/td/generate/scheme/telegram_api.tl#L1841
// https://github.com/gram-js/gramjs/pull/633 // https://github.com/gram-js/gramjs/pull/633
messageToSend.file = new Api.InputMediaWebPage({ messageToSend.file = new Api.InputMediaWebPage({
url: url.toString(), url: helper.generateRichHeaderUrl(pair.apiKey, event.sender.user_id, messageHeader),
forceSmallMedia: true, forceSmallMedia: true,
optional: true, optional: true,
}); });