feat(Integration): add missing props and fix docs/types (#6623)

Co-authored-by: Noel <buechler.noel@outlook.com>
This commit is contained in:
Rodry
2021-09-23 12:47:01 +01:00
committed by GitHub
parent 29dd319b68
commit caa3b60c30
6 changed files with 66 additions and 19 deletions

View File

@@ -559,7 +559,7 @@ class Guild extends AnonymousGuild {
/** /**
* Fetches a collection of integrations to this guild. * Fetches a collection of integrations to this guild.
* Resolves with a collection mapping integrations by their ids. * Resolves with a collection mapping integrations by their ids.
* @returns {Promise<Collection<string, Integration>>} * @returns {Promise<Collection<Snowflake|string, Integration>>}
* @example * @example
* // Fetch integrations * // Fetch integrations
* guild.fetchIntegrations() * guild.fetchIntegrations()

View File

@@ -174,7 +174,7 @@ class GuildAuditLogs {
/** /**
* Cached integrations * Cached integrations
* @type {Collection<Snowflake, Integration>} * @type {Collection<Snowflake|string, Integration>}
* @private * @private
*/ */
this.integrations = new Collection(); this.integrations = new Collection();

View File

@@ -6,7 +6,7 @@ const IntegrationApplication = require('./IntegrationApplication');
/** /**
* The information account for an integration * The information account for an integration
* @typedef {Object} IntegrationAccount * @typedef {Object} IntegrationAccount
* @property {string} id The id of the account * @property {Snowflake|string} id The id of the account
* @property {string} name The name of the account * @property {string} name The name of the account
*/ */
@@ -25,7 +25,7 @@ class Integration extends Base {
/** /**
* The integration id * The integration id
* @type {Snowflake} * @type {Snowflake|string}
*/ */
this.id = data.id; this.id = data.id;
@@ -36,7 +36,7 @@ class Integration extends Base {
this.name = data.name; this.name = data.name;
/** /**
* The integration type (twitch, youtube, etc) * The integration type (twitch, youtube or discord)
* @type {string} * @type {string}
*/ */
this.type = data.type; this.type = data.type;
@@ -49,16 +49,26 @@ class Integration extends Base {
/** /**
* Whether this integration is syncing * Whether this integration is syncing
* @type {boolean} * @type {?boolean}
*/ */
this.syncing = data.syncing; this.syncing = data.syncing;
/** /**
* The role that this integration uses for subscribers * The role that this integration uses for subscribers
* @type {Role} * @type {?Role}
*/ */
this.role = this.guild.roles.cache.get(data.role_id); this.role = this.guild.roles.cache.get(data.role_id);
if ('enable_emoticons' in data) {
/**
* Whether emoticons should be synced for this integration (twitch only currently)
* @type {?boolean}
*/
this.enableEmoticons = data.enable_emoticons;
} else {
this.enableEmoticons ??= null;
}
if (data.user) { if (data.user) {
/** /**
* The user for this integration * The user for this integration
@@ -77,9 +87,30 @@ class Integration extends Base {
/** /**
* The last time this integration was last synced * The last time this integration was last synced
* @type {number} * @type {?number}
*/ */
this.syncedAt = data.synced_at; this.syncedAt = data.synced_at;
if ('subscriber_count' in data) {
/**
* How many subscribers this integration has
* @type {?number}
*/
this.subscriberCount = data.subscriber_count;
} else {
this.subscriberCount ??= null;
}
if ('revoked' in data) {
/**
* Whether this integration has been revoked
* @type {?boolean}
*/
this.revoked = data.revoked;
} else {
this.revoked ??= null;
}
this._patch(data); this._patch(data);
} }
@@ -96,13 +127,13 @@ class Integration extends Base {
_patch(data) { _patch(data) {
/** /**
* The behavior of expiring subscribers * The behavior of expiring subscribers
* @type {number} * @type {?number}
*/ */
this.expireBehavior = data.expire_behavior; this.expireBehavior = data.expire_behavior;
/** /**
* The grace period before expiring subscribers * The grace period before expiring subscribers
* @type {number} * @type {?number}
*/ */
this.expireGracePeriod = data.expire_grace_period; this.expireGracePeriod = data.expire_grace_period;

View File

@@ -87,7 +87,7 @@ class Role extends Base {
* The tags this role has * The tags this role has
* @type {?Object} * @type {?Object}
* @property {Snowflake} [botId] The id of the bot this role belongs to * @property {Snowflake} [botId] The id of the bot this role belongs to
* @property {Snowflake} [integrationId] The id of the integration this role belongs to * @property {Snowflake|string} [integrationId] The id of the integration this role belongs to
* @property {true} [premiumSubscriberRole] Whether this is the guild's premium subscription role * @property {true} [premiumSubscriberRole] Whether this is the guild's premium subscription role
*/ */
this.tags = data.tags ? {} : null; this.tags = data.tags ? {} : null;

View File

@@ -348,6 +348,16 @@ exports.InviteScopes = [
'webhook.incoming', 'webhook.incoming',
]; ];
// TODO: change Integration#expireBehavior to this and clean up Integration
/**
* The behavior of expiring subscribers for Integrations. This can be:
* * REMOVE_ROLE
* * KICK
* @typedef {string} IntegrationExpireBehavior
* @see {@link https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors}
*/
exports.IntegrationExpireBehaviors = createEnum(['REMOVE_ROLE', 'KICK']);
/** /**
* The type of a message, e.g. `DEFAULT`. Here are the available types: * The type of a message, e.g. `DEFAULT`. Here are the available types:
* * DEFAULT * * DEFAULT

22
typings/index.d.ts vendored
View File

@@ -725,7 +725,7 @@ export class Guild extends AnonymousGuild {
public editWelcomeScreen(data: WelcomeScreenEditData): Promise<WelcomeScreen>; public editWelcomeScreen(data: WelcomeScreenEditData): Promise<WelcomeScreen>;
public equals(guild: Guild): boolean; public equals(guild: Guild): boolean;
public fetchAuditLogs(options?: GuildAuditLogsFetchOptions): Promise<GuildAuditLogs>; public fetchAuditLogs(options?: GuildAuditLogsFetchOptions): Promise<GuildAuditLogs>;
public fetchIntegrations(): Promise<Collection<string, Integration>>; public fetchIntegrations(): Promise<Collection<Snowflake | string, Integration>>;
public fetchOwner(options?: FetchOwnerOptions): Promise<GuildMember>; public fetchOwner(options?: FetchOwnerOptions): Promise<GuildMember>;
public fetchPreview(): Promise<GuildPreview>; public fetchPreview(): Promise<GuildPreview>;
public fetchTemplates(): Promise<Collection<GuildTemplate['code'], GuildTemplate>>; public fetchTemplates(): Promise<Collection<GuildTemplate['code'], GuildTemplate>>;
@@ -769,7 +769,7 @@ export class Guild extends AnonymousGuild {
export class GuildAuditLogs { export class GuildAuditLogs {
public constructor(guild: Guild, data: RawGuildAuditLogData); public constructor(guild: Guild, data: RawGuildAuditLogData);
private webhooks: Collection<Snowflake, Webhook>; private webhooks: Collection<Snowflake, Webhook>;
private integrations: Collection<Snowflake, Integration>; private integrations: Collection<Snowflake | string, Integration>;
public entries: Collection<Snowflake, GuildAuditLogsEntry>; public entries: Collection<Snowflake, GuildAuditLogsEntry>;
@@ -979,17 +979,20 @@ export class Integration extends Base {
public account: IntegrationAccount; public account: IntegrationAccount;
public application: IntegrationApplication | null; public application: IntegrationApplication | null;
public enabled: boolean; public enabled: boolean;
public expireBehavior: number; public expireBehavior: number | undefined;
public expireGracePeriod: number; public expireGracePeriod: number | undefined;
public guild: Guild; public guild: Guild;
public id: Snowflake; public id: Snowflake | string;
public name: string; public name: string;
public role: Role; public role: Role | undefined;
public enableEmoticons: boolean | null;
public readonly roles: Collection<Snowflake, Role>; public readonly roles: Collection<Snowflake, Role>;
public syncedAt: number; public syncedAt: number | undefined;
public syncing: boolean; public syncing: boolean | undefined;
public type: string; public type: string;
public user: User | null; public user: User | null;
public subscriberCount: number | null;
public revoked: boolean | null;
public delete(reason?: string): Promise<Integration>; public delete(reason?: string): Promise<Integration>;
} }
@@ -2344,6 +2347,7 @@ export const Constants: {
TextBasedChannelTypes: TextBasedChannelTypes[]; TextBasedChannelTypes: TextBasedChannelTypes[];
VoiceBasedChannelTypes: VoiceBasedChannelTypes[]; VoiceBasedChannelTypes: VoiceBasedChannelTypes[];
ClientApplicationAssetTypes: ConstantsClientApplicationAssetTypes; ClientApplicationAssetTypes: ConstantsClientApplicationAssetTypes;
IntegrationExpireBehaviors: IntegrationExpireBehaviors[];
InviteScopes: InviteScope[]; InviteScopes: InviteScope[];
MessageTypes: MessageType[]; MessageTypes: MessageType[];
SystemMessageTypes: SystemMessageType[]; SystemMessageTypes: SystemMessageType[];
@@ -4115,6 +4119,8 @@ export interface CreateInviteOptions {
targetType?: InviteTargetType; targetType?: InviteTargetType;
} }
export type IntegrationExpireBehaviors = 'REMOVE_ROLE' | 'KICK';
export type InviteResolvable = string; export type InviteResolvable = string;
export type InviteScope = export type InviteScope =