diff --git a/src/client/Client.js b/src/client/Client.js index 494dd5cbc..bbc09aada 100644 --- a/src/client/Client.js +++ b/src/client/Client.js @@ -265,10 +265,11 @@ class Client extends EventEmitter { /** * Fetches an invite object from an invite code. - * @param {string} code the invite code. + * @param {InviteResolvable} invite An invite code or URL * @returns {Promise} */ - fetchInvite(code) { + fetchInvite(invite) { + const code = this.resolver.resolveInviteCode(invite); return this.rest.methods.getInvite(code); } diff --git a/src/client/ClientDataResolver.js b/src/client/ClientDataResolver.js index 70efc8470..f8f027e0d 100644 --- a/src/client/ClientDataResolver.js +++ b/src/client/ClientDataResolver.js @@ -205,6 +205,26 @@ class ClientDataResolver { return String(data); } + /** + * Data that can be resolved to give an invite code. This can be: + * * An invite code + * * An invite URL + * @typedef {string} InviteResolvable + */ + + /** + * Resolves InviteResolvable to an invite code + * @param {InviteResolvable} data The invite resolvable to resolve + * @returns {string} + */ + resolveInviteCode(data) { + const inviteRegex = /discord(?:app)?\.(?:gg|com\/invite)\/([a-z0-9]{5})/i; + const match = inviteRegex.exec(data); + + if (match && match[1]) return match[1]; + return data; + } + /** * Data that can be resolved to give a Buffer. This can be: * * A Buffer