Пример #1
0
        private async Task <string> GetPostSolo()
        {
            if (_currWord == null) // The bot start the game by saying しりとり
            {
                _currWord = "しりとり";

                _dictionnary.Remove(_dictionnary.Find(x => x.Split('$')[0] == _currWord));
                _alreadySaid.Add("しりとり");
                return("しりとり (shiritori)");
            }
            string[] validWords = GetValidWords();
            if (validWords.Length == 0) // Not supposed to happen
            {
                LooseException le = new LooseException(GetStringFromSentence(Sentences.ShiritoriNoWord));
                await Program.p.LogError(new LogMessage(LogSeverity.Error, le.Source, le.Message, le));

                throw le;
            }
            string word = validWords[Program.p.rand.Next(0, validWords.Length)];

            string[] splitWord = word.Split('$');
            _dictionnary.Remove(word);
            _alreadySaid.Add(splitWord[0]);
            _currWord = Linguist.ToHiragana(splitWord[0]);
            return(splitWord[0] + " (" + Linguist.ToRomaji(splitWord[0]) + ") - " + GetStringFromSentence(Sentences.Meaning) + ": " + splitWord[1]);
        }
Пример #2
0
        protected override async Task <string> GetCheckCorrectAsync(string userAnswer)
        {
            string hiraganaAnswer = ReplaceLocalString(Linguist.ToHiragana(userAnswer));

            if (_currWord == null) // Multiplayer only
            {
                if (hiraganaAnswer != "しりとり")
                {
                    return(GetStringFromSentence(Sentences.ShiritoriExplainBegin));
                }
                _currWord = "しりとり";
                _alreadySaid.Add(_currWord);
                _dictionnary.Remove(_dictionnary.Find(x => x.Split('$')[0] == _currWord));
                return(null);
            }
            if (hiraganaAnswer.Any(c => c < 0x0041 || (c > 0x005A && c < 0x0061) || (c > 0x007A && c < 0x3041) || (c > 0x3096 && c < 0x30A1) || c > 0x30FA))
            {
                return(GetStringFromSentence(Sentences.OnlyHiraganaKatakanaRomaji));
            }
            dynamic json;

            json = JsonConvert.DeserializeObject(await _http.GetStringAsync("http://www.jisho.org/api/v1/search/words?keyword=" + Uri.EscapeDataString(userAnswer)));
            if (json.data.Count == 0)
            {
                return(GetStringFromSentence(Sentences.ShiritoriDoesntExist));
            }
            bool   isCorrect = false, isNoun = false;
            string reading;

            string[] meanings = new string[] { };
            foreach (dynamic s in json.data)
            {
                foreach (dynamic jp in s.japanese)
                {
                    reading = Linguist.ToHiragana((string)jp.reading);
                    if (reading == null)
                    {
                        continue;
                    }
                    reading = ReplaceLocalString(reading);
                    if (reading == hiraganaAnswer)
                    {
                        isCorrect = true;
                        foreach (dynamic meaning in s.senses)
                        {
                            foreach (dynamic partSpeech in meaning.parts_of_speech)
                            {
                                if (partSpeech == "Noun")
                                {
                                    isNoun   = true;
                                    meanings = ((JArray)meaning.english_definitions).Select(x => (string)x).ToArray();
                                    goto ContinueCheck;
                                }
                            }
                        }
                    }
                }
            }
ContinueCheck:
            if (!isCorrect)
            {
                return(GetStringFromSentence(Sentences.ShiritoriDoesntExist));
            }
            string lastCharac = GetLastCharacter(_currWord);

            if (!hiraganaAnswer.StartsWith(ReplaceLocalString(GetLastCharacter(_currWord))))
            {
                return(Sentences.ShiritoriMustBegin(GetGuild(), lastCharac, Linguist.ToRomaji(lastCharac)));
            }
            if (!isNoun)
            {
                return(GetStringFromSentence(Sentences.ShiritoriNotNoun));
            }
            if (GetLastCharacter(hiraganaAnswer) == hiraganaAnswer)
            {
                return(GetStringFromSentence(Sentences.ShiritoriTooSmall));
            }
            if (_alreadySaid.Contains(hiraganaAnswer))
            {
                await LooseAsync(GetStringFromSentence(Sentences.ShiritoriAlreadySaid));

                return("");
            }
            if (hiraganaAnswer.Last() == 'ん')
            {
                await LooseAsync(GetStringFromSentence(Sentences.ShiritoriEndWithN));

                return("");
            }
            var elem = _dictionnary.Find(x => x.Split('$')[0] == hiraganaAnswer);

            if (HaveMultiplayerLobby())
            {
                _endTurnMsg = hiraganaAnswer + " (" + Linguist.ToRomaji(hiraganaAnswer) + ") - " + GetStringFromSentence(Sentences.Meaning) + ": " + string.Join(", ", meanings.Select(x => "\"" + x + "\""));
            }
            _dictionnary.Remove(elem);
            _alreadySaid.Add(hiraganaAnswer);
            _currWord = hiraganaAnswer;
            return(null);
        }