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 { 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();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -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,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue