From a2ea2d014b267cb5b80e2fa8c28c9ad2d8dc1eac Mon Sep 17 00:00:00 2001 From: Clansty Date: Fri, 12 Jan 2024 22:44:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=20flag=20?= =?UTF-8?q?=E6=94=B9=E9=80=A0=E7=8E=B0=E6=9C=89=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 6 +- src/constants/flags.ts | 8 +++ src/controllers/ForwardController.ts | 13 ++-- src/controllers/InChatCommandsController.ts | 13 ++-- src/models/ForwardPairs.ts | 4 +- src/models/Pair.ts | 72 ++------------------- 6 files changed, 30 insertions(+), 86 deletions(-) create mode 100644 src/constants/flags.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 83aefab..4134f56 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -87,11 +87,7 @@ model ForwardPair { avatarCache AvatarCache[] instanceId Int @default(0) instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) - joinNotice Boolean @default(true) - poke Boolean @default(true) - enable Boolean @default(true) - disableQ2TG Boolean @default(false) - disableTG2Q Boolean @default(false) + flags Int @default(0) @@unique([qqRoomId, instanceId]) @@unique([tgChatId, instanceId]) diff --git a/src/constants/flags.ts b/src/constants/flags.ts new file mode 100644 index 0000000..c5aad64 --- /dev/null +++ b/src/constants/flags.ts @@ -0,0 +1,8 @@ +enum flags { + DISABLE_Q2TG = 1, + DISABLE_TG2Q = 1 << 1, + DISABLE_JOIN_NOTICE = 1 << 2, + DISABLE_POKE = 1 << 3 +} + +export default flags; diff --git a/src/controllers/ForwardController.ts b/src/controllers/ForwardController.ts index c06637d..9db51d2 100644 --- a/src/controllers/ForwardController.ts +++ b/src/controllers/ForwardController.ts @@ -18,6 +18,7 @@ import { CustomFile } from 'telegram/client/uploads'; import forwardHelper from '../helpers/forwardHelper'; import helper from '../helpers/forwardHelper'; import ZincSearch from 'zincsearch-node'; +import flags from '../constants/flags'; export default class ForwardController { private readonly forwardService: ForwardService; @@ -45,8 +46,7 @@ export default class ForwardController { const target = event.message_type === 'private' ? event.friend : event.group; const pair = this.instance.forwardPairs.find(target); if (!pair) return; - if (!pair.enable) return; - if (pair.disableQ2TG) return; + if (pair.flags & flags.DISABLE_Q2TG) return; // 如果是多张图片的话,是一整条消息,只过一次,所以不受这个判断影响 let existed = event.message_type === 'private' && await db.message.findFirst({ where: { @@ -102,8 +102,7 @@ export default class ForwardController { if (message.senderId?.eq(this.instance.botMe.id)) return true; const pair = this.instance.forwardPairs.find(message.chat); if (!pair) return false; - if (!pair.enable) return; - if (pair.disableTG2Q) return; + if (pair.flags & flags.DISABLE_TG2Q) return; const qqMessagesSent = await this.forwardService.forwardFromTelegram(message, pair); if (qqMessagesSent) { // 更新数据库 @@ -141,7 +140,7 @@ export default class ForwardController { private onQqGroupMemberIncrease = async (event: MemberIncreaseEvent) => { try { const pair = this.instance.forwardPairs.find(event.group); - if (!pair?.joinNotice) return false; + if (pair?.flags & flags.DISABLE_JOIN_NOTICE) return false; const avatar = await getAvatar(event.user_id); await pair.tg.sendMessage({ file: new CustomFile('avatar.png', avatar.length, '', avatar), @@ -157,7 +156,7 @@ export default class ForwardController { private onTelegramParticipant = async (event: Api.UpdateChannelParticipant) => { try { const pair = this.instance.forwardPairs.find(event.channelId); - if (!pair?.joinNotice) return false; + if (pair?.flags & flags.DISABLE_JOIN_NOTICE) return false; if ( !(event.newParticipant instanceof Api.ChannelParticipantAdmin) && !(event.newParticipant instanceof Api.ChannelParticipantCreator) && @@ -175,7 +174,7 @@ export default class ForwardController { private onQqPoke = async (event: FriendPokeEvent | GroupPokeEvent) => { const target = event.notice_type === 'friend' ? event.friend : event.group; const pair = this.instance.forwardPairs.find(target); - if (!pair?.poke) return; + if (pair?.flags & flags.DISABLE_POKE) return; let operatorName: string, targetName: string; if (target instanceof Friend) { if (event.operator_id === target.user_id) { diff --git a/src/controllers/InChatCommandsController.ts b/src/controllers/InChatCommandsController.ts index 877340c..0025b31 100644 --- a/src/controllers/InChatCommandsController.ts +++ b/src/controllers/InChatCommandsController.ts @@ -6,6 +6,7 @@ import OicqClient from '../client/OicqClient'; import { Api } from 'telegram'; import { Group } from 'icqq'; import RecoverMessageHelper from '../helpers/RecoverMessageHelper'; +import flags from '../constants/flags'; export default class InChatCommandsController { private readonly service: InChatCommandsService; @@ -43,27 +44,27 @@ export default class InChatCommandsController { await this.service.poke(message, pair); return true; case '/forwardoff': - pair.enable = false; + pair.flags |= flags.DISABLE_Q2TG | flags.DISABLE_TG2Q; await message.reply({ message: '转发已禁用' }); return true; case '/forwardon': - pair.enable = true; + pair.flags &= ~flags.DISABLE_Q2TG & ~flags.DISABLE_TG2Q; await message.reply({ message: '转发已启用' }); return true; case '/disable_qq_forward': - pair.disableQ2TG = true; + pair.flags |= flags.DISABLE_Q2TG; await message.reply({ message: 'QQ->TG已禁用' }); return true; case '/enable_qq_forward': - pair.disableQ2TG = false; + pair.flags &= ~flags.DISABLE_Q2TG; await message.reply({ message: 'QQ->TG已启用' }); return true; case '/disable_tg_forward': - pair.disableTG2Q = true; + pair.flags |= flags.DISABLE_TG2Q; await message.reply({ message: 'TG->QQ已禁用' }); return true; case '/enable_tg_forward': - pair.disableTG2Q = false; + pair.flags &= ~flags.DISABLE_TG2Q; await message.reply({ message: 'TG->QQ已启用' }); return true; case '/refresh': diff --git a/src/models/ForwardPairs.ts b/src/models/ForwardPairs.ts index a88513b..3d0426a 100644 --- a/src/models/ForwardPairs.ts +++ b/src/models/ForwardPairs.ts @@ -27,7 +27,7 @@ export default class ForwardPairs { const qq = oicq.getChat(Number(i.qqRoomId)); const tg = await tgBot.getChat(Number(i.tgChatId)); if (qq && tg) { - this.pairs.push(new Pair(qq, tg, i.id, i.joinNotice, i.poke, i.enable, i.disableQ2TG, i.disableTG2Q)); + this.pairs.push(new Pair(qq, tg, i.id, i.flags)); } } catch (e) { @@ -50,7 +50,7 @@ export default class ForwardPairs { instanceId: this.instanceId, }, }); - this.pairs.push(new Pair(qq, tg, dbEntry.id, true, true, true, false, false)); + this.pairs.push(new Pair(qq, tg, dbEntry.id, dbEntry.flags)); return dbEntry; } diff --git a/src/models/Pair.ts b/src/models/Pair.ts index f44fd23..47f1362 100644 --- a/src/models/Pair.ts +++ b/src/models/Pair.ts @@ -17,11 +17,7 @@ export class Pair { public readonly qq: Friend | Group, private _tg: TelegramChat, public dbId: number, - private _joinNotice: boolean, - private _poke: boolean, - private _enable: boolean, - private _disableQ2TG: boolean, - private _disableTG2Q: boolean, + private _flags: number, ) { } @@ -67,72 +63,16 @@ export class Pair { .then(() => log.info(`出现了到超级群组的转换: ${value.id}`)); } - get joinNotice() { - return this._joinNotice; + get flags() { + return this._flags; } - set joinNotice(value) { - this._joinNotice = value; + set flags(value) { + this._flags = value; db.forwardPair .update({ where: { id: this.dbId }, - data: { joinNotice: value }, - }) - .then(() => 0); - } - - get poke() { - return this._poke; - } - - set poke(value) { - this._poke = value; - db.forwardPair - .update({ - where: { id: this.dbId }, - data: { poke: value }, - }) - .then(() => 0); - } - - get enable() { - return this._enable; - } - - set enable(value) { - this._enable = value; - db.forwardPair - .update({ - where: { id: this.dbId }, - data: { enable: value }, - }) - .then(() => 0); - } - - get disableQ2TG() { - return this._disableQ2TG; - } - - set disableQ2TG(value) { - this._disableQ2TG = value; - db.forwardPair - .update({ - where: { id: this.dbId }, - data: { disableQ2TG: value }, - }) - .then(() => 0); - } - - get disableTG2Q() { - return this._disableTG2Q; - } - - set disableTG2Q(value) { - this._disableTG2Q = value; - db.forwardPair - .update({ - where: { id: this.dbId }, - data: { disableTG2Q: value }, + data: { flags: value }, }) .then(() => 0); }