From 31d9f503f160f7c019431572050285104d8f24e9 Mon Sep 17 00:00:00 2001 From: Clansty Date: Fri, 12 Jan 2024 23:29:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E5=9C=A8=20tg=20=E5=90=8C=E6=AD=A5=E6=92=A4=E5=9B=9E=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9A=84=20flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/TelegramChat.ts | 6 +++++- src/constants/flags.ts | 3 ++- src/controllers/DeleteMessageController.ts | 14 ++++---------- src/services/DeleteMessageService.ts | 13 +++++++++++-- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/client/TelegramChat.ts b/src/client/TelegramChat.ts index 88cab5e..90fd6a5 100644 --- a/src/client/TelegramChat.ts +++ b/src/client/TelegramChat.ts @@ -2,7 +2,7 @@ import { BigInteger } from 'big-integer'; import { Api, TelegramClient, utils } from 'telegram'; import { ButtonLike, Entity, EntityLike, MessageIDLike } from 'telegram/define'; import WaitForMessageHelper from '../helpers/WaitForMessageHelper'; -import { SendMessageParams } from 'telegram/client/messages'; +import { EditMessageParams, SendMessageParams } from 'telegram/client/messages'; import { CustomFile } from 'telegram/client/uploads'; import Telegram from './Telegram'; import createPaginatedInlineSelector from '../utils/paginatedInlineSelector'; @@ -186,6 +186,10 @@ export default class TelegramChat { return await this.client.deleteMessages(this.entity, messageId, { revoke: true }); } + public async editMessages(params: EditMessageParams) { + return await this.client.editMessage(this.entity, params); + } + public async inviteMember(member: EntityLike | EntityLike[]) { if (!Array.isArray(member)) { member = [member]; diff --git a/src/constants/flags.ts b/src/constants/flags.ts index c5aad64..612d0f6 100644 --- a/src/constants/flags.ts +++ b/src/constants/flags.ts @@ -2,7 +2,8 @@ enum flags { DISABLE_Q2TG = 1, DISABLE_TG2Q = 1 << 1, DISABLE_JOIN_NOTICE = 1 << 2, - DISABLE_POKE = 1 << 3 + DISABLE_POKE = 1 << 3, + NO_DELETE_MESSAGE = 1 << 4, } export default flags; diff --git a/src/controllers/DeleteMessageController.ts b/src/controllers/DeleteMessageController.ts index 5fb0509..e5e3d7a 100644 --- a/src/controllers/DeleteMessageController.ts +++ b/src/controllers/DeleteMessageController.ts @@ -17,8 +17,8 @@ export default class DeleteMessageController { tgBot.addNewMessageEventHandler(this.onTelegramMessage); tgBot.addEditedMessageEventHandler(this.onTelegramEditMessage); tgUser.addDeletedMessageEventHandler(this.onTgDeletedMessage); - oicq.on('notice.friend.recall', this.onQqFriendRecall); - oicq.on('notice.group.recall', this.onQqGroupRecall); + oicq.on('notice.friend.recall', this.onQqRecall); + oicq.on('notice.group.recall', this.onQqRecall); } private onTelegramMessage = async (message: Api.Message) => { @@ -42,14 +42,8 @@ export default class DeleteMessageController { return await this.onTelegramMessage(message); }; - private onQqFriendRecall = async (event: FriendRecallEvent) => { - const pair = this.instance.forwardPairs.find(event.friend); - if (!pair) return; - await this.deleteMessageService.handleQqRecall(event, pair); - }; - - private onQqGroupRecall = async (event: GroupRecallEvent) => { - const pair = this.instance.forwardPairs.find(event.group); + private onQqRecall = async (event: FriendRecallEvent | GroupRecallEvent) => { + const pair = this.instance.forwardPairs.find('friend' in event ? event.friend : event.group); if (!pair) return; await this.deleteMessageService.handleQqRecall(event, pair); }; diff --git a/src/services/DeleteMessageService.ts b/src/services/DeleteMessageService.ts index 3e86fdb..60020d6 100644 --- a/src/services/DeleteMessageService.ts +++ b/src/services/DeleteMessageService.ts @@ -7,6 +7,7 @@ import Instance from '../models/Instance'; import { Pair } from '../models/Pair'; import { consumer } from '../utils/highLevelFunces'; import forwardHelper from '../helpers/forwardHelper'; +import flags from '../constants/flags'; export default class DeleteMessageService { private readonly log: Logger; @@ -143,11 +144,19 @@ export default class DeleteMessageService { instanceId: this.instance.id, }, }); - if (message) { + if (!message) return; + if (pair.flags & flags.NO_DELETE_MESSAGE) { + await pair.tg.editMessages({ + message: message.tgMsgId, + text: `${message.tgMessageText}\n此消息已删除`, + parseMode: 'html', + }); + } + else { + await pair.tg.deleteMessages(message.tgMsgId); await db.message.delete({ where: { id: message.id }, }); - await pair.tg.deleteMessages(message.tgMsgId); } } catch (e) {