public IReadOnlyCollection <ClientMsgHandler> OnBotSteamHandlersInit([NotNull] Bot bot)
        {
            AchievementHandler CurrentBotAchievementHandler = new AchievementHandler();

            AchievementHandlers.TryAdd(bot, CurrentBotAchievementHandler);
            return(new HashSet <ClientMsgHandler> {
                CurrentBotAchievementHandler
            });
        }
        private static async Task <string?> ResponseAchievementSet(ulong steamID, Bot bot, string appid, string AchievementNumbers, bool set = true)
        {
            if (!bot.HasPermission(steamID, BotConfig.EPermission.Master))
            {
                return(null);
            }

            if (string.IsNullOrEmpty(AchievementNumbers))
            {
                return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorObjectIsNull, nameof(AchievementNumbers))));
            }
            if (!uint.TryParse(appid, out uint appId))
            {
                return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorIsInvalid, nameof(appId))));
            }

            if (!AchievementHandlers.TryGetValue(bot, out AchievementHandler? AchievementHandler))
            {
                return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorIsEmpty, nameof(AchievementHandlers))));
            }

            if (AchievementHandler == null)
            {
                bot.ArchiLogger.LogNullError(nameof(AchievementHandler));
                return(null);
            }

            HashSet <uint> achievements = new HashSet <uint>();

            string[] achievementStrings = AchievementNumbers.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            if (!AchievementNumbers.Equals("*"))
            {
                foreach (string achievement in achievementStrings)
                {
                    if (!uint.TryParse(achievement, out uint achievementNumber) || (achievementNumber == 0))
                    {
                        return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorParsingObject, achievement)));
                    }

                    achievements.Add(achievementNumber);
                }
                if (achievements.Count == 0)
                {
                    return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorIsEmpty, "Achievements list")));
                }
            }
            return(bot.Commands.FormatBotResponse(await Task.Run <string>(() => AchievementHandler.SetAchievements(bot, appId, achievements, set)).ConfigureAwait(false)));
        }
        //Responses

        private static async Task <string?> ResponseAchievementList(ulong steamID, Bot bot, string appids)
        {
            if (!bot.HasPermission(steamID, BotConfig.EPermission.Master))
            {
                return(null);
            }

            string[] gameIDs = appids.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            if (gameIDs.Length == 0)
            {
                return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorIsEmpty, nameof(gameIDs))));
            }
            if (AchievementHandlers.TryGetValue(bot, out AchievementHandler? AchievementHandler))
            {
                if (AchievementHandler == null)
                {
                    bot.ArchiLogger.LogNullError(nameof(AchievementHandler));
                    return(null);
                }

                HashSet <uint> gamesToGetAchievements = new HashSet <uint>();

                foreach (string game in gameIDs)
                {
                    if (!uint.TryParse(game, out uint gameID) || (gameID == 0))
                    {
                        return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorParsingObject, nameof(gameID))));
                    }

                    gamesToGetAchievements.Add(gameID);
                }


                IList <string> results = await Utilities.InParallel(gamesToGetAchievements.Select(appID => Task.Run <string>(() => AchievementHandler.GetAchievements(bot, appID)))).ConfigureAwait(false);

                List <string> responses = new List <string>(results.Where(result => !string.IsNullOrEmpty(result)));

                return(responses.Count > 0 ? bot.Commands.FormatBotResponse(string.Join(Environment.NewLine, responses)) : null);
            }
            else
            {
                return(bot.Commands.FormatBotResponse(string.Format(Strings.ErrorIsEmpty, nameof(AchievementHandlers))));
            }
        }