diff --git a/src/client/actions/ActionsManager.js b/src/client/actions/ActionsManager.js index d43e82163..eaad74eb0 100644 --- a/src/client/actions/ActionsManager.js +++ b/src/client/actions/ActionsManager.js @@ -10,6 +10,7 @@ class ActionsManager { this.register('MessageDelete'); this.register('MessageUpdate'); this.register('ChannelCreate'); + this.register('ChannelDelete'); } register(name) { diff --git a/src/client/actions/ChannelDelete.js b/src/client/actions/ChannelDelete.js new file mode 100644 index 000000000..2c07e0019 --- /dev/null +++ b/src/client/actions/ChannelDelete.js @@ -0,0 +1,27 @@ +'use strict'; + +const Action = require('./Action'); +const Constants = require('../../util/Constants'); +const Message = require('../../structures/Message'); + +class ChannelDeleteAction extends Action { + + constructor(client) { + super(client); + } + + handle(data) { + let client = this.client; + let channel = client.store.get('channels', data.id); + + if (channel) { + client.store.KillChannel(channel); + } + + return { + channel, + }; + } +}; + +module.exports = ChannelDeleteAction; diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 8bbb6e579..20e3094bb 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -85,6 +85,17 @@ class RESTMethods{ .catch(reject); }); } + + DeleteChannel(channel) { + return new Promise((resolve, reject) => { + this.rest.makeRequest('del', Constants.Endpoints.CHANNEL(channel.id), true) + .then(data => { + data.id = channel.id; + resolve(this.rest.client.actions.ChannelDelete.handle(data).channel); + }) + .catch(reject); + }); + } } module.exports = RESTMethods; diff --git a/src/client/websocket/packets/handlers/ChannelDelete.js b/src/client/websocket/packets/handlers/ChannelDelete.js index e94d052a0..8a171dc43 100644 --- a/src/client/websocket/packets/handlers/ChannelDelete.js +++ b/src/client/websocket/packets/handlers/ChannelDelete.js @@ -19,10 +19,10 @@ class ChannelDeleteHandler extends AbstractHandler { let data = packet.d; let client = this.packetManager.client; - let channel = client.store.get('channels', data.id); + let response = client.actions.ChannelCreate.handle(data); - if (channel) { - client.store.KillChannel(channel); + if (response.channel) { + client.emit(Constants.Events.CHANNEL_DELETE, response.channel); } } diff --git a/src/structures/Channel.js b/src/structures/Channel.js index 8dc22316f..d6c3a9822 100644 --- a/src/structures/Channel.js +++ b/src/structures/Channel.js @@ -17,6 +17,10 @@ class Channel { setup(data) { this.id = data.id; } + + delete() { + return this.client.rest.methods.DeleteChannel(this); + } } module.exports = Channel; diff --git a/src/structures/datastore/ClientDataStore.js b/src/structures/datastore/ClientDataStore.js index 8cae0c97e..d74681891 100644 --- a/src/structures/datastore/ClientDataStore.js +++ b/src/structures/datastore/ClientDataStore.js @@ -87,10 +87,6 @@ class ClientDataStore extends AbstractDataStore{ if (channel instanceof ServerChannel) { channel.guild.store.remove('channels', channel); } - - if (already && this.pastReady) { - this.client.emit(Constants.Events.CHANNEL_DELETE, channel); - } } UpdateGuild(currentGuild, newData) { diff --git a/test/random.js b/test/random.js index 8d6d8a859..b8778a521 100644 --- a/test/random.js +++ b/test/random.js @@ -23,7 +23,7 @@ client.on('channelCreate', channel => { // console.log(channel); }); client.on('channelDelete', channel => { - console.log(channel); + console.log('channDel', channel); }); client.on('channelUpdate', (old, chan) => { @@ -75,6 +75,10 @@ client.on('message', message => { message.channel.guild.createChannel('hi', 'text').then(console.log); } } + + if (message.content === 'delchann') { + message.channel.delete(); + } } });