mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 08:33:30 +01:00
* UserStore refactor * Create ChannelStore, remove redundant methods in ClientDataManager * Create GuildStore * Emoji stuff * Use a Base class where possible to reduce code duplication * Remove unnecessary comments from ChannelStore * Add Base._clone(); * Remove unused ClientDataManager methods * Refactor some more stuff * ESLint * Move Client#fetchUser to client.users.fetch * Remove .has checks and just see if .get is truthy * Fix guild member chunk error * ESLint * Fix typo * Fix channel storing for user bots * Remove ClientDataManager * GuildChannelStore * Reduce use of Util.cloneObject * and this one too * update typings * Fix MessageUpdate handling (#1507) * Fix role updates (probably fixes #1525) * fix for eslint * Address some of appell's comments * Use debug constant * start message store crap if it's ugly tell me later k * fix that * message store but works™️ * clean up guild stuff * clean up channel store stuff * clean up channel event handling * does this message stuff work? find out soon in the next episode of dIsCoRd.Js * eslint * emojis * emojis and reactions * hi my name is eslint and im A LIL SHIT * so i forgot this huh * user stuff * Fix @class * Fix message stuff * Fix user store docs * Document all the bases * fix the super things * tidy up remove * fix textbasedchannel * fix that too * fix emoji store * make voice state stuff less ugly * make voice states even less ugly * make members less bad * fix bug * fix that too * fix reactions * how was this broken for so long * role store * remove super._patch from UserConnection * Rename UserProfile#setup to _patch * remove unnecessary super calls * update docgen dep (pls fix travis thx) * doc messagestore * fix docs * message store docs * things * DOCS PLS * more things * Document TextBasedChannel#messages as a MessageStore * Rebase * All the stores!
157 lines
3.6 KiB
JavaScript
157 lines
3.6 KiB
JavaScript
const Constants = require('../util/Constants');
|
|
const Base = require('./Base');
|
|
|
|
/**
|
|
* Represents an invitation to a guild channel.
|
|
* <warn>The only guaranteed properties are `code`, `guild` and `channel`. Other properties can be missing.</warn>
|
|
* @extends {Base}
|
|
*/
|
|
class Invite extends Base {
|
|
constructor(client, data) {
|
|
super(client);
|
|
this._patch(data);
|
|
}
|
|
|
|
_patch(data) {
|
|
const Guild = require('./Guild');
|
|
const Channel = require('./Channel');
|
|
/**
|
|
* The guild the invite is for
|
|
* @type {Guild}
|
|
*/
|
|
this.guild = this.client.guilds.get(data.guild.id) || new Guild(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.users.create(data.inviter);
|
|
}
|
|
|
|
/**
|
|
* The channel the invite is for
|
|
* @type {GuildChannel}
|
|
*/
|
|
this.channel = this.client.channels.get(data.channel.id) || Channel.create(this.client, data.channel, this.guild);
|
|
|
|
/**
|
|
* 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.invite(this.client.options.http.invite, this.code);
|
|
}
|
|
|
|
/**
|
|
* Deletes this invite.
|
|
* @param {string} [reason] Reason for deleting this invite
|
|
* @returns {Promise<Invite>}
|
|
*/
|
|
delete(reason) {
|
|
return this.client.api.invites[this.code].delete({ reason }).then(() => this);
|
|
}
|
|
|
|
/**
|
|
* 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;
|