2022-02-24 10:27:06 +00:00
|
|
|
import Telegram from '../client/Telegram';
|
|
|
|
import OicqClient from '../client/OicqClient';
|
|
|
|
import ForwardService from '../services/ForwardService';
|
2022-03-05 04:27:49 +00:00
|
|
|
import { GroupMessageEvent, PrivateMessageEvent } from 'oicq';
|
2022-03-07 08:36:13 +00:00
|
|
|
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';
|
2022-03-07 08:36:13 +00:00
|
|
|
import Instance from '../models/Instance';
|
2022-02-24 10:27:06 +00:00
|
|
|
|
|
|
|
export default class ForwardController {
|
|
|
|
private readonly forwardService: ForwardService;
|
2022-03-07 10:14:45 +00:00
|
|
|
private readonly log: Logger;
|
2022-02-24 10:27:06 +00:00
|
|
|
|
2022-03-07 08:36:13 +00:00
|
|
|
constructor(private readonly instance: Instance,
|
|
|
|
private readonly tgBot: Telegram,
|
2022-02-24 10:27:06 +00:00
|
|
|
private readonly tgUser: Telegram,
|
|
|
|
private readonly oicq: OicqClient) {
|
2022-03-07 10:14:45 +00:00
|
|
|
this.log = getLogger(`ForwardController - ${instance.id}`);
|
|
|
|
this.forwardService = new ForwardService(this.instance, tgBot);
|
2022-03-07 10:05:14 +00:00
|
|
|
oicq.addNewMessageEventHandler(this.onQqMessage);
|
|
|
|
tgBot.addNewMessageEventHandler(this.onTelegramMessage);
|
|
|
|
tgBot.addEditedMessageEventHandler(this.onTelegramMessage);
|
2022-02-24 10:27:06 +00:00
|
|
|
}
|
|
|
|
|
2022-03-01 13:11:14 +00:00
|
|
|
private onQqMessage = async (event: PrivateMessageEvent | GroupMessageEvent) => {
|
2022-03-05 04:27:49 +00:00
|
|
|
try {
|
|
|
|
const target = event.message_type === 'private' ? event.friend : event.group;
|
2022-03-07 10:05:14 +00:00
|
|
|
const pair = this.instance.forwardPairs.find(target);
|
2022-03-05 04:27:49 +00:00
|
|
|
if (!pair) return;
|
|
|
|
const tgMessage = await this.forwardService.forwardFromQq(event, pair);
|
|
|
|
if (tgMessage) {
|
|
|
|
// 更新数据库
|
|
|
|
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,
|
2022-03-05 04:27:49 +00:00
|
|
|
tgMsgId: tgMessage.id,
|
2022-03-07 11:41:59 +00:00
|
|
|
instanceId: this.instance.id,
|
2022-03-05 04:27:49 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
2022-02-24 10:27:06 +00:00
|
|
|
}
|
2022-03-05 04:27:49 +00:00
|
|
|
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 {
|
2022-03-17 03:24:02 +00:00
|
|
|
if (message.senderId?.eq(this.instance.botMe.id)) return true;
|
2022-03-07 10:05:14 +00:00
|
|
|
const pair = this.instance.forwardPairs.find(message.chat);
|
2022-03-05 09:58:07 +00:00
|
|
|
if (!pair) return false;
|
2022-03-13 05:57:45 +00:00
|
|
|
const qqMessagesSent = await this.forwardService.forwardFromTelegram(message, pair);
|
2022-03-05 04:27:49 +00:00
|
|
|
// 返回的信息不太够
|
2022-03-13 05:57:45 +00:00
|
|
|
if (qqMessagesSent) {
|
2022-03-05 04:27:49 +00:00
|
|
|
// 更新数据库
|
2022-03-13 05:57:45 +00:00
|
|
|
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,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
2022-03-05 04:27:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
this.log.error('处理 Telegram 消息时遇到问题', e);
|
2022-02-24 10:27:06 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|