110 lines
4.5 KiB
JavaScript
110 lines
4.5 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
const Base = require("./Base");
|
||
|
const Guild = require("./Guild");
|
||
|
|
||
|
/**
|
||
|
* Represents an invite. Some properties are only available when fetching invites from channels, which requires the Manage Channel permission.
|
||
|
* @prop {TextChannel | NewsChannel | TextVoiceChannel | GroupChannel | StageChannel | Object} channel Info on the invite channel
|
||
|
* @prop {String} channel.id The ID of the invite's channel
|
||
|
* @prop {String?} channel.name The name of the invite's channel
|
||
|
* @prop {Number} channel.type The type of the invite's channel
|
||
|
* @prop {String?} channel.icon The icon of a channel (group dm)
|
||
|
* @prop {String} code The invite code
|
||
|
* @prop {Number?} createdAt Timestamp of invite creation
|
||
|
* @prop {Guild?} guild Info on the invite guild
|
||
|
* @prop {User?} inviter The invite creator
|
||
|
* @prop {Number?} maxAge How long the invite lasts in seconds
|
||
|
* @prop {Number?} maxUses The max number of invite uses
|
||
|
* @prop {Number?} memberCount The **approximate** member count for the guild
|
||
|
* @prop {Number?} presenceCount The **approximate** presence count for the guild
|
||
|
* @prop {Object?} stageInstance The active public stage instance data for the stage channel this invite is for
|
||
|
* @prop {String?} targetApplicationID The target application id
|
||
|
* @prop {Number?} targetType The type of the target application
|
||
|
* @prop {User?} targetUser The user whose stream is displayed for the invite (voice channel only)
|
||
|
* @prop {Boolean?} temporary Whether the invite grants temporary membership or not
|
||
|
* @prop {Number?} uses The number of invite uses
|
||
|
*/
|
||
|
class Invite extends Base {
|
||
|
constructor(data, client) {
|
||
|
super();
|
||
|
this._client = client;
|
||
|
this.code = data.code;
|
||
|
if(data.guild && client.guilds.has(data.guild.id)) {
|
||
|
this.channel = client.guilds.get(data.guild.id).channels.update(data.channel, client);
|
||
|
} else {
|
||
|
this.channel = data.channel;
|
||
|
}
|
||
|
if(data.guild) {
|
||
|
if(client.guilds.has(data.guild.id)) {
|
||
|
this.guild = client.guilds.update(data.guild, client);
|
||
|
} else {
|
||
|
this.guild = new Guild(data.guild, client);
|
||
|
}
|
||
|
}
|
||
|
if(data.inviter) {
|
||
|
this.inviter = client.users.add(data.inviter, client);
|
||
|
}
|
||
|
this.uses = data.uses !== undefined ? data.uses : null;
|
||
|
this.maxUses = data.max_uses !== undefined ? data.max_uses : null;
|
||
|
this.maxAge = data.max_age !== undefined ? data.max_age : null;
|
||
|
this.temporary = data.temporary !== undefined ? data.temporary : null;
|
||
|
this._createdAt = data.created_at !== undefined ? data.created_at : null;
|
||
|
this.presenceCount = data.approximate_presence_count !== undefined ? data.approximate_presence_count : null;
|
||
|
this.memberCount = data.approximate_member_count !== undefined ? data.approximate_member_count : null;
|
||
|
if(data.stage_instance !== undefined) {
|
||
|
data.stage_instance.members = data.stage_instance.members.map((m) => {
|
||
|
m.id = m.user.id;
|
||
|
return m;
|
||
|
});
|
||
|
this.stageInstance = {
|
||
|
members: data.stage_instance.members.map((m) => this.guild.members.update(m, this.guild)),
|
||
|
participantCount: data.stage_instance.participant_count,
|
||
|
speakerCount: data.stage_instance.speaker_count,
|
||
|
topic: data.stage_instance.topic
|
||
|
};
|
||
|
} else {
|
||
|
this.stageInstance = null;
|
||
|
}
|
||
|
this.targetApplicationID = data.target_application !== undefined ? data.target_application.id : null;
|
||
|
this.targetType = data.target_type !== undefined ? data.target_type : null;
|
||
|
this.targetUser = data.target_user !== undefined ? this._client.users.update(data.target_user, this._client) : null;
|
||
|
}
|
||
|
|
||
|
get createdAt() {
|
||
|
return Date.parse(this._createdAt);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete the invite
|
||
|
* @arg {String} [reason] The reason to be displayed in audit logs
|
||
|
* @returns {Promise}
|
||
|
*/
|
||
|
delete(reason) {
|
||
|
return this._client.deleteInvite.call(this._client, this.code, reason);
|
||
|
}
|
||
|
|
||
|
toString() {
|
||
|
return `[Invite ${this.code}]`;
|
||
|
}
|
||
|
|
||
|
toJSON(props = []) {
|
||
|
return super.toJSON([
|
||
|
"channel",
|
||
|
"code",
|
||
|
"createdAt",
|
||
|
"guild",
|
||
|
"maxAge",
|
||
|
"maxUses",
|
||
|
"memberCount",
|
||
|
"presenceCount",
|
||
|
"revoked",
|
||
|
"temporary",
|
||
|
"uses",
|
||
|
...props
|
||
|
]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Invite;
|