public async Task <MatchedMessage> ProcessAsync(string username, AnalysisResult result, string input)
        {
            input = TransformCommandToInput(input);

            List <Tweet> messages = _memoryCache.Get(MESSAGES_TAG) as List <Tweet>;

            if (messages == null)
            {
                messages = await _twitterRepository
                           .GetTweetContentAsync();

                _memoryCache.Add(MESSAGES_TAG, messages, DateTimeOffset.UtcNow.AddHours(1));
            }

            MatchedMessage matchedMessage = ProcessGreetingsMessage(messages, username, result, input);

            if (matchedMessage == null)
            {
                matchedMessage = await PredictWithLUIS(messages, username, input);
            }

            if (matchedMessage == null)
            {
                matchedMessage = ProcessDefaultMessage(messages, username, result, input);
            }

            return(matchedMessage);
        }