From bfd9f6e7636bd32735038b899f69a7afb15d7351 Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Sun, 14 Feb 2021 09:59:43 -0500 Subject: [PATCH] Leave all blacklisted guilds when blacklist is used --- Xiao.js | 7 +++++-- commands/util/blacklist.js | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Xiao.js b/Xiao.js index 6724202d..a9970261 100644 --- a/Xiao.js +++ b/Xiao.js @@ -147,8 +147,11 @@ client.on('message', async msg => { client.on('guildCreate', async guild => { if (client.blacklist.guild.includes(guild.id) || client.blacklist.user.includes(guild.ownerID)) { - guild.leave(); - return; + try { + await guild.leave(); + } finally { + return; + } } if (guild.systemChannel && guild.systemChannel.permissionsFor(client.user).has('SEND_MESSAGES')) { try { diff --git a/commands/util/blacklist.js b/commands/util/blacklist.js index 05bde961..d9b4947e 100644 --- a/commands/util/blacklist.js +++ b/commands/util/blacklist.js @@ -33,6 +33,30 @@ module.exports = class BlacklistCommand extends Command { if (this.client.blacklist[type].includes(target)) return msg.say(`🔨 \`${target}\` is already blacklisted.`); this.client.blacklist[type].push(target); this.client.exportBlacklist(); + if (type === 'guild') { + try { + const guild = await this.client.guilds.fetch(target, false); + await guild.leave(); + } catch { + await msg.say('🔨 Failed to leave guild.'); + } + } + if (type === 'user') { + let guildsLeft = 0; + const failedToLeave = []; + for (const guild of this.client.guilds.cache.values()) { + if (guild.ownerID === target) { + try { + await guild.leave(); + guildsLeft++; + } catch { + failedToLeave.push(guild.id); + } + } + } + const formatFailed = failedToLeave.length ? failedToLeave.map(id => `\`${id}\``).join(', ') : '_None_'; + await msg.say(`🔨 Left ${guildsLeft} guilds owner by this user. Failed to leave: ${formatFailed}`); + } return msg.say(`🔨 Blacklisted ${type} \`${target}\`.`); } };