mirror of https://github.com/Nofated095/Q2TG.git
feat: QQ 群内发送 at 时在 tg 消息中创建一个链接
This commit is contained in:
parent
f3ee2b92a2
commit
d5cdf7625f
|
@ -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();
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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 += `<a href="${helper.generateRichHeaderUrl(pair.apiKey, elem.qq)}">[<i>${helper.htmlEscape(elem.text)}</i>]</a>`;
|
||||
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,
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue