Example #1
0
        public async Task <IPurposeFullfillment> WorkAsync(IContext context, IKalos message)
        {
            var purposeFullfillment = new PurposeFullfillment();

            if (!context.AddressedToSelf)
            {
                purposeFullfillment.Weight = -1;
                return(purposeFullfillment);
            }

            var matchedWords = new List <IKeyword>();
            await Task.Run(() =>
            {
                foreach (var keyword in OvermindAccessor.GetAllKeywords())
                {
                    if (message.Msg.Contains(keyword.Word))
                    {
                        var previousMatch = matchedWords.FirstOrDefault();
                        if (previousMatch == null)
                        {
                            matchedWords.Add(keyword);
                        }
                        else if (previousMatch.Word.Length < keyword.Word.Length)
                        {
                            matchedWords.Remove(previousMatch);
                            matchedWords.Add(keyword);
                        }
                    }
                }
            });

            if (matchedWords.Count == 0)
            {
                purposeFullfillment.Weight = -1;
                return(purposeFullfillment);
            }

            if (!LastTimeKeywordUsed.ContainsKey(matchedWords[0].Word))
            {
                LastTimeKeywordUsed.Add(matchedWords[0].Word, DateTime.Now);
            }
            else
            {
                if (LastTimeKeywordUsed[matchedWords[0].Word] > DateTime.Now.AddMinutes(-1))
                {
                    purposeFullfillment.Weight = -1;
                    return(purposeFullfillment);
                }
                LastTimeKeywordUsed[matchedWords[0].Word] = DateTime.Now;
            }
            purposeFullfillment.Weight = 100;
            var responses = matchedWords[0].Response.Split('\n');

            foreach (var response in responses)
            {
                var outMessage = MessageCreator.CreateOutgoingMessage(message.Origin, HumanInterface.Name, response);
                purposeFullfillment.AddMessage(outMessage);
            }
            return(purposeFullfillment);
        }
Example #2
0
        private IKalos CreateResponse(IKalos originalMessage, IList <IWhatIs> results)
        {
            var responseText = $"{originalMessage.Sender}, ";
            var builder      = new StringBuilder();

            builder.Append(responseText);
            for (int i = 0; i < results.Count; i++)
            {
                var currentResult = results[i];
                if (i != 0)
                {
                    builder.Append(", ");
                }
                if (i == results.Count - 1 && i != 0)
                {
                    builder.Append("and ");
                }
                if (!string.IsNullOrEmpty(currentResult.Object))
                {
                    builder.Append($"{currentResult.Subject}'s {currentResult.Object} is {currentResult.Answer}");
                }
                else
                {
                    builder.Append($"{currentResult.Subject} is {currentResult.Answer}");
                }
            }
            builder.Append(".");
            responseText = builder.ToString();

            var outMessage = MessageCreator.CreateOutgoingMessage(originalMessage.Origin, HumanInterface.Name, responseText);

            return(outMessage);
        }
Example #3
0
        public async Task <IPurposeFullfillment> WorkAsync(IContext context, IKalos message)
        {
            var purposeFullfillment = new PurposeFullfillment();

            if (!context.AddressedToSelf)
            {
                purposeFullfillment.Weight = -1;
                return(purposeFullfillment);
            }
            var outgoingMessage = MessageCreator.CreateOutgoingMessage(message.Origin, HumanInterface.Name, Response);

            purposeFullfillment.AddMessage(outgoingMessage);
            purposeFullfillment.Weight = 1;

            return(purposeFullfillment);
        }