From 0b6f647058c31456078a47d8cdd90b1e4f31d344 Mon Sep 17 00:00:00 2001 From: Corey Skapin Date: Thu, 12 May 2022 12:30:17 +0930 Subject: [PATCH] fix: delete all typed commands when deleteMessages is set --- src/bot/MessageHandler.ts | 16 ++++++++++++--- src/bot/SoundBot.ts | 2 +- src/queue/SoundQueue.ts | 41 +-------------------------------------- 3 files changed, 15 insertions(+), 44 deletions(-) diff --git a/src/bot/MessageHandler.ts b/src/bot/MessageHandler.ts index b670bd5f..860b08a1 100644 --- a/src/bot/MessageHandler.ts +++ b/src/bot/MessageHandler.ts @@ -16,13 +16,13 @@ export default class MessageHandler { this.commands = commands; } - public handle(message: Message) { + public handle(message: Message, deleteMessages?: boolean) { if (!this.isValidMessage(message)) return; const messageToHandle = message; messageToHandle.content = message.content.substring(config.prefix.length); - this.execute(messageToHandle); + this.execute(messageToHandle, deleteMessages); } private isValidMessage(message: Message) { @@ -34,7 +34,7 @@ export default class MessageHandler { ); } - private execute(message: Message) { + private execute(message: Message, deleteMessages?: boolean) { const [command, ...params] = message.content.split(' '); const commandToRun = this.commands.get(command); @@ -44,5 +44,15 @@ export default class MessageHandler { } commandToRun.run(message, params); + + if (deleteMessages && !message.deleted && !this.wasMessageAlreadyDeleted(message)) { + message.delete(); + } + } + + private wasMessageAlreadyDeleted(message: Message) { + if (!message) return false; + + return message.channel.messages.cache.find(msg => msg.id === message.id) === null; } } diff --git a/src/bot/SoundBot.ts b/src/bot/SoundBot.ts index c6fa617b..749fd1bf 100644 --- a/src/bot/SoundBot.ts +++ b/src/bot/SoundBot.ts @@ -86,7 +86,7 @@ export default class SoundBot extends Client { } private onMessage(message: Message) { - this.messageHandler.handle(message); + this.messageHandler.handle(message, this.config.deleteMessages); } private onBotJoinsServer(guild: Guild) { diff --git a/src/queue/SoundQueue.ts b/src/queue/SoundQueue.ts index 6fc84156..20461d31 100644 --- a/src/queue/SoundQueue.ts +++ b/src/queue/SoundQueue.ts @@ -1,4 +1,4 @@ -import { Message, StreamDispatcher, VoiceConnection } from 'discord.js'; +import { StreamDispatcher, VoiceConnection } from 'discord.js'; import Config from '~/config/Config'; import * as sounds from '~/util/db/Sounds'; @@ -38,7 +38,6 @@ export default class SoundQueue { public clear() { if (!this.currentSound) return; - if (this.config.deleteMessages) this.deleteMessages(); // Prevent further looping this.currentSound.count = 0; @@ -49,23 +48,6 @@ export default class SoundQueue { return !this.currentSound; } - private deleteMessages() { - if (!this.currentSound) return; - if (this.isEmpty()) return; - - let deleteableMessages = this.queue - .map(item => item.message) - .filter((message): message is Message => !!message); - - const { message: currentMessage } = this.currentSound; - if (currentMessage) { - deleteableMessages = deleteableMessages.filter(msg => msg.id !== currentMessage.id); - } - - // Do not try to delete the same sound multiple times (!combo) - Array.from(new Set(deleteableMessages)).forEach(message => message.delete()); - } - private async playNext() { this.currentSound = this.queue.shift()!; const sound = getPathForSound(this.currentSound.name); @@ -104,8 +86,6 @@ export default class SoundQueue { if (count > 1) { this.add(new QueueItem(name, channel, message, count - 1)); - } else { - this.deleteCurrentMessage(); } this.currentSound = null; @@ -136,26 +116,7 @@ export default class SoundQueue { this.dispatcher = null; } - private deleteCurrentMessage() { - if (!this.config.deleteMessages) return; - if (!this.currentSound || !this.currentSound.message) return; - if (!this.isLastSoundFromCurrentMessage(this.currentSound.message)) return; - if (this.wasMessageAlreadyDeleted(this.currentSound.message)) return; - - this.currentSound.message.delete(); - } - private isEmpty() { return this.queue.length === 0; } - - private wasMessageAlreadyDeleted(message: Message) { - if (!message) return false; - - return message.channel.messages.cache.find(msg => msg.id === message.id) === null; - } - - private isLastSoundFromCurrentMessage(message: Message) { - return !this.queue.some(item => !!item.message && item.message.id === message.id); - } }