diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts new file mode 100644 index 0000000..278a549 --- /dev/null +++ b/src/controllers/FileController.ts @@ -0,0 +1,40 @@ +import Telegram from '../client/Telegram'; +import OicqClient from '../client/OicqClient'; +import { Api } from 'telegram'; +import db from '../providers/db'; +import { Button } from 'telegram/tl/custom/button'; +import { getLogger } from 'log4js'; + +const GET_FILE_REGEX = /^\/start file-(\d+)$/; + +export default class FileController { + private readonly log = getLogger('FileController'); + + constructor(private readonly tgBot: Telegram, + private readonly oicq: OicqClient) { + tgBot.addNewMessageEventHandler(this.onTelegramMessage); + } + + private onTelegramMessage = async (message: Api.Message) => { + if (!message.isPrivate || !message.message) return false; + if (!GET_FILE_REGEX.test(message.message)) return false; + const id = Number(GET_FILE_REGEX.exec(message.message)[1]); + try { + const fileInfo = await db.file.findFirst({ + where: { id }, + }); + const downloadUrl = await this.oicq.getChat(Number(fileInfo.roomId)).getFileUrl(fileInfo.fileId); + await message.reply({ + message: fileInfo.info, + buttons: Button.url('⏬下载', downloadUrl), + }); + } + catch (e) { + this.log.error('获取文件下载地址失败', e); + await message.reply({ + message: `获取文件下载地址失败:${e.message}\n${e}`, + }); + } + return true; + }; +} diff --git a/src/controllers/ForwardController.ts b/src/controllers/ForwardController.ts index c990d57..be28c82 100644 --- a/src/controllers/ForwardController.ts +++ b/src/controllers/ForwardController.ts @@ -34,7 +34,7 @@ export default class ForwardController { await db.message.create({ data: { qqRoomId: pair.qqRoomId, - qqSenderId: event.sender.user_id, + qqSenderId: event.user_id, time: event.time, brief: event.raw_message, seq: event.seq, diff --git a/src/index.ts b/src/index.ts index 9050de7..05a524a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import SetupController from './controllers/SetupController'; import OicqClient from './client/OicqClient'; import ConfigController from './controllers/ConfigController'; import ForwardController from './controllers/ForwardController'; +import FileController from './controllers/FileController'; (async () => { configure({ @@ -49,4 +50,5 @@ import ForwardController from './controllers/ForwardController'; } new ConfigController(tgBot, tgUser, oicq); new ForwardController(tgBot, tgUser, oicq); + new FileController(tgBot, oicq); })(); diff --git a/src/services/ForwardService.ts b/src/services/ForwardService.ts index af24d85..4fcb56c 100644 --- a/src/services/ForwardService.ts +++ b/src/services/ForwardService.ts @@ -100,7 +100,7 @@ export default class ForwardService { const dbEntry = await db.file.create({ data: { fileId: elem.fid, roomId: pair.qqRoomId, info: message }, }); - button = Button.url('⏬ 获取下载地址', + button = Button.url('⏬获取下载地址', `https://t.me/${this.tgBot.me.username}?start=file-${dbEntry.id}`); } break;