private async Task<TelegramBotReply> Step1(TelegramBot.TelegramBot bot, Message m, CustomRoosterMessageFlowObject flow)
 {
     //Step1 faalt altijd, er is altijd step 3 vereist
     MessageFlow.Failed();
     if (flow.IsDocent)
     {
         var values = m.Text.ToLower().Trim().Split(' ');
         foreach (var doc in await WindesheimRoosterConvertor.GetDocentenLijst())
         {
             string docCode = doc.Name.ToLower(), docName = doc.DisplayName.ToLower();
             bool hit = true;
             foreach(var value in values)
             {
                 if (!docCode.Contains(value) && !docName.ToLower().Contains(value))
                 {
                     hit = false;
                     break;
                 }
             }
             if (hit && flow.AddDocent(doc) > 10) //als we een hit hebben, voegen we een docent toe, als deze docent de 11e is stoppen we met toevoegen want dat zijn teveel resultaten
                 break;
         }
         var count = flow.DocentCount;
         if (count == 1)
             return Message(m, $"Ok, welk rooster wil je van '{flow.Docent}' zien?", replyMarkup: Keyboard);
         else if (count > 10)
         {
             flow.Docenten = null;
             return Message(m, "Er zijn meer dan 10 docenten gevonden die aan je zoekopdracht voldoen.\r\nJe dient iets specifieker te zijn in je vraag.", replyMarkup: ForceReply.Instance);
         }
         else if (count > 1) //count zit tussen 2 en 10
             return Message(m, "Er zijn meerdere docenten gevonden! Van welke docent wil je het rooster zien?", replyMarkup: KeyboardForDocenten(flow.Docenten));
     }
     else
     {
         var value = m.Text.ToLower().Trim();
         foreach (var klas in await WindesheimRoosterConvertor.GetKlassenLijst())
             if (klas.Name.ToLower() == value)
             {
                 flow.Klas = klas;
                 return Message(m, $"Ok, welk rooster wil je van de klas {klas} zien?", replyMarkup: Keyboard);
             }
     }
     var codeType = flow.IsDocent ? "docentcode" : "klascode";
     return Message(m, $"Het is niet gelukt! De {codeType} {m.Text} is niet gevonden!\r\nJe kunt op /annuleer tikken om te stoppen.", replyMarkup: ForceReply.Instance);
 }
 private async Task<TelegramBotReply> Step3(TelegramBot.TelegramBot bot, Message m, CustomRoosterMessageFlowObject flow)
 {
     var text = m.Text;
     if (text == "deze week")
         text = "rooster";
     return await WindesheimBot.RoosterMessageHandler.GetRoosterForDocentOrKlas($"/{text}", null, m.From, (RoosterFor)flow.Klas ?? flow.Docent, useUserPreferences: false);
 }
        protected async override Task<TelegramBotReply> HandleMessageAsync(TelegramBot.TelegramBot bot, Message m, MessageHandlerType type)
        {
            if (!m.HasArguments)
            {
                var flowObj = new CustomRoosterMessageFlowObject(m.Command == SLASHDOCENTROOSTER) { Handler = _replyHandler };
                m.From.MessageFlow = new MessageFlow(m.From, flowObj);
                if (m.Command == SLASHDOCENTROOSTER)
                    return Message(m, "Van welke docent wil je het rooster zien? Vul de naam, of docentcode in.", replyMarkup: ForceReply.Instance);
                else
                    return Message(m, "Van welke klas wil je het rooster zien? Vul de klascode in.", replyMarkup: ForceReply.Instance);

            }
            RoosterFor roosterFor = null;
            var code = m.Arguments[0].ToLower();
            switch (m.Command)
            {
                case SLASHDOCENTROOSTER:
                    foreach(var d in await WindesheimRoosterConvertor.GetDocentenLijst())
                        if(d.Name.ToLower() == code)
                        {
                            roosterFor = d;
                            break;
                        }
                    break;
                case SLASHKLASROOSTER:
                    foreach(var k in await WindesheimRoosterConvertor.GetKlassenLijst())
                        if(k.Name.ToLower() == code)
                        {
                            roosterFor = k;
                            break;
                        }
                    break;
            }
            if (roosterFor != null)
            {
                string[] arguments = null;
                if (m.Arguments.Length >= 2)
                {
                    arguments = new string[m.Arguments.Length - 1];
                    for (var i = 1; i < m.Arguments.Length; i++)
                        arguments[i - 1] = m.Arguments[i];
                }
                return await WindesheimBot.RoosterMessageHandler.GetRoosterForDocentOrKlas(RoosterMessageHandler.SLASHCOMMAND, arguments, m.From, roosterFor);
            }
            var commandName = m.Command == SLASHDOCENTROOSTER ? "docent" : "klas";
            return Message(m, $"De {commandName} met code '{m.Arguments[0]}' is niet gevonden.");
        }
 private TelegramBotReply Step2(TelegramBot.TelegramBot bot, Message m, CustomRoosterMessageFlowObject flow)
 {
     MessageFlow.Failed();
     //Step2 faalt altijd, er is altijd step 3 vereist
     foreach(var doc in flow.Docenten)
         if(doc.ToString() == m.Text)
         {
             flow.Docent = doc;
             break;
         }
     if (flow.Docent == null)
         return Message(m, "Onjuiste invoer! Gebruik de toetsen op het toetsenbord!\r\nJe kunt op /annuleer tikken om te stoppen.", replyMarkup: KeyboardForDocenten(flow.Docenten));
     flow.Docenten = null;
     return Message(m, $"Ok, welk rooster wil je van '{flow.Docent}' zien?", replyMarkup: Keyboard);
 }