selfbot-discord
Version:
Module discord.js v11 modifié
165 lines (142 loc) • 4.06 kB
JavaScript
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;