diff --git a/src/client/actions/ActionsManager.js b/src/client/actions/ActionsManager.js index 0bfc0cc47..d43e82163 100644 --- a/src/client/actions/ActionsManager.js +++ b/src/client/actions/ActionsManager.js @@ -9,6 +9,7 @@ class ActionsManager { this.register('MessageCreate'); this.register('MessageDelete'); this.register('MessageUpdate'); + this.register('ChannelCreate'); } register(name) { diff --git a/src/client/actions/ChannelCreate.js b/src/client/actions/ChannelCreate.js new file mode 100644 index 000000000..53c1d4325 --- /dev/null +++ b/src/client/actions/ChannelCreate.js @@ -0,0 +1,23 @@ +'use strict'; + +const Action = require('./Action'); +const Constants = require('../../util/Constants'); +const Message = require('../../structures/Message'); + +class ChannelCreateAction extends Action { + + constructor(client) { + super(client); + } + + handle(data) { + let client = this.client; + let channel = client.store.NewChannel(data); + + return { + channel, + }; + } +}; + +module.exports = ChannelCreateAction; diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 827861073..8bbb6e579 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -72,6 +72,19 @@ class RESTMethods{ .catch(reject); }); } + + CreateChannel(guild, channelName, channelType) { + return new Promise((resolve, reject) => { + this.rest.makeRequest('post', Constants.Endpoints.GUILD_CHANNELS(guild.id), true, { + name: channelName, + type: channelType, + }) + .then(data => { + resolve(this.rest.client.actions.ChannelCreate.handle(data).channel); + }) + .catch(reject); + }); + } } module.exports = RESTMethods; diff --git a/src/client/websocket/packets/handlers/ChannelCreate.js b/src/client/websocket/packets/handlers/ChannelCreate.js index d938be358..100b02785 100644 --- a/src/client/websocket/packets/handlers/ChannelCreate.js +++ b/src/client/websocket/packets/handlers/ChannelCreate.js @@ -19,7 +19,11 @@ class ChannelCreateHandler extends AbstractHandler { let data = packet.d; let client = this.packetManager.client; - let channel = client.store.NewChannel(data); + let response = client.actions.ChannelCreate.handle(data); + + if (response.channel) { + client.emit(Constants.Events.CHANNEL_CREATE, response.channel); + } } diff --git a/src/structures/Guild.js b/src/structures/Guild.js index 766cc6955..566f3be0b 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -131,6 +131,10 @@ class Guild { } } + createChannel(name, type) { + return this.client.rest.methods.CreateChannel(this, name, type); + } + get channels() { return this.store.getAsArray('channels'); } get $channels() { return this.store.data.channels; } diff --git a/test/random.js b/test/random.js index 915185a7e..8d6d8a859 100644 --- a/test/random.js +++ b/test/random.js @@ -20,7 +20,7 @@ client.on('guildUpdate', (old, guild) => { console.log(old.name, guild.name); }); client.on('channelCreate', channel => { - console.log(channel); + // console.log(channel); }); client.on('channelDelete', channel => { console.log(channel); @@ -70,9 +70,11 @@ client.on('typingStop.', (channel, user, data) => { client.on('message', message => { if (message.author.username === 'hydrabolt') { - message.channel.sendMessage('test').then(msg => { - msg.edit('woah!'); - }); + if (message.content === 'makechann') { + if (message.channel.guild) { + message.channel.guild.createChannel('hi', 'text').then(console.log); + } + } } });