mirror of https://github.com/Nofated095/Q2TG.git
refactor: 使用 flag 改造现有开关
This commit is contained in:
parent
8fd26c7bd4
commit
a2ea2d014b
|
@ -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])
|
||||
|
|
|
@ -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;
|
|
@ -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) {
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue