discord.js-selfbot-v13/src/structures/GuildBoost.js
March 7th cada44a37a feat: BillingManager (test)
guild boost
2023-01-05 18:42:17 +07:00

109 lines
2.7 KiB
JavaScript

'use strict';
const Base = require('./Base');
/**
* Represents a guild boost in a guild on Discord.
* @extends {Base}
*/
class GuildBoost extends Base {
constructor(client, data) {
super(client);
this._patch(data);
}
_patch(data) {
if ('id' in data) {
/**
* The id of the guild boost
* @type {Snowflake}
*/
this.id = data.id;
}
if ('subscription_id' in data) {
/**
* The id of the subscription
* @type {Snowflake}
*/
this.subscriptionId = data.subscription_id;
}
if (typeof data.premium_guild_subscription === 'object') {
/**
* The premium guild subscription id
* @type {?Snowflake}
*/
this.premiumGuildSubscriptionId = data.premium_guild_subscription.id;
/**
* Guild id
* @type {?Snowflake}
*/
this.guildId = data.premium_guild_subscription.guild_id;
/**
* Ended ???
* @type {?boolean}
*/
this.ended = data.premium_guild_subscription.ended;
}
if ('canceled' in data) {
/**
* Whether the subscription is canceled
* @type {boolean}
*/
this.canceled = data.canceled;
}
if ('cooldown_ends_at' in data) {
/**
* The cooldown end date
* @type {Date}
*/
this.cooldownEndsAt = new Date(data.cooldown_ends_at);
}
}
/**
* The guild of the boost
* @type {?Guild}
* @readonly
*/
get guilld() {
return this.client.guilds.cache.get(this.guildId);
}
/**
* Cancel the boost
* @returns {Promise<GuildBoost>}
*/
async unsubscribe() {
// https://discord.com/api/v9/guilds/:id/premium/subscriptions/:id
if (!this.guildId) throw new Error('BOOST_UNUSED');
if (!this.premiumGuildSubscriptionId) throw new Error('BOOST_UNCACHED');
await this.client.api.guilds(this.guildId).premium.subscriptions(this.premiumGuildSubscriptionId).delete();
this.guildId = null;
this.premiumGuildSubscriptionId = null;
this.ended = null;
return this;
}
/**
* Use the boost
* @param {GuildResolvable} guild The guild to use the boost on
* @returns {Promise<GuildBoost>}
*/
async subscribe(guild) {
// https://discord.com/api/v9/guilds/:id/premium/subscriptions
if (this.guildId || this.premiumGuildSubscriptionId) throw new Error('BOOST_USED');
const id = this.client.guilds.resolveId(guild);
if (!id) throw new Error('UNKNOWN_GUILD');
const d = await this.client.api.guilds(id).premium.subscriptions.put({
data: {
user_premium_guild_subscription_slot_ids: [this.id],
},
});
this._patch({
premium_guild_subscription: d,
});
return this;
}
}
module.exports = GuildBoost;