public async Task <ExamResult> Pass(ChatIO chatIo, UsersWordsService service, UserWordModel word, UserWordModel[] examList) { var words = word.Word.Split(',').Select(s => s.Trim()).ToArray(); var minCount = words.Min(t => t.Count(c => c == ' ')); if (minCount > 0 && word.AbsoluteScore < minCount * 4) { return(ExamResult.Impossible); } await chatIo.SendMessageAsync($"=====> {word.TranslationAsList} <=====\r\n" + $"Write the translation... "); var userEntry = await chatIo.WaitUserTextInputAsync(); if (string.IsNullOrEmpty(userEntry)) { return(ExamResult.Retry); } if (words.Any(t => string.Compare(userEntry.Trim(), t, StringComparison.OrdinalIgnoreCase) == 0)) { await service.RegisterSuccess(word); return(ExamResult.Passed); } //search for other translation var translationCandidate = await _dictionaryService.GetAllTranslationWords(userEntry.ToLower()); if (translationCandidate.Any(t1 => word.GetTranslations().Any(t2 => string.CompareOrdinal(t1.Trim(), t2.Trim()) == 0))) { //translation is correct, but for other word await chatIo.SendMessageAsync( $"the translation was correct, but the question was about the word '{word.Word} - {word.TranslationAsList}'\r\nlet's try again"); return(ExamResult.Retry); } var translates = string.Join(",", translationCandidate); if (!string.IsNullOrWhiteSpace(translates)) { await chatIo.SendMessageAsync($"'{userEntry}' translates as {translates}"); } await chatIo.SendMessageAsync("The right translation was: " + word.Word); await service.RegisterFailure(word); return(ExamResult.Failed); }
public async Task <ExamResult> Pass(ChatIO chatIo, UsersWordsService service, UserWordModel word, UserWordModel[] examList) { if (!word.Phrases.Any()) { return(ExamResult.Impossible); } var phrase = word.GetRandomExample(); var replaced = phrase.TranslatedPhrase.Replace(phrase.TranslatedWord, "..."); if (replaced == phrase.TranslatedPhrase) { return(ExamResult.Impossible); } var sb = new StringBuilder(); sb.AppendLine($"\"{phrase.OriginPhrase}\""); sb.AppendLine($" translated as "); sb.AppendLine($"\"{replaced}\""); sb.AppendLine(); sb.AppendLine($"Enter missing word: "); await chatIo.SendMessageAsync(sb.ToString()); while (true) { var enter = await chatIo.WaitUserTextInputAsync(); if (string.IsNullOrWhiteSpace(enter)) { continue; } if (string.Compare(phrase.OriginWord, enter.Trim(), StringComparison.OrdinalIgnoreCase) == 0) { await service.RegisterSuccess(word); return(ExamResult.Passed); } await chatIo.SendMessageAsync($"Origin phrase was \"{phrase.TranslatedPhrase}\""); await service.RegisterFailure(word); return(ExamResult.Failed); } }
public async Task <ExamResult> Pass(ChatIO chatIo, UsersWordsService service, UserWordModel word, UserWordModel[] examList) { var translations = word.GetTranslations().ToArray(); var minCount = translations.Min(t => t.Count(c => c == ' ')); if (minCount > 0 && word.AbsoluteScore < minCount * 4) { return(ExamResult.Impossible); } await chatIo.SendMessageAsync($"=====> {word.Word} <=====\r\n" + $"Write the translation... "); var translation = await chatIo.WaitUserTextInputAsync(); if (string.IsNullOrEmpty(translation)) { return(ExamResult.Retry); } if (translations.Any(t => string.Compare(translation.Trim(), t, StringComparison.OrdinalIgnoreCase) == 0)) { await service.RegisterSuccess(word); return(ExamResult.Passed); } var allMeaningsOfWord = await _dictionaryService.GetAllTranslationWords(word.Word); if (allMeaningsOfWord .Any(t => string.Compare(translation, t, StringComparison.OrdinalIgnoreCase) == 0)) { await chatIo.SendMessageAsync( $"Chosen translation is out of scope (but it is correct). Expected translations are: " + word.TranslationAsList); return(ExamResult.Impossible); } await chatIo.SendMessageAsync("The translation was: " + word.TranslationAsList); await service.RegisterFailure(word); return(ExamResult.Failed); }
public async Task <ExamResult> Pass(ChatIO chatIo, UsersWordsService service, UserWordModel word, UserWordModel[] examList) { if (!word.HasAnyPhrases) { return(ExamResult.Impossible); } var targetPhrase = word.GetRandomExample(); string shuffled; while (true) { var wordsInExample = targetPhrase.OriginWords; if (wordsInExample.Length < 2) { return(ExamResult.Impossible); } shuffled = string.Join(" ", wordsInExample.Randomize()); if (shuffled != targetPhrase.OriginPhrase) { break; } } await chatIo.SendMessageAsync("Words in phrase are shuffled. Write them in correct order:\r\n'" + shuffled + "'"); var entry = await chatIo.WaitUserTextInputAsync(); entry = entry.Trim(); if (string.Compare(targetPhrase.OriginPhrase, entry.Trim(), StringComparison.OrdinalIgnoreCase) == 0) { await service.RegisterSuccess(word); return(ExamResult.Passed); } await chatIo.SendMessageAsync($"Original phrase was: '{targetPhrase.OriginPhrase}'"); await service.RegisterFailure(word); return(ExamResult.Failed); }