refactor: 使用 flag 改造现有开关

This commit is contained in:
Clansty 2024-01-12 22:44:56 +08:00
parent 8fd26c7bd4
commit a2ea2d014b
No known key found for this signature in database
GPG Key ID: 3A6BE8BAF2EDE134
6 changed files with 30 additions and 86 deletions

View File

@ -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])

8
src/constants/flags.ts Normal file
View File

@ -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;

View File

@ -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) {

View File

@ -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':

View File

@ -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;
}

View File

@ -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);
}