Skip to content

Commit 727b29c

Browse files
authored
feat(Client): allow options for generateInvite (#4741)
1 parent e0e2711 commit 727b29c

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

src/client/Client.js

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -356,21 +356,37 @@ class Client extends BaseClient {
356356

357357
/**
358358
* Generates a link that can be used to invite the bot to a guild.
359-
* @param {PermissionResolvable} [permissions] Permissions to request
359+
* @param {InviteGenerationOptions|PermissionResolvable} [options] Permissions to request
360360
* @returns {Promise<string>}
361361
* @example
362-
* client.generateInvite(['SEND_MESSAGES', 'MANAGE_GUILD', 'MENTION_EVERYONE'])
362+
* client.generateInvite({
363+
* permissions: ['SEND_MESSAGES', 'MANAGE_GUILD', 'MENTION_EVERYONE'],
364+
* })
363365
* .then(link => console.log(`Generated bot invite link: ${link}`))
364366
* .catch(console.error);
365367
*/
366-
async generateInvite(permissions) {
367-
permissions = Permissions.resolve(permissions);
368+
async generateInvite(options = {}) {
369+
if (Array.isArray(options) || ['string', 'number'].includes(typeof options) || options instanceof Permissions) {
370+
process.emitWarning(
371+
'Client#generateInvite: Generate invite with an options object instead of a PermissionResolvable',
372+
'DeprecationWarning',
373+
);
374+
options = { permissions: options };
375+
}
368376
const application = await this.fetchApplication();
369377
const query = new URLSearchParams({
370378
client_id: application.id,
371-
permissions: permissions,
379+
permissions: Permissions.resolve(options.permissions),
372380
scope: 'bot',
373381
});
382+
if (typeof options.disableGuildSelect === 'boolean') {
383+
query.set('disable_guild_select', options.disableGuildSelect.toString());
384+
}
385+
if (typeof options.guild !== 'undefined') {
386+
const guildID = this.guilds.resolveID(options.guild);
387+
if (!guildID) throw new TypeError('INVALID_TYPE', 'options.guild', 'GuildResolvable');
388+
query.set('guild_id', guildID);
389+
}
374390
return `${this.options.http.api}${this.api.oauth2.authorize}?${query}`;
375391
}
376392

@@ -443,6 +459,14 @@ class Client extends BaseClient {
443459

444460
module.exports = Client;
445461

462+
/**
463+
* Options for {@link Client#generateInvite}.
464+
* @typedef {Object} InviteGenerationOptions
465+
* @property {PermissionResolvable} [permissions] Permissions to request
466+
* @property {GuildResolvable} [guild] Guild to preselect
467+
* @property {boolean} [disableGuildSelect] Whether to disable the guild selection
468+
*/
469+
446470
/**
447471
* Emitted for general warnings.
448472
* @event Client#warn

typings/index.d.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ declare module 'discord.js' {
187187
public fetchInvite(invite: InviteResolvable): Promise<Invite>;
188188
public fetchVoiceRegions(): Promise<Collection<string, VoiceRegion>>;
189189
public fetchWebhook(id: Snowflake, token?: string): Promise<Webhook>;
190-
public generateInvite(permissions?: PermissionResolvable): Promise<string>;
190+
public generateInvite(options?: InviteGenerationOptions | PermissionResolvable): Promise<string>;
191191
public login(token?: string): Promise<string>;
192192
public sweepMessages(lifetime?: number): number;
193193
public toJSON(): object;
@@ -2664,6 +2664,12 @@ declare module 'discord.js' {
26642664
| 'DIRECT_MESSAGE_REACTIONS'
26652665
| 'DIRECT_MESSAGE_TYPING';
26662666

2667+
interface InviteGenerationOptions {
2668+
permissions?: PermissionResolvable;
2669+
guild?: GuildResolvable;
2670+
disableGuildSelect?: boolean;
2671+
}
2672+
26672673
interface InviteOptions {
26682674
temporary?: boolean;
26692675
maxAge?: number;

0 commit comments

Comments
 (0)