120 lines
4.2 KiB
JavaScript
120 lines
4.2 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
const Base = require("./Base");
|
||
|
|
||
|
/**
|
||
|
* Represents a guild integration
|
||
|
* @prop {Object} account Info on the integration account
|
||
|
* @prop {String} account.id The ID of the integration account
|
||
|
* @prop {String} account.name The name of the integration account
|
||
|
* @prop {Object?} application The bot/OAuth2 application for Discord integrations. See [the Discord docs](https://discord.com/developers/docs/resources/guild#integration-application-object)
|
||
|
* @prop {Number} createdAt Timestamp of the guild integration's creation
|
||
|
* @prop {Boolean} enabled Whether the integration is enabled or not
|
||
|
* @prop {Boolean?} enableEmoticons Whether integration emoticons are enabled or not
|
||
|
* @prop {Number?} expireBehavior behavior of expired subscriptions
|
||
|
* @prop {Number?} expireGracePeriod grace period for expired subscriptions
|
||
|
* @prop {String} id The ID of the integration
|
||
|
* @prop {String} name The name of the integration
|
||
|
* @prop {Boolean?} revoked Whether or not the application was revoked
|
||
|
* @prop {String?} roleID The ID of the role connected to the integration
|
||
|
* @prop {Number?} subscriberCount number of subscribers
|
||
|
* @prop {Number?} syncedAt Unix timestamp of last integration sync
|
||
|
* @prop {Boolean?} syncing Whether the integration is syncing or not
|
||
|
* @prop {String} type The type of the integration
|
||
|
* @prop {User?} user The user connected to the integration
|
||
|
*/
|
||
|
class GuildIntegration extends Base {
|
||
|
constructor(data, guild) {
|
||
|
super(data.id);
|
||
|
this.guild = guild;
|
||
|
this.name = data.name;
|
||
|
this.type = data.type;
|
||
|
if(data.role_id !== undefined) {
|
||
|
this.roleID = data.role_id;
|
||
|
}
|
||
|
if(data.user) {
|
||
|
this.user = guild.shard.client.users.add(data.user, guild.shard.client);
|
||
|
}
|
||
|
this.account = data.account; // not worth making a class for
|
||
|
this.update(data);
|
||
|
}
|
||
|
|
||
|
update(data) {
|
||
|
this.enabled = data.enabled;
|
||
|
if(data.syncing !== undefined) {
|
||
|
this.syncing = data.syncing;
|
||
|
}
|
||
|
if(data.expire_behavior !== undefined) {
|
||
|
this.expireBehavior = data.expire_behavior;
|
||
|
}
|
||
|
if(data.expire_behavior !== undefined) {
|
||
|
this.expireGracePeriod = data.expire_grace_period;
|
||
|
}
|
||
|
if(data.enable_emoticons) {
|
||
|
this.enableEmoticons = data.enable_emoticons;
|
||
|
}
|
||
|
if(data.subscriber_count !== undefined) {
|
||
|
this.subscriberCount = data.subscriber_count;
|
||
|
}
|
||
|
if(data.synced_at !== undefined) {
|
||
|
this.syncedAt = data.synced_at;
|
||
|
}
|
||
|
if(data.revoked !== undefined) {
|
||
|
this.revoked = data.revoked;
|
||
|
}
|
||
|
if(data.application !== undefined) {
|
||
|
this.application = data.application;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete the guild integration
|
||
|
* @returns {Promise}
|
||
|
*/
|
||
|
delete() {
|
||
|
return this.guild.shard.client.deleteGuildIntegration.call(this.guild.shard.client, this.guild.id, this.id);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Edit the guild integration
|
||
|
* @arg {Object} options The properties to edit
|
||
|
* @arg {String} [options.expireBehavior] What to do when a user's subscription runs out
|
||
|
* @arg {String} [options.expireGracePeriod] How long before the integration's role is removed from an unsubscribed user
|
||
|
* @arg {String} [options.enableEmoticons] Whether to enable integration emoticons or not
|
||
|
* @returns {Promise}
|
||
|
*/
|
||
|
edit(options) {
|
||
|
return this.guild.shard.client.editGuildIntegration.call(this.guild.shard.client, this.guild.id, this.id, options);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Force the guild integration to sync
|
||
|
* @returns {Promise}
|
||
|
*/
|
||
|
sync() {
|
||
|
return this.guild.shard.client.syncGuildIntegration.call(this.guild.shard.client, this.guild.id, this.id);
|
||
|
}
|
||
|
|
||
|
toJSON(props = []) {
|
||
|
return super.toJSON([
|
||
|
"account",
|
||
|
"application",
|
||
|
"enabled",
|
||
|
"enableEmoticons",
|
||
|
"expireBehavior",
|
||
|
"expireGracePeriod",
|
||
|
"name",
|
||
|
"revoked",
|
||
|
"roleID",
|
||
|
"subscriberCount",
|
||
|
"syncedAt",
|
||
|
"syncing",
|
||
|
"type",
|
||
|
"user",
|
||
|
...props
|
||
|
]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = GuildIntegration;
|