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); }
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); }
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); }