From c4b79571ba5bd468c6c2b27b7c6f43d421730dd5 Mon Sep 17 00:00:00 2001 From: izexi <43889168+izexi@users.noreply.github.com> Date: Mon, 22 Apr 2019 08:24:32 +0100 Subject: [PATCH] feat(Invite): add deletable getter (#3203) * add Invite#deletable * fix ci * reee * since guild is nullable * accommodate for external invites * nit(Invite): use guild instead of channel.guild --- src/structures/Invite.js | 13 +++++++++++++ typings/index.d.ts | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/structures/Invite.js b/src/structures/Invite.js index fec3f2d7d1d2..43d8c6524b3c 100644 --- a/src/structures/Invite.js +++ b/src/structures/Invite.js @@ -1,6 +1,7 @@ 'use strict'; const { Endpoints } = require('../util/Constants'); +const Permissions = require('../util/Permissions'); const Base = require('./Base'); /** @@ -91,6 +92,18 @@ class Invite extends Base { return this.createdTimestamp ? new Date(this.createdTimestamp) : null; } + /** + * Whether the invite is deletable by the client user + * @type {boolean} + * @readonly + */ + get deletable() { + const guild = this.guild; + if (!guild || !this.client.guilds.has(guild.id)) return false; + return this.channel.permissionsFor(this.client.user).has(Permissions.FLAGS.MANAGE_CHANNELS, false) || + guild.me.permissions.has(Permissions.FLAGS.MANAGE_GUILD); + } + /** * The timestamp the invite will expire at * @type {?number} diff --git a/typings/index.d.ts b/typings/index.d.ts index 535295d1ff9c..f6488599df99 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -615,7 +615,8 @@ declare module 'discord.js' { constructor(client: Client, data: object); public channel: GuildChannel; public code: string; - public readonly createdAt: Date; + public readonly deletable: boolean; + public readonly createdAt: Date | null; public createdTimestamp: number | null; public readonly expiresAt: Date | null; public readonly expiresTimestamp: number | null;