diff --git a/index.d.ts b/index.d.ts index 5be4e007..683caade 100644 --- a/index.d.ts +++ b/index.d.ts @@ -888,6 +888,10 @@ declare namespace Dysnomia { deleteMessageSeconds?: number; reason?: string; } + interface BulkGuildMemberBanResult { + bannedUsers: string[]; + failedUsers: string[]; + } interface CreateGuildOptions { afkChannelID?: string; afkTimeout?: number; @@ -2572,6 +2576,7 @@ declare namespace Dysnomia { addGuildMemberRole(guildID: string, memberID: string, roleID: string, reason?: string): Promise; addMessageReaction(channelID: string, messageID: string, reaction: string): Promise; banGuildMember(guildID: string, userID: string, options?: BanMemberOptions): Promise; + bulkBanGuildMembers(guildID: string, userIDs: string[], options?: BanMemberOptions): Promise; bulkEditCommands(commands: ApplicationCommandStructure[]): Promise[]>; bulkEditGuildCommands(guildID: string, commands: ApplicationCommandStructure[]): Promise[]>; closeVoiceConnection(guildID: string): void; @@ -2999,6 +3004,7 @@ declare namespace Dysnomia { addMember(userID: string, accessToken: string, options?: AddGuildMemberOptions): Promise; addMemberRole(memberID: string, roleID: string, reason?: string): Promise; banMember(userID: string, options?: BanMemberOptions): Promise; + bulkBanMembers(guildID: string, userIDs: string[], options?: BanMemberOptions): Promise; bulkEditCommands(commands: ApplicationCommandStructure[]): Promise; createAutoModerationRule(rule: CreateAutoModerationRuleOptions): Promise; createChannel(name: string): Promise; diff --git a/lib/Client.js b/lib/Client.js index 8027a10c..22e56e35 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -301,6 +301,25 @@ class Client extends EventEmitter { }); } + /** + * Ban multiple users from a guild + * @arg {String} guildID The ID of the guild + * @arg {Array} userIDs A list of user IDs to ban + * @arg {Number} [options.deleteMessageSeconds=0] Number of seconds to delete messages for, between 0 and 604800 inclusive + * @arg {String} [options.reason] The reason to be displayed in audit logs + * @returns {Promise<{ bannedUsers: Array, failedUsers: Array }>} + */ + bulkBanGuildMembers(guildID, userIDs, options) { + return this.requestHandler.request("POST", Endpoints.GUILD_BULK_BAN(guildID), true, { + user_ids: userIDs, + delete_message_seconds: options.deleteMessageSeconds || 0, + reason: options.reason + }).then((result) => ({ + bannedUsers: result.banned_users, + failedUsers: result.failed_users + })); + } + /** * Edits command permissions for a multiple commands in a guild. * Note: You can only add up to 10 permission overwrites for a command. diff --git a/lib/rest/Endpoints.js b/lib/rest/Endpoints.js index b1af3fcb..7b8cf738 100644 --- a/lib/rest/Endpoints.js +++ b/lib/rest/Endpoints.js @@ -36,6 +36,7 @@ module.exports.GUILD = (guildID) module.exports.GUILD_AUDIT_LOGS = (guildID) => `/guilds/${guildID}/audit-logs`; module.exports.GUILD_BAN = (guildID, memberID) => `/guilds/${guildID}/bans/${memberID}`; module.exports.GUILD_BANS = (guildID) => `/guilds/${guildID}/bans`; +module.exports.GUILD_BULK_BAN = (guildID) => `/guilds/${guildID}/bulk-ban`; module.exports.GUILD_CHANNELS = (guildID) => `/guilds/${guildID}/channels`; module.exports.GUILD_COMMAND = (applicationID, guildID, commandID) => `/applications/${applicationID}/guilds/${guildID}/commands/${commandID}`; module.exports.GUILD_COMMAND_PERMISSIONS = (applicationID, guildID) => `/applications/${applicationID}/guilds/${guildID}/commands/permissions`; diff --git a/lib/structures/Guild.js b/lib/structures/Guild.js index ff752e99..57de9405 100644 --- a/lib/structures/Guild.js +++ b/lib/structures/Guild.js @@ -520,6 +520,18 @@ class Guild extends Base { return this.#client.banGuildMember.call(this.#client, this.id, userID, options); } + /** + * Ban multiple users from the guild + * @arg {String} guildID The ID of the guild + * @arg {Array} userIDs A list of user IDs to ban + * @arg {Number} [options.deleteMessageSeconds=0] Number of seconds to delete messages for, between 0 and 604800 inclusive + * @arg {String} [options.reason] The reason to be displayed in audit logs + * @returns {Promise<{ bannedUsers: Array, failedUsers: Array }>} + */ + bulkBanMembers(userIDs, options) { + return this.#client.bulkBanGuildMembers.call(this.#client, this.id, userIDs, options); + } + /** * Edits command permissions for a multiple commands in a guild. * Note: You can only add up to 10 permission overwrites for a command.