2022-02-24 10:27:06 +00:00
|
|
|
import Telegram from '../client/Telegram';
|
|
|
|
import OicqClient from '../client/OicqClient';
|
|
|
|
import ForwardService from '../services/ForwardService';
|
|
|
|
import forwardPairs from '../providers/forwardPairs';
|
|
|
|
import { DiscussMessageEvent, Friend, Group, GroupMessageEvent, PrivateMessageEvent } from 'oicq';
|
|
|
|
import db from '../providers/db';
|
|
|
|
import helper from '../helpers/forwardHelper';
|
2022-02-26 10:15:40 +00:00
|
|
|
import { Api } from 'telegram';
|
2022-02-24 10:27:06 +00:00
|
|
|
|
|
|
|
export default class ForwardController {
|
|
|
|
private readonly forwardService: ForwardService;
|
|
|
|
|
|
|
|
constructor(private readonly tgBot: Telegram,
|
|
|
|
private readonly tgUser: Telegram,
|
|
|
|
private readonly oicq: OicqClient) {
|
|
|
|
this.forwardService = new ForwardService(tgBot, oicq);
|
|
|
|
forwardPairs.init(oicq, tgBot)
|
2022-02-26 10:15:40 +00:00
|
|
|
.then(() => oicq.on('message', this.onQqMessage))
|
|
|
|
.then(() => tgBot.addNewMessageEventHandler(this.onTelegramMessage));
|
2022-02-24 10:27:06 +00:00
|
|
|
}
|
|
|
|
|
2022-02-26 10:15:40 +00:00
|
|
|
private onQqMessage = async (event: PrivateMessageEvent | GroupMessageEvent | DiscussMessageEvent) => {
|
2022-02-24 10:27:06 +00:00
|
|
|
let target: Friend | Group;
|
|
|
|
if (event.message_type === 'private') {
|
|
|
|
target = event.friend;
|
|
|
|
}
|
|
|
|
else if (event.message_type === 'group') {
|
|
|
|
target = event.group;
|
|
|
|
}
|
|
|
|
else return;
|
|
|
|
const pair = forwardPairs.find(target);
|
|
|
|
if (!pair) return;
|
2022-02-26 10:15:40 +00:00
|
|
|
const tgMessage = await this.forwardService.forwardFromQq(event, pair);
|
|
|
|
if (tgMessage) {
|
2022-02-24 10:27:06 +00:00
|
|
|
// 更新数据库
|
|
|
|
await db.message.create({
|
|
|
|
data: {
|
|
|
|
qqRoomId: helper.getRoomId(pair.qq),
|
|
|
|
qqSenderId: event.sender.user_id,
|
|
|
|
time: event.time,
|
|
|
|
brief: event.raw_message,
|
|
|
|
seq: event.seq,
|
|
|
|
rand: event.rand,
|
|
|
|
pktnum: event.pktnum,
|
|
|
|
tgChatId: Number(pair.tg.id),
|
2022-02-26 10:15:40 +00:00
|
|
|
tgMsgId: tgMessage.id,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
private onTelegramMessage = async (message: Api.Message) => {
|
|
|
|
const pair = forwardPairs.find(message.chat);
|
|
|
|
if (!pair) return;
|
|
|
|
const qqMessageSent = await this.forwardService.forwardFromTelegram(message, pair);
|
|
|
|
// 返回的信息不太够
|
|
|
|
const qqMessage = await this.oicq.getMsg(qqMessageSent.message_id);
|
|
|
|
if (qqMessage) {
|
|
|
|
// 更新数据库
|
|
|
|
await db.message.create({
|
|
|
|
data: {
|
|
|
|
qqRoomId: helper.getRoomId(pair.qq),
|
|
|
|
qqSenderId: qqMessage.sender.user_id,
|
|
|
|
time: qqMessage.time,
|
|
|
|
brief: qqMessage.raw_message,
|
|
|
|
seq: qqMessage.seq,
|
|
|
|
rand: qqMessage.rand,
|
|
|
|
pktnum: qqMessage.pktnum,
|
|
|
|
tgChatId: Number(pair.tg.id),
|
|
|
|
tgMsgId: message.id,
|
2022-02-24 10:27:06 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|