channel stuff (#1775)

* channel stuff

* abstract channel creation

* Update Channel.js

* Update Channel.js

* Update Channel.js

* Update Guild.js

* Update Constants.js

* e
This commit is contained in:
Gus Caplan
2017-08-13 04:57:25 -07:00
committed by Crawl
parent b2c7fcb603
commit 57977b063e
7 changed files with 42 additions and 29 deletions

View File

@@ -1,4 +1,5 @@
const Snowflake = require('../util/Snowflake');
const Constants = require('../util/Constants');
/**
* Represents any channel on Discord.
@@ -13,15 +14,17 @@ class Channel {
*/
Object.defineProperty(this, 'client', { value: client });
const type = Object.keys(Constants.ChannelTypes)[data.type];
/**
* The type of the channel, either:
* * `dm` - a DM channel
* * `group` - a Group DM channel
* * `text` - a guild text channel
* * `voice` - a guild voice channel
* * `unknown` - a generic channel of unknown type, could be Channel or GuildChannel
* @type {string}
*/
this.type = null;
this.type = type ? type.toLowerCase() : 'unknown';
if (data) this.setup(data);
}
@@ -64,6 +67,37 @@ class Channel {
delete() {
return this.client.api.channels(this.id).delete().then(() => this);
}
static create(client, data, guild) {
const DMChannel = require('./DMChannel');
const GroupDMChannel = require('./GroupDMChannel');
const TextChannel = require('./TextChannel');
const VoiceChannel = require('./VoiceChannel');
const GuildChannel = require('./GuildChannel');
const types = Constants.ChannelTypes;
let channel;
if (data.type === types.DM) {
channel = new DMChannel(client, data);
} else if (data.type === types.GROUP) {
channel = new GroupDMChannel(client, data);
} else {
guild = guild || client.guilds.get(data.guild_id);
if (guild) {
switch (data.type) {
case types.TEXT:
channel = new TextChannel(guild, data);
break;
case types.VOICE:
channel = new VoiceChannel(guild, data);
break;
default:
channel = new GuildChannel(guild, data);
}
guild.channels.set(channel.id, channel);
}
}
return channel;
}
}
module.exports = Channel;