mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 08:33:30 +01:00
113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
const Constants = require('../util/Constants');
|
|
const Util = require('../util/Util');
|
|
const Guild = require('../structures/Guild');
|
|
const User = require('../structures/User');
|
|
const Channel = require('../structures/Channel');
|
|
const GuildChannel = require('../structures/GuildChannel');
|
|
const Emoji = require('../structures/Emoji');
|
|
|
|
class ClientDataManager {
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
|
|
get pastReady() {
|
|
return this.client.ws.connection.status === Constants.Status.READY;
|
|
}
|
|
|
|
newGuild(data) {
|
|
const already = this.client.guilds.has(data.id);
|
|
const guild = new Guild(this.client, data);
|
|
this.client.guilds.set(guild.id, guild);
|
|
if (!this.client.user.bot && this.client.options.sync) this.client.syncGuilds([guild]);
|
|
if (this.pastReady && !already) {
|
|
/**
|
|
* Emitted whenever the client joins a guild.
|
|
* @event Client#guildCreate
|
|
* @param {Guild} guild The created guild
|
|
*/
|
|
if (this.client.options.fetchAllMembers) {
|
|
guild.fetchMembers().then(() => { this.client.emit(Constants.Events.GUILD_CREATE, guild); });
|
|
} else {
|
|
this.client.emit(Constants.Events.GUILD_CREATE, guild);
|
|
}
|
|
}
|
|
|
|
return guild;
|
|
}
|
|
|
|
newUser(data) {
|
|
if (this.client.users.has(data.id)) return this.client.users.get(data.id);
|
|
const user = new User(this.client, data);
|
|
this.client.users.set(user.id, user);
|
|
return user;
|
|
}
|
|
|
|
newChannel(data, guild) {
|
|
const already = this.client.channels.has(data.id);
|
|
const channel = Channel.create(this.client, data, guild);
|
|
|
|
if (channel) {
|
|
if (this.pastReady && !already) this.client.emit(Constants.Events.CHANNEL_CREATE, channel);
|
|
this.client.channels.set(channel.id, channel);
|
|
return channel;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
newEmoji(data, guild) {
|
|
const already = guild.emojis.has(data.id);
|
|
if (data && !already) {
|
|
let emoji = new Emoji(guild, data);
|
|
this.client.emit(Constants.Events.GUILD_EMOJI_CREATE, emoji);
|
|
guild.emojis.set(emoji.id, emoji);
|
|
return emoji;
|
|
} else if (already) {
|
|
return guild.emojis.get(data.id);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
killEmoji(emoji) {
|
|
if (!(emoji instanceof Emoji && emoji.guild)) return;
|
|
this.client.emit(Constants.Events.GUILD_EMOJI_DELETE, emoji);
|
|
emoji.guild.emojis.delete(emoji.id);
|
|
}
|
|
|
|
killGuild(guild) {
|
|
const already = this.client.guilds.has(guild.id);
|
|
this.client.guilds.delete(guild.id);
|
|
if (already && this.pastReady) this.client.emit(Constants.Events.GUILD_DELETE, guild);
|
|
}
|
|
|
|
killUser(user) {
|
|
this.client.users.delete(user.id);
|
|
}
|
|
|
|
killChannel(channel) {
|
|
this.client.channels.delete(channel.id);
|
|
if (channel instanceof GuildChannel) channel.guild.channels.delete(channel.id);
|
|
}
|
|
|
|
updateGuild(currentGuild, newData) {
|
|
const oldGuild = Util.cloneObject(currentGuild);
|
|
currentGuild.setup(newData);
|
|
if (this.pastReady) this.client.emit(Constants.Events.GUILD_UPDATE, oldGuild, currentGuild);
|
|
}
|
|
|
|
updateChannel(currentChannel, newData) {
|
|
currentChannel.setup(newData);
|
|
}
|
|
|
|
updateEmoji(currentEmoji, newData) {
|
|
const oldEmoji = Util.cloneObject(currentEmoji);
|
|
currentEmoji.setup(newData);
|
|
this.client.emit(Constants.Events.GUILD_EMOJI_UPDATE, oldEmoji, currentEmoji);
|
|
return currentEmoji;
|
|
}
|
|
}
|
|
|
|
module.exports = ClientDataManager;
|