feat: 被 at 时在 tg 中 at,at 全体成员消息置顶

This commit is contained in:
Clansty 2022-03-17 12:42:22 +08:00
parent 7874dfa0fb
commit 56e0a69694
No known key found for this signature in database
GPG Key ID: 3A6BE8BAF2EDE134
3 changed files with 22 additions and 8 deletions

View File

@ -7,6 +7,11 @@ import { ForwardMessage } from 'oicq';
const log = getLogger('ForwardHelper');
const htmlEscape = (text: string) =>
text.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
export default {
async downloadToCustomFile(url: string, allowWebp = false) {
const { fileTypeFromBuffer } = await (Function('return import("file-type")')() as Promise<typeof import('file-type')>);
@ -35,10 +40,7 @@ export default {
return (size / Math.pow(BYTE, 4)).toFixed(1) + 'TB';
},
htmlEscape: (text: string) =>
text.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;'),
htmlEscape,
processJson(json: string) {
const jsonObj = JSON.parse(json);
@ -142,7 +144,7 @@ export default {
let result = '<b>转发的消息记录</b>';
for (const message of messages) {
result += `\n<b>${message.nickname}: </b>` +
`${message.raw_message.length > 10 ? message.raw_message.substring(0, 10) + '…' : message.raw_message}`;
`${htmlEscape(message.raw_message.length > 10 ? message.raw_message.substring(0, 10) + '…' : message.raw_message)}`;
}
if (count > messages.length) {
result += `\n<b>共 ${count} 条消息记录</b>`;

View File

@ -188,6 +188,10 @@ export default class Instance {
return this.tgBot.me;
}
get userMe() {
return this.tgUser.me;
}
get ownerChat() {
return this._ownerChat;
}

View File

@ -38,7 +38,7 @@ export default class ForwardService {
public async forwardFromQq(event: PrivateMessageEvent | GroupMessageEvent, pair: Pair) {
try {
const tempFiles: FileResult[] = [];
let message = '', files: FileLike[] = [], button: MarkupLike, replyTo = 0, noEscape = false;
let message = '', files: FileLike[] = [], button: MarkupLike, replyTo = 0;
let messageHeader = '';
if (event.message_type === 'group') {
// 产生头部,这和工作模式没有关系
@ -151,8 +151,7 @@ export default class ForwardService {
case 'forward':
try {
const messages = await pair.qq.getForwardMsg(result.resId);
message = helper.htmlEscape(helper.generateForwardBrief(messages));
noEscape = true;
message = helper.generateForwardBrief(messages);
const hash = md5Hex(result.resId);
button = Button.url('📃查看', `${process.env.CRV_API}/?hash=${hash}`);
// 传到 Cloudflare
@ -186,6 +185,10 @@ export default class ForwardService {
message = message.trim();
message = messageHeader + (message && messageHeader ? '\n' : '') + message;
if (event.message_type === 'group' && event.atme) {
message += `\n<b>@${this.instance.userMe.username}</b>`;
}
// 处理回复
if (event.source) {
try {
@ -219,6 +222,11 @@ export default class ForwardService {
replyTo && (messageToSend.replyTo = replyTo);
const messageSent = await pair.tg.sendMessage(messageToSend);
if (event.message_type === 'group' && event.atall) {
await messageSent.pin({ notify: false });
}
tempFiles.forEach(it => it.cleanup());
return messageSent;
}