From 56e0a69694755e709140bb7027bdb0d3be4b1c62 Mon Sep 17 00:00:00 2001 From: Clansty Date: Thu, 17 Mar 2022 12:42:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A2=AB=20at=20=E6=97=B6=E5=9C=A8=20t?= =?UTF-8?q?g=20=E4=B8=AD=20at=EF=BC=8Cat=20=E5=85=A8=E4=BD=93=E6=88=90?= =?UTF-8?q?=E5=91=98=E6=B6=88=E6=81=AF=E7=BD=AE=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/helpers/forwardHelper.ts | 12 +++++++----- src/models/Instance.ts | 4 ++++ src/services/ForwardService.ts | 14 +++++++++++--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/helpers/forwardHelper.ts b/src/helpers/forwardHelper.ts index d39a8d2..c98234e 100644 --- a/src/helpers/forwardHelper.ts +++ b/src/helpers/forwardHelper.ts @@ -7,6 +7,11 @@ import { ForwardMessage } from 'oicq'; const log = getLogger('ForwardHelper'); +const htmlEscape = (text: string) => + text.replace(/&/g, '&') + .replace(//g, '>'); + export default { async downloadToCustomFile(url: string, allowWebp = false) { const { fileTypeFromBuffer } = await (Function('return import("file-type")')() as Promise); @@ -35,10 +40,7 @@ export default { return (size / Math.pow(BYTE, 4)).toFixed(1) + 'TB'; }, - htmlEscape: (text: string) => - text.replace(/&/g, '&') - .replace(//g, '>'), + htmlEscape, processJson(json: string) { const jsonObj = JSON.parse(json); @@ -142,7 +144,7 @@ export default { let result = '转发的消息记录'; for (const message of messages) { result += `\n${message.nickname}: ` + - `${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共 ${count} 条消息记录`; diff --git a/src/models/Instance.ts b/src/models/Instance.ts index 859291e..9f0a8c5 100644 --- a/src/models/Instance.ts +++ b/src/models/Instance.ts @@ -188,6 +188,10 @@ export default class Instance { return this.tgBot.me; } + get userMe() { + return this.tgUser.me; + } + get ownerChat() { return this._ownerChat; } diff --git a/src/services/ForwardService.ts b/src/services/ForwardService.ts index 4710c7d..1529444 100644 --- a/src/services/ForwardService.ts +++ b/src/services/ForwardService.ts @@ -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@${this.instance.userMe.username}`; + } + // 处理回复 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; }