UNPKG

selfbot-discord

Version:
165 lines (142 loc) • 4.06 kB
const PartialGuild = require('./PartialGuild'); const PartialGuildChannel = require('./PartialGuildChannel'); const Constants = require('../util/Constants'); /** * Represents an invitation to a guild channel. * <warn>The only guaranteed properties are `code`, `url`, `guild`, and `channel`. * Other properties can be missing.</warn> */ class Invite { constructor(client, data) { /** * The client that instantiated the invite * @name Invite#client * @type {Client} * @readonly */ Object.defineProperty(this, 'client', { value: client }); this.setup(data); } setup(data) { /** * The guild the invite is for. If this guild is already known, this will be a guild object. If the guild is * unknown, this will be a PartialGuild object * @type {Guild|PartialGuild} */ this.guild = this.client.guilds.get(data.guild.id) || new PartialGuild(this.client, data.guild); /** * The code for this invite * @type {string} */ this.code = data.code; /** * The approximate number of online members of the guild this invite is for * @type {number} */ this.presenceCount = data.approximate_presence_count; /** * The approximate total number of members of the guild this invite is for * @type {number} */ this.memberCount = data.approximate_member_count; /** * The number of text channels the guild this invite goes to has * @type {number} */ this.textChannelCount = data.guild.text_channel_count; /** * The number of voice channels the guild this invite goes to has * @type {number} */ this.voiceChannelCount = data.guild.voice_channel_count; /** * Whether or not this invite is temporary * @type {boolean} */ this.temporary = data.temporary; /** * The maximum age of the invite, in seconds * @type {?number} */ this.maxAge = data.max_age; /** * How many times this invite has been used * @type {number} */ this.uses = data.uses; /** * The maximum uses of this invite * @type {number} */ this.maxUses = data.max_uses; if (data.inviter) { /** * The user who created this invite * @type {?User} */ this.inviter = this.client.dataManager.newUser(data.inviter); } /** * The channel the invite is for. If this channel is already known, this will be a GuildChannel object. * If the channel is unknown, this will be a PartialGuildChannel object. * @type {GuildChannel|PartialGuildChannel} */ this.channel = this.client.channels.get(data.channel.id) || new PartialGuildChannel(this.client, data.channel); /** * The timestamp the invite was created at * @type {number} */ this.createdTimestamp = new Date(data.created_at).getTime(); } /** * The time the invite was created * @type {Date} * @readonly */ get createdAt() { return new Date(this.createdTimestamp); } /** * The timestamp the invite will expire at * @type {number} * @readonly */ get expiresTimestamp() { return this.createdTimestamp + (this.maxAge * 1000); } /** * The time the invite will expire * @type {Date} * @readonly */ get expiresAt() { return new Date(this.expiresTimestamp); } /** * The URL to the invite * @type {string} * @readonly */ get url() { return Constants.Endpoints.inviteLink(this.code); } /** * Deletes this invite. * @param {string} [reason] Reason for deleting this invite * @returns {Promise<Invite>} */ delete(reason) { return this.client.rest.methods.deleteInvite(this, reason); } /** * When concatenated with a string, this automatically concatenates the invite's URL instead of the object. * @returns {string} * @example * // Logs: Invite: https://discord.gg/A1b2C3 * console.log(`Invite: ${invite}`); */ toString() { return this.url; } } module.exports = Invite;