summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/structures/Integration.js
diff options
context:
space:
mode:
author8cy <[email protected]>2020-04-03 02:37:42 -0700
committer8cy <[email protected]>2020-04-03 02:37:42 -0700
commit60867fb030bae582082340ead7dbc7efdc2f5398 (patch)
tree4c6a7356351be2e4914e15c4703172597c45656e /node_modules/discord.js/src/structures/Integration.js
parentcommenting (diff)
downloads5nical-60867fb030bae582082340ead7dbc7efdc2f5398.tar.xz
s5nical-60867fb030bae582082340ead7dbc7efdc2f5398.zip
2020/04/03, 02:34, v1.2.0
Diffstat (limited to 'node_modules/discord.js/src/structures/Integration.js')
-rw-r--r--node_modules/discord.js/src/structures/Integration.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/structures/Integration.js b/node_modules/discord.js/src/structures/Integration.js
new file mode 100644
index 0000000..96af017
--- /dev/null
+++ b/node_modules/discord.js/src/structures/Integration.js
@@ -0,0 +1,151 @@
+/**
+ * The information account for an integration
+ * @typedef {Object} IntegrationAccount
+ * @property {string} id The id of the account
+ * @property {string} name The name of the account
+ */
+
+/**
+ * Represents a guild integration.
+ */
+class Integration {
+ constructor(client, data, guild) {
+ /**
+ * The client that created this integration
+ * @name Integration#client
+ * @type {Client}
+ * @readonly
+ */
+ Object.defineProperty(this, 'client', { value: client });
+
+ /**
+ * The guild this integration belongs to
+ * @type {Guild}
+ */
+ this.guild = guild;
+
+ /**
+ * The integration id
+ * @type {Snowflake}
+ */
+ this.id = data.id;
+
+ /**
+ * The integration name
+ * @type {string}
+ */
+ this.name = data.name;
+ /**
+ * The integration type (twitch, youtube, etc)
+ * @type {string}
+ */
+ this.type = data.type;
+
+ /**
+ * Whether this integration is enabled
+ * @type {boolean}
+ */
+ this.enabled = data.enabled;
+
+ /**
+ * Whether this integration is syncing
+ * @type {boolean}
+ */
+ this.syncing = data.syncing;
+
+ /**
+ * The role that this integration uses for subscribers
+ * @type {Role}
+ */
+ this.role = this.guild.roles.get(data.role_id);
+
+ /**
+ * The user for this integration
+ * @type {User}
+ */
+ this.user = this.client.dataManager.newUser(data.user);
+
+ /**
+ * The account integration information
+ * @type {IntegrationAccount}
+ */
+ this.account = data.account;
+
+ /**
+ * The last time this integration was last synced
+ * @type {number}
+ */
+ this.syncedAt = data.synced_at;
+ this._patch(data);
+ }
+
+ _patch(data) {
+ /**
+ * The behavior of expiring subscribers
+ * @type {number}
+ */
+ this.expireBehavior = data.expire_behavior;
+
+ /**
+ * The grace period before expiring subscribers
+ * @type {number}
+ */
+ this.expireGracePeriod = data.expire_grace_period;
+ }
+
+ /**
+ * Syncs this integration
+ * @returns {Promise<Integration>}
+ */
+ sync() {
+ this.syncing = true;
+ return this.client.rest.methods.syncIntegration(this)
+ .then(() => {
+ this.syncing = false;
+ this.syncedAt = Date.now();
+ return this;
+ });
+ }
+
+ /**
+ * The data for editing an integration.
+ * @typedef {Object} IntegrationEditData
+ * @property {number} [expireBehavior] The new behaviour of expiring subscribers
+ * @property {number} [expireGracePeriod] The new grace period before expiring subscribers
+ */
+
+ /**
+ * Edits this integration.
+ * @param {IntegrationEditData} data The data to edit this integration with
+ * @param {string} reason Reason for editing this integration
+ * @returns {Promise<Integration>}
+ */
+ edit(data, reason) {
+ if ('expireBehavior' in data) {
+ data.expire_behavior = data.expireBehavior;
+ data.expireBehavior = undefined;
+ }
+ if ('expireGracePeriod' in data) {
+ data.expire_grace_period = data.expireGracePeriod;
+ data.expireGracePeriod = undefined;
+ }
+ // The option enable_emoticons is only available for Twitch at this moment
+ return this.client.rest.methods.editIntegration(this, data, reason)
+ .then(() => {
+ this._patch(data);
+ return this;
+ });
+ }
+
+ /**
+ * Deletes this integration.
+ * @returns {Promise<Integration>}
+ * @param {string} [reason] Reason for deleting this integration
+ */
+ delete(reason) {
+ return this.client.rest.methods.deleteIntegration(this, reason)
+ .then(() => this);
+ }
+}
+
+module.exports = Integration;