import fs from 'fs' import type { UUID } from '#application/types' import { BaseEvent } from '#application/base/baseEvent' import Storage from '#application/storage' import SpriteRepository from '#repositories/spriteRepository' type Payload = { id: UUID } export default class GMSpriteDeleteEvent extends BaseEvent { public listen(): void { this.socket.on('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 }) } } }