summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/managers/GuildManager.js
diff options
context:
space:
mode:
author8cy <[email protected]>2020-04-30 15:46:16 -0700
committer8cy <[email protected]>2020-04-30 15:46:16 -0700
commit3a4deac89054021b56ad5bd8005b2044cc085c98 (patch)
tree3dd6af8503e497e46180b6b5231674f36bdce9f2 /node_modules/discord.js/src/managers/GuildManager.js
downloaduppity-3a4deac89054021b56ad5bd8005b2044cc085c98.tar.xz
uppity-3a4deac89054021b56ad5bd8005b2044cc085c98.zip
Up, up, uppity.
Diffstat (limited to 'node_modules/discord.js/src/managers/GuildManager.js')
-rw-r--r--node_modules/discord.js/src/managers/GuildManager.js216
1 files changed, 216 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/managers/GuildManager.js b/node_modules/discord.js/src/managers/GuildManager.js
new file mode 100644
index 0000000..42cbcd4
--- /dev/null
+++ b/node_modules/discord.js/src/managers/GuildManager.js
@@ -0,0 +1,216 @@
+'use strict';
+
+const BaseManager = require('./BaseManager');
+const Guild = require('../structures/Guild');
+const GuildChannel = require('../structures/GuildChannel');
+const GuildEmoji = require('../structures/GuildEmoji');
+const GuildMember = require('../structures/GuildMember');
+const Invite = require('../structures/Invite');
+const Role = require('../structures/Role');
+const {
+ Events,
+ VerificationLevels,
+ DefaultMessageNotifications,
+ ExplicitContentFilterLevels,
+} = require('../util/Constants');
+const DataResolver = require('../util/DataResolver');
+const Permissions = require('../util/Permissions');
+const { resolveColor } = require('../util/Util');
+
+/**
+ * Manages API methods for Guilds and stores their cache.
+ * @extends {BaseManager}
+ */
+class GuildManager extends BaseManager {
+ constructor(client, iterable) {
+ super(client, iterable, Guild);
+ }
+
+ /**
+ * The cache of this Manager
+ * @type {Collection<Snowflake, Guild>}
+ * @name GuildManager#cache
+ */
+
+ /**
+ * Data that resolves to give a Guild object. This can be:
+ * * A Guild object
+ * * A GuildChannel object
+ * * A GuildEmoji object
+ * * A Role object
+ * * A Snowflake
+ * * An Invite object
+ * @typedef {Guild|GuildChannel|GuildMember|GuildEmoji|Role|Snowflake|Invite} GuildResolvable
+ */
+
+ /**
+ * Partial data for a Role.
+ * @typedef {Object} PartialRoleData
+ * @property {number} [id] The ID for this role, used to set channel overrides,
+ * this is a placeholder and will be replaced by the API after consumption
+ * @property {string} [name] The name of the role
+ * @property {ColorResolvable} [color] The color of the role, either a hex string or a base 10 number
+ * @property {boolean} [hoist] Whether or not the role should be hoisted
+ * @property {number} [position] The position of the role
+ * @property {PermissionResolvable|number} [permissions] The permissions of the role
+ * @property {boolean} [mentionable] Whether or not the role should be mentionable
+ */
+
+ /**
+ * Partial overwrite data.
+ * @typedef {Object} PartialOverwriteData
+ * @property {number|Snowflake} id The Role or User ID for this overwrite
+ * @property {string} [type] The type of this overwrite
+ * @property {PermissionResolvable} [allow] The permissions to allow
+ * @property {PermissionResolvable} [deny] The permissions to deny
+ */
+
+ /**
+ * Partial data for a Channel.
+ * @typedef {Object} PartialChannelData
+ * @property {number} [id] The ID for this channel, used to set its parent,
+ * this is a placeholder and will be replaced by the API after consumption
+ * @property {number} [parentID] The parent ID for this channel
+ * @property {string} [type] The type of the channel
+ * @property {string} name The name of the channel
+ * @property {string} [topic] The topic of the text channel
+ * @property {boolean} [nsfw] Whether the channel is NSFW
+ * @property {number} [bitrate] The bitrate of the voice channel
+ * @property {number} [userLimit] The user limit of the channel
+ * @property {PartialOverwriteData} [permissionOverwrites]
+ * Overwrites of the channel
+ * @property {number} [rateLimitPerUser] The rate limit per user of the channel in seconds
+ */
+
+ /**
+ * Resolves a GuildResolvable to a Guild object.
+ * @method resolve
+ * @memberof GuildManager
+ * @instance
+ * @param {GuildResolvable} guild The guild resolvable to identify
+ * @returns {?Guild}
+ */
+ resolve(guild) {
+ if (
+ guild instanceof GuildChannel ||
+ guild instanceof GuildMember ||
+ guild instanceof GuildEmoji ||
+ guild instanceof Role ||
+ (guild instanceof Invite && guild.guild)
+ ) {
+ return super.resolve(guild.guild);
+ }
+ return super.resolve(guild);
+ }
+
+ /**
+ * Resolves a GuildResolvable to a Guild ID string.
+ * @method resolveID
+ * @memberof GuildManager
+ * @instance
+ * @param {GuildResolvable} guild The guild resolvable to identify
+ * @returns {?Snowflake}
+ */
+ resolveID(guild) {
+ if (
+ guild instanceof GuildChannel ||
+ guild instanceof GuildMember ||
+ guild instanceof GuildEmoji ||
+ guild instanceof Role ||
+ (guild instanceof Invite && guild.guild)
+ ) {
+ return super.resolveID(guild.guild.id);
+ }
+ return super.resolveID(guild);
+ }
+
+ /**
+ * Creates a guild.
+ * <warn>This is only available to bots in fewer than 10 guilds.</warn>
+ * @param {string} name The name of the guild
+ * @param {Object} [options] Options for the creating
+ * @param {PartialChannelData[]} [options.channels] The channels for this guild
+ * @param {DefaultMessageNotifications} [options.defaultMessageNotifications] The default message notifications
+ * for the guild
+ * @param {ExplicitContentFilterLevel} [options.explicitContentFilter] The explicit content filter level for the guild
+ * @param {BufferResolvable|Base64Resolvable} [options.icon=null] The icon for the guild
+ * @param {string} [options.region] The region for the server, defaults to the closest one available
+ * @param {PartialRoleData[]} [options.roles] The roles for this guild,
+ * the first element of this array is used to change properties of the guild's everyone role.
+ * @param {VerificationLevel} [options.verificationLevel] The verification level for the guild
+ * @returns {Promise<Guild>} The guild that was created
+ */
+ async create(
+ name,
+ {
+ channels = [],
+ defaultMessageNotifications,
+ explicitContentFilter,
+ icon = null,
+ region,
+ roles = [],
+ verificationLevel,
+ } = {},
+ ) {
+ icon = await DataResolver.resolveImage(icon);
+ if (typeof verificationLevel !== 'undefined' && typeof verificationLevel !== 'number') {
+ verificationLevel = VerificationLevels.indexOf(verificationLevel);
+ }
+ if (typeof defaultMessageNotifications !== 'undefined' && typeof defaultMessageNotifications !== 'number') {
+ defaultMessageNotifications = DefaultMessageNotifications.indexOf(defaultMessageNotifications);
+ }
+ if (typeof explicitContentFilter !== 'undefined' && typeof explicitContentFilter !== 'number') {
+ explicitContentFilter = ExplicitContentFilterLevels.indexOf(explicitContentFilter);
+ }
+ for (const channel of channels) {
+ channel.parent_id = channel.parentID;
+ delete channel.parentID;
+ if (!channel.permissionOverwrites) continue;
+ for (const overwrite of channel.permissionOverwrites) {
+ if (overwrite.allow) overwrite.allow = Permissions.resolve(overwrite.allow);
+ if (overwrite.deny) overwrite.deny = Permissions.resolve(overwrite.deny);
+ }
+ channel.permission_overwrites = channel.permissionOverwrites;
+ delete channel.permissionOverwrites;
+ }
+ for (const role of roles) {
+ if (role.color) role.color = resolveColor(role.color);
+ if (role.permissions) role.permissions = Permissions.resolve(role.permissions);
+ }
+ return new Promise((resolve, reject) =>
+ this.client.api.guilds
+ .post({
+ data: {
+ name,
+ region,
+ icon,
+ verification_level: verificationLevel,
+ default_message_notifications: defaultMessageNotifications,
+ explicit_content_filter: explicitContentFilter,
+ channels,
+ roles,
+ },
+ })
+ .then(data => {
+ if (this.client.guilds.cache.has(data.id)) return resolve(this.client.guilds.cache.get(data.id));
+
+ const handleGuild = guild => {
+ if (guild.id === data.id) {
+ this.client.removeListener(Events.GUILD_CREATE, handleGuild);
+ this.client.clearTimeout(timeout);
+ resolve(guild);
+ }
+ };
+ this.client.on(Events.GUILD_CREATE, handleGuild);
+
+ const timeout = this.client.setTimeout(() => {
+ this.client.removeListener(Events.GUILD_CREATE, handleGuild);
+ resolve(this.client.guilds.add(data));
+ }, 10000);
+ return undefined;
+ }, reject),
+ );
+ }
+}
+
+module.exports = GuildManager;