import { getLogger, Logger } from 'log4js'; import Instance from '../models/Instance'; import Telegram from '../client/Telegram'; import OicqClient from '../client/OicqClient'; import { FriendRequestEvent, GroupInviteEvent } from 'icqq'; import { getAvatar } from '../utils/urls'; import { CustomFile } from 'telegram/client/uploads'; import { Button } from 'telegram/tl/custom/button'; export default class RequestController { private readonly log: Logger; constructor(private readonly instance: Instance, private readonly tgBot: Telegram, private readonly oicq: OicqClient) { this.log = getLogger(`RequestController - ${instance.id}`); oicq.on('request.friend', this.handleRequest); oicq.on('request.group.invite', this.handleRequest); } private handleRequest = async (event: FriendRequestEvent | GroupInviteEvent) => { this.log.info(`收到申请:${event.nickname} (${event.user_id})`); const avatar = await getAvatar(event.user_id); let messageText = ''; if (event.request_type === 'friend') { messageText = `收到好友申请\n` + `昵称:${event.nickname}\n` + `账号:${event.user_id}\n` + `年龄:${event.age}\n` + `性别:${event.sex}\n` + `来源:${event.source}\n` + `附言:${event.comment}`; } else { messageText = `收到加群邀请\n` + `邀请人:${event.nickname} (${event.user_id})\n` + `群名称:${event.group_name}\n` + `群号:${event.group_id}\n` + `邀请者身份:${event.role}`; } const message = await this.instance.ownerChat.sendMessage({ file: new CustomFile('avatar.png', avatar.length, '', avatar), message: messageText, buttons: [[ Button.inline('同意', this.tgBot.registerCallback(async () => { try { if (!await event.approve(true)) { await message.edit({ text: '同意失败', buttons: Button.clear() }); } } catch (e) { await message.edit({ text: `同意失败:${e.message}`, buttons: Button.clear() }); } await message.edit({ text: '已同意请求', buttons: Button.clear() }); })), Button.inline('拒绝', this.tgBot.registerCallback(async () => { try { if (!await event.approve(false)) { await message.edit({ text: '拒绝失败', buttons: Button.clear() }); } } catch (e) { await message.edit({ text: `拒绝失败:${e.message}`, buttons: Button.clear() }); } await message.edit({ text: '已拒绝请求', buttons: Button.clear() }); })), ]], }); }; }