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

@@ -2,12 +2,9 @@ const Constants = require('../util/Constants');
const Util = require('../util/Util'); const Util = require('../util/Util');
const Guild = require('../structures/Guild'); const Guild = require('../structures/Guild');
const User = require('../structures/User'); const User = require('../structures/User');
const DMChannel = require('../structures/DMChannel'); const Channel = require('../structures/Channel');
const Emoji = require('../structures/Emoji');
const TextChannel = require('../structures/TextChannel');
const VoiceChannel = require('../structures/VoiceChannel');
const GuildChannel = require('../structures/GuildChannel'); const GuildChannel = require('../structures/GuildChannel');
const GroupDMChannel = require('../structures/GroupDMChannel'); const Emoji = require('../structures/Emoji');
class ClientDataManager { class ClientDataManager {
constructor(client) { constructor(client) {
@@ -47,23 +44,7 @@ class ClientDataManager {
newChannel(data, guild) { newChannel(data, guild) {
const already = this.client.channels.has(data.id); const already = this.client.channels.has(data.id);
let channel; const channel = Channel.create(this.client, data, guild);
if (data.type === Constants.ChannelTypes.DM) {
channel = new DMChannel(this.client, data);
} else if (data.type === Constants.ChannelTypes.GROUP_DM) {
channel = new GroupDMChannel(this.client, data);
} else {
guild = guild || this.client.guilds.get(data.guild_id);
if (guild) {
if (data.type === Constants.ChannelTypes.TEXT) {
channel = new TextChannel(guild, data);
guild.channels.set(channel.id, channel);
} else if (data.type === Constants.ChannelTypes.VOICE) {
channel = new VoiceChannel(guild, data);
guild.channels.set(channel.id, channel);
}
}
}
if (channel) { if (channel) {
if (this.pastReady && !already) this.client.emit(Constants.Events.CHANNEL_CREATE, channel); if (this.pastReady && !already) this.client.emit(Constants.Events.CHANNEL_CREATE, channel);

View File

@@ -1,4 +1,5 @@
const Snowflake = require('../util/Snowflake'); const Snowflake = require('../util/Snowflake');
const Constants = require('../util/Constants');
/** /**
* Represents any channel on Discord. * Represents any channel on Discord.
@@ -13,15 +14,17 @@ class Channel {
*/ */
Object.defineProperty(this, 'client', { value: client }); Object.defineProperty(this, 'client', { value: client });
const type = Object.keys(Constants.ChannelTypes)[data.type];
/** /**
* The type of the channel, either: * The type of the channel, either:
* * `dm` - a DM channel * * `dm` - a DM channel
* * `group` - a Group DM channel * * `group` - a Group DM channel
* * `text` - a guild text channel * * `text` - a guild text channel
* * `voice` - a guild voice channel * * `voice` - a guild voice channel
* * `unknown` - a generic channel of unknown type, could be Channel or GuildChannel
* @type {string} * @type {string}
*/ */
this.type = null; this.type = type ? type.toLowerCase() : 'unknown';
if (data) this.setup(data); if (data) this.setup(data);
} }
@@ -64,6 +67,37 @@ class Channel {
delete() { delete() {
return this.client.api.channels(this.id).delete().then(() => this); 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; module.exports = Channel;

View File

@@ -10,7 +10,6 @@ const Collection = require('../util/Collection');
class DMChannel extends Channel { class DMChannel extends Channel {
constructor(client, data) { constructor(client, data) {
super(client, data); super(client, data);
this.type = 'dm';
this.messages = new Collection(); this.messages = new Collection();
this._typing = new Map(); this._typing = new Map();
} }

View File

@@ -33,7 +33,6 @@ const Constants = require('../util/Constants');
class GroupDMChannel extends Channel { class GroupDMChannel extends Channel {
constructor(client, data) { constructor(client, data) {
super(client, data); super(client, data);
this.type = 'group';
this.messages = new Collection(); this.messages = new Collection();
this._typing = new Map(); this._typing = new Map();
} }

View File

@@ -960,7 +960,9 @@ class Guild {
return this.client.api.guilds(this.id).channels.post({ return this.client.api.guilds(this.id).channels.post({
data: { data: {
name, type, permission_overwrites: overwrites, name,
type: Constants.ChannelTypes[type.toUpperCase()],
permission_overwrites: overwrites,
}, },
reason, reason,
}).then(data => this.client.actions.ChannelCreate.handle(data).channel); }).then(data => this.client.actions.ChannelCreate.handle(data).channel);

View File

@@ -15,8 +15,6 @@ class VoiceChannel extends GuildChannel {
* @type {Collection<Snowflake, GuildMember>} * @type {Collection<Snowflake, GuildMember>}
*/ */
this.members = new Collection(); this.members = new Collection();
this.type = 'voice';
} }
setup(data) { setup(data) {

View File

@@ -173,7 +173,7 @@ exports.ChannelTypes = {
TEXT: 0, TEXT: 0,
DM: 1, DM: 1,
VOICE: 2, VOICE: 2,
GROUP_DM: 3, GROUP: 3,
}; };
exports.OPCodes = { exports.OPCodes = {