From d437fd31cf64400284dec5b8b44fc42de0979c82 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Mon, 18 Apr 2016 18:06:31 +0100 Subject: [PATCH] MessageDelete handling --- .../packets/WebSocketPacketManager.js | 1 + .../packets/handlers/MessageDelete.js | 32 +++++++++++++++++++ src/structures/DMChannel.js | 3 +- src/structures/Message.js | 1 + src/structures/TextChannel.js | 3 +- src/util/Constants.js | 1 + test/random.js | 5 +++ 7 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/client/websocket/packets/handlers/MessageDelete.js diff --git a/src/client/websocket/packets/WebSocketPacketManager.js b/src/client/websocket/packets/WebSocketPacketManager.js index d3c2d0ca6..1cfeb9362 100644 --- a/src/client/websocket/packets/WebSocketPacketManager.js +++ b/src/client/websocket/packets/WebSocketPacketManager.js @@ -38,6 +38,7 @@ class WebSocketPacketManager { this.register(Constants.WSEvents.VOICE_STATE_UPDATE, 'VoiceStateUpdate'); this.register(Constants.WSEvents.TYPING_START, 'TypingStart'); this.register(Constants.WSEvents.MESSAGE_CREATE, 'MessageCreate'); + this.register(Constants.WSEvents.MESSAGE_DELETE, 'MessageDelete'); } get client() { diff --git a/src/client/websocket/packets/handlers/MessageDelete.js b/src/client/websocket/packets/handlers/MessageDelete.js new file mode 100644 index 000000000..43944fcbc --- /dev/null +++ b/src/client/websocket/packets/handlers/MessageDelete.js @@ -0,0 +1,32 @@ +'use strict'; + +const AbstractHandler = require('./AbstractHandler'); +const Structure = name => require(`../../../../structures/${name}`); +const Constants = require('../../../../util/Constants'); + +const Message = Structure('Message'); +const Guild = Structure('Guild'); + +class MessageDeleteHandler extends AbstractHandler { + + constructor(packetManager) { + super(packetManager); + } + + handle(packet) { + let data = packet.d; + let client = this.packetManager.client; + let channel = client.store.get('channels', data.channel_id); + if (channel) { + let message = channel.store.get('messages', data.id); + if (message) { + channel.store.remove('messages', message.id); + client.emit(Constants.Events.MESSAGE_DELETE, message); + } + } + + } + +}; + +module.exports = MessageDeleteHandler; diff --git a/src/structures/DMChannel.js b/src/structures/DMChannel.js index b1bdd92c7..f755c3b87 100644 --- a/src/structures/DMChannel.js +++ b/src/structures/DMChannel.js @@ -20,8 +20,9 @@ class DMChannel extends Channel{ let storeKeys = Object.keys(this.store); if (storeKeys.length >= maxSize) { this.store.remove(storeKeys[0]); - this.store.add('messages', message); } + + this.store.add('messages', message); } setup(data) { diff --git a/src/structures/Message.js b/src/structures/Message.js index 1da8cf9bc..8f600f929 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -20,6 +20,7 @@ class Message { this.embeds = data.embeds; this.attachments = data.attachments; this.mentions = []; + this.id = data.id; for (let mention of data.mentions) { let user = this.guild.client.store.get('users', mention.id); if (user) { diff --git a/src/structures/TextChannel.js b/src/structures/TextChannel.js index c9ae55f06..eac0f45f6 100644 --- a/src/structures/TextChannel.js +++ b/src/structures/TextChannel.js @@ -20,8 +20,9 @@ class TextChannel extends ServerChannel { let storeKeys = Object.keys(this.store); if (storeKeys.length >= maxSize) { this.store.remove(storeKeys[0]); - this.store.add('messages', message); } + + this.store.add('messages', message); } } diff --git a/src/util/Constants.js b/src/util/Constants.js index abbf2c6a2..ad5713e18 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -100,6 +100,7 @@ const Events = exports.Events = { WARN: 'warn', GUILD_MEMBERS_CHUNK: 'guildMembersChunk', MESSAGE_CREATE: 'message', + MESSAGE_DELETE: 'messageDelete', }; const WSEvents = exports.WSEvents = { diff --git a/test/random.js b/test/random.js index f8df05a74..54fde3c24 100644 --- a/test/random.js +++ b/test/random.js @@ -68,5 +68,10 @@ client.on('typingStop.', (channel, user, data) => { }); client.on('message', message => { + if (message.author.username === 'hydrabolt') console.log(message.author.username, 'said', message.content, 'in', message.channel.name); }); + +client.on('messageDelete', message => { + console.log('Message deleted by', message.author.username); +});