public static async Task FindBadGuilds(bool ignoreExcessiveAmount = false)
        {
            // Create a copy of the GuildSettings
            List <GuildSettings> allGuildSettings = new List <GuildSettings>(Configuration.LoadedConfiguration.DiscordConfig.GuildSettings);

            // Create a list for deregistration candidates
            List <SocketGuildChannel> deregistrationCandidates = new List <SocketGuildChannel>();

            foreach (GuildSettings guildSettings in allGuildSettings)
            {
                foreach (KeyValuePair <ulong, DynamicSettingsData> pair in guildSettings.ChannelSettings)
                {
                    // Get the channel
                    SocketGuildChannel channel = (SocketGuildChannel)DiscordBot.GetChannel(pair.Key);

                    // Check if the channel no longer exists
                    if (channel == null)
                    {
                        continue;
                    }

                    // Get the Permissions
                    ChannelPermissions permissions = channel.Guild.CurrentUser.GetPermissions(channel);

                    // Check if we can't write to this channel
                    if (!permissions.Has(ChannelPermission.SendMessages))
                    {
                        deregistrationCandidates.Add(channel);
                    }
                }
            }

            // Skip deregistration if there are a large number of guilds to deregister
            if (deregistrationCandidates.Count > 5 && !ignoreExcessiveAmount)
            {
                await DiscordBot.LoggingChannel.SendMessageAsync($"**[DiscordUtil]** Skipping deregistration, there seems to be an excessive amount of guilds to deregister ({deregistrationCandidates.Count})");

                return;
            }

            foreach (SocketGuildChannel guildChannel in deregistrationCandidates)
            {
                // Remove the channel settings
                Configuration.LoadedConfiguration.DiscordConfig.GuildSettings.Where(g => g.GuildId == guildChannel.Guild.Id).FirstOrDefault().ChannelSettings.TryRemove(guildChannel.Id, out DynamicSettingsData data);

                // Send a message to this server that their guild has been deregistered
                Embed embed = new EmbedBuilder()
                              .WithTitle("Warning")
                              .WithDescription(Localizer.Localize("discord.guild.deregister", (Language)data.GetSetting("language")))
                              .WithColor(Color.Orange)
                              .Build();

                await DiscordBot.SendMessageToFirstWritableChannel(guildChannel.Guild, embed : embed);

                await DiscordBot.LoggingChannel.SendMessageAsync($"**[Guild]** Deregistered \"#{guildChannel.Name}\" ({guildChannel.Id}) on \"{guildChannel.Guild.Name}\"");
            }
        }
        public static async Task ProcessJoinedGuild(SocketGuild socketGuild)
        {
            // Build an Embed
            Embed embed = new EmbedBuilder()
                          .WithTitle("Welcome")
                          .WithDescription(Localizer.Localize("discord.guild.join", Language.EnglishUS))
                          .WithColor(Color.Blue)
                          .Build();

            await DiscordBot.SendMessageToFirstWritableChannel(socketGuild, embed : embed);

            await DiscordBot.LoggingChannel.SendMessageAsync($"**[Guild]** Joined \"{socketGuild.Name}\" ({socketGuild.Id})");
        }