import fs from 'fs' import { BaseEvent } from '@/application/base/baseEvent' import { SocketEvent } from '@/application/enums' import Storage from '@/application/storage' import type { UUID } from '@/application/types' import SpriteRepository from '@/repositories/spriteRepository' type Payload = { id: UUID } export default class GMSpriteDeleteEvent extends BaseEvent { public listen(): void { this.socket.on(SocketEvent.GM_SPRITE_DELETE, this.handleEvent.bind(this)) } private async handleEvent(data: Payload, callback: (response: boolean) => void): Promise { try { if (!(await this.isCharacterGM())) return await this.deleteSpriteFolder(data.id) const spriteRepository = new SpriteRepository() await (await spriteRepository.getById(data.id))?.delete() this.logger.info(`Sprite ${data.id} deleted.`) return callback(true) } catch (error: any) { this.logger.error('gm:sprite:delete error', error.message) return callback(false) } } private async deleteSpriteFolder(spriteId: string): Promise { const finalFilePath = Storage.getPublicPath('sprites', spriteId) if (fs.existsSync(finalFilePath)) { await fs.promises.rmdir(finalFilePath, { recursive: true }) } } }