Q2TG/src/controllers/ForwardController.ts

85 lines
2.9 KiB
TypeScript
Raw Normal View History

import Telegram from '../client/Telegram';
import OicqClient from '../client/OicqClient';
import ForwardService from '../services/ForwardService';
import { GroupMessageEvent, PrivateMessageEvent } from 'oicq';
import db from '../models/db';
2022-02-26 10:15:40 +00:00
import { Api } from 'telegram';
2022-03-07 10:14:45 +00:00
import { getLogger, Logger } from 'log4js';
import Instance from '../models/Instance';
export default class ForwardController {
private readonly forwardService: ForwardService;
2022-03-07 10:14:45 +00:00
private readonly log: Logger;
constructor(private readonly instance: Instance,
private readonly tgBot: Telegram,
private readonly tgUser: Telegram,
private readonly oicq: OicqClient) {
2022-03-07 10:14:45 +00:00
this.log = getLogger(`ForwardController - ${instance.id}`);
2022-03-17 10:15:37 +00:00
this.forwardService = new ForwardService(this.instance, tgBot, oicq);
oicq.addNewMessageEventHandler(this.onQqMessage);
tgBot.addNewMessageEventHandler(this.onTelegramMessage);
tgBot.addEditedMessageEventHandler(this.onTelegramMessage);
}
private onQqMessage = async (event: PrivateMessageEvent | GroupMessageEvent) => {
try {
const target = event.message_type === 'private' ? event.friend : event.group;
const pair = this.instance.forwardPairs.find(target);
if (!pair) return;
const tgMessages = await this.forwardService.forwardFromQq(event, pair);
for (const tgMessage of tgMessages) {
// 更新数据库
await db.message.create({
data: {
qqRoomId: pair.qqRoomId,
qqSenderId: event.user_id,
time: event.time,
brief: event.raw_message,
seq: event.seq,
rand: event.rand,
pktnum: event.pktnum,
2022-03-05 07:26:37 +00:00
tgChatId: pair.tgId,
tgMsgId: tgMessage.id,
instanceId: this.instance.id,
},
});
}
}
catch (e) {
this.log.error('处理 QQ 消息时遇到问题', e);
2022-02-26 10:15:40 +00:00
}
};
private onTelegramMessage = async (message: Api.Message) => {
2022-03-05 07:26:37 +00:00
try {
if (message.senderId?.eq(this.instance.botMe.id)) return true;
const pair = this.instance.forwardPairs.find(message.chat);
2022-03-05 09:58:07 +00:00
if (!pair) return false;
const qqMessagesSent = await this.forwardService.forwardFromTelegram(message, pair);
if (qqMessagesSent) {
// 更新数据库
for (const qqMessageSent of qqMessagesSent) {
await db.message.create({
data: {
qqRoomId: pair.qqRoomId,
qqSenderId: this.oicq.uin,
time: qqMessageSent.time,
brief: qqMessageSent.brief,
seq: qqMessageSent.seq,
rand: qqMessageSent.rand,
pktnum: 1,
tgChatId: pair.tgId,
tgMsgId: message.id,
instanceId: this.instance.id,
},
});
}
}
}
catch (e) {
this.log.error('处理 Telegram 消息时遇到问题', e);
}
};
}