internal async Task<TelegramBotReply> GetRoosterForDocentOrKlas(string command, string[] arguments, User from, RoosterFor roosterFor, bool useUserPreferences = true)
        {

            if (roosterFor == null)
                return Message(from.ID, "Je hebt nog geen klas of docent gekoppeld!\n\rGebruik /klas om een klas te koppelen, of /docent om een docent te koppelen");
            var date = DateTime.Now;
            var userPreferences = PreferenceRegistry.GetUserPreferencesForUser(from);
            DateTime? restrict = null;
            switch (command.ToLower())
            {
                case "/rooster":
                    if (arguments != null && arguments.Length > 0)
                    {
                        string[] datesStr = arguments[0].Split('-');
                        if (datesStr.Length < 2)
                            return WrongDateFormat(from.ID);
                        int[] datesInt = new int[datesStr.Length];
                        for (var i = 0; i < datesStr.Length; i++)
                            try
                            {
                                datesInt[i] = Convert.ToInt32(datesStr[i]);
                            }
                            catch (FormatException)
                            {
                                return WrongDateFormat(from.ID);
                            }
                        try
                        {
                            date = new DateTime(datesInt.Length >= 3 ? datesInt[2] : date.Year, datesInt[1], datesInt[0]);
                            if (Math.Abs((DateTime.Now - date).TotalDays) > 365)
                                return WrongDateFormat(from.ID);

                        }
                        catch (ArgumentOutOfRangeException) //Thrown door DateTime als er onjuiste gegevens in staan.
                        {
                            return WrongDateFormat(from.ID);
                        }
                        if (arguments?.Length > 1 && arguments[1] == "week")
                            date = date.WeekendDate();
                        else
                            restrict = date;
                    }
                    else
                    {
                        date = date.WeekendDate();
                    }
                    break;
                case "/vandaag":
                    restrict = date;
                    break;
                case "/morgen":
                    var morgen = date.AddDays(1);
                    date = morgen;
                    restrict = morgen;
                    break;
                case "/volgendeweek":
                    date = date.WeekendDate().AddDays(7);
                    break;
                default:
                    return Message(from.ID, "Er is iets fout gegaan bij het verwerken van je verzoek");
            }
            var result = useUserPreferences ? await GetResult(userPreferences, date, restrict) : await GetResult(roosterFor, date, restrict);
            var rooster = result.Rooster;
            if (rooster == null)
                return Message(from.ID, result != null ? result.ErrorMessage : "Er is iets fout gegaan bij het ophalen van het rooster.");
            else if (CountWithoutIgnoredLessen(rooster.Lessen, PreferenceRegistry.GetUserPreferencesForUser(from)) == 0)
            {
                string value = null;
                switch (command.ToLower())
                {
                    case "/rooster":
                        value = "deze week"; break;
                    case "/vandaag":
                        value = "vandaag"; break;
                    case "/morgen":
                        value = "morgen"; break;
                    case "/volgendeweek":
                        value = "volgende week"; break;
                }
                return Message(from.ID, $"Je hebt {value} geen lessen");
            }
            return FormatRoosterResponse(rooster,from);
        }
 private async Task<RoosterFetchResult> GetResult(RoosterFor roosterFor, DateTime date, DateTime? restrict = null)
     => await WindesheimRoosterConvertor.GetRooster(roosterFor, date, restrictToDate: restrict);