/// <summary>
        /// Triggers when a shard is ready
        /// </summary>
        /// <param name="socketClient">
        /// The socketClient.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        internal async Task ShardReadyAsync(DiscordSocketClient socketClient)
        {
            await socketClient.SetActivityAsync(new Game($"Shard: {socketClient.ShardId}", ActivityType.Watching));

            if (guildCheck)
            {
                if (Client.Shards.All(x => x.Guilds.Any()))
                {
                    if (prefixOverride)
                    {
                        LogHandler.LogMessage($"Bot is in Prefix Override Mode! Current Prefix is: {DatabaseHandler.Settings.PrefixOverride}", LogSeverity.Warning);
                    }


                    if (await DBLApi.InitializeAsync())
                    {
                        LogHandler.LogMessage("Discord Bots List API Initialized.");
                    }
                    else
                    {
                        LogHandler.LogMessage("Discord Bots List API Not Initialized.", LogSeverity.Warning);
                    }

                    Provider.GetRequiredService <TimerService>().Restart();

                    _ = Task.Run(
                        () =>
                    {
                        Limits.Initialize();
                        Waits.Initialize();

                        var handler = Provider.GetRequiredService <DatabaseHandler>();

                        if (!DatabaseHandler.Settings.DenyConfigDeletion)
                        {
                            // Returns all stored guild models
                            var guildIds    = Client.Guilds.Select(g => g.Id).ToList();
                            var missingList = handler.Query <GuildModel>().Where(g => !g.Settings.Config.SaveGuildModel && g.ID != 0).Select(x => x.ID).Where(x => !guildIds.Contains(x)).ToList();

                            foreach (var id in missingList)
                            {
                                handler.Execute <GuildModel>(DatabaseHandler.Operation.DELETE, id: id.ToString());
                                handler.Execute <GuildModel>(DatabaseHandler.Operation.DELETE, id: $"{id}-Tags");
                                handler.Execute <GuildModel>(DatabaseHandler.Operation.DELETE, id: $"{id}-Channels");
                                handler.Execute <GuildModel>(DatabaseHandler.Operation.DELETE, id: $"{id}-Levels");
                            }

                            /*
                             * // Only to be used if migrating from older database where all items were stored in the same guildModel
                             * var convert = Provider.GetRequiredService<GuildModelToServices>();
                             * foreach (var guildId in guildIds)
                             * {
                             *  var model = handler.Execute<GuildModel>(DatabaseHandler.Operation.LOAD, null, guildId);
                             *  if (model != null)
                             *  {
                             *      convert.SplitModelAsync(model);
                             *  }
                             * }
                             */
                        }
                        else
                        {
                            LogHandler.LogMessage("Server configs for servers which do not contain the bot will be preserved!", LogSeverity.Warning);
                        }
                    });

                    // Ensure that this is only run once as the bot initially connects.
                    guildCheck = false;
                }
                else
                {
                    // This will check to ensure that all our servers are initialized, whilst also allowing the bot to continue starting
                    _ = Task.Run(
                        () =>
                    {
                        var handler = Provider.GetRequiredService <DatabaseHandler>();

                        // This will load all guild models and retrieve their IDs
                        var Servers = handler.Query <GuildModel>();
                        var ids     = Servers.Select(s => s.ID).ToList();

                        // Now if the bots server list contains a guild but 'Servers' does not, we create a new object for the guild
                        foreach (var Guild in socketClient.Guilds.Select(x => x.Id))
                        {
                            if (!ids.Contains(Guild))
                            {
                                handler.Execute <GuildModel>(DatabaseHandler.Operation.CREATE, new GuildModel(Guild), Guild);
                            }
                        }
                    });
                }
            }

            LogHandler.LogMessage($"Shard: {socketClient.ShardId} Ready");
            if (!hideInvite)
            {
                LogHandler.LogMessage($"Invite: https://discordapp.com/oauth2/authorize?client_id={Client.CurrentUser.Id}&scope=bot&permissions=2146958591");
                hideInvite = true;
            }
        }