public async Task <Response> Handle(Message message) { if (!message.Addressed) { return(null); } var match = Regex.Match(message.Text, @"^quote (\S+)$", RegexOptions.IgnoreCase); if (!match.Success) { return(null); } var target = match.Groups[1].Value; var person = await _personProvider.GetPersonByName(message.Channel, target); if (person == null) { return(message.Respond($"Sorry, {message.From.Mention}, I don't know anyone named \"{target}.\"")); } var quoteStore = await _dataStoreProvider.GetDataStore("Quotes"); var quote = await quoteStore.GetRandom(person.Id); if (quote == null) { return(message.Respond($"Sorry, {person.Name} has not said anything quote-worthy yet.")); } return(message.Respond($"<{person.Name}> {quote.Value}")); }
public async Task <string> GetValue(string variable, Message context) { var match = Regex.Match(variable, @"(?:(who)|(to)|(someone))", RegexOptions.IgnoreCase); if (!match.Success) { return(null); } var dataStore = await _dataStoreProvider.GetDataStore("PersonHistory"); if (match.Groups[1].Success) { await dataStore.SetSingle(context.Channel, context.From.Id); return(context.From.Name); } if (match.Groups[2].Success) { // We need to handle this differently since the message might be // addressed to something or someone that isn't a known person. Person to = null; if (context.To != null) { to = await _personProvider.GetPersonByName(context.Channel, context.To); if (to == null) { await dataStore.SetSingle(context.Channel, context.To); return(context.To); } } to = to ?? await GetSomeone(context.Channel) ?? context.From; await dataStore.SetSingle(context.Channel, to.Id); return(to.Name); } if (match.Groups[3].Success) { var someone = await GetSomeone(context.Channel) ?? context.From; await dataStore.SetSingle(context.Channel, someone.Id); return(someone.Name); } return(null); }
public async Task <Response> Handle(Message message) { if (!message.Addressed) { return(null); } var match = Regex.Match(message.Text, @"^remember (\S+) (.+)$", RegexOptions.IgnoreCase); if (!match.Success) { return(null); } var target = match.Groups[1].Value; var search = match.Groups[2].Value; var person = await _personProvider.GetPersonByName(message.Channel, target); if (person == null) { return(message.Respond($"Sorry, {message.From.Mention}, I don't know anyone named \"{target}.\"")); } if (person.Id == message.From.Id) { return(message.Respond($"Sorry, {message.From.Mention}, but you can't quote yourself.")); } var history = await message.Messenger.GetMessageHistory(message.Channel); var matchingMessage = history.Where(x => x.From.Id == person.Id && x.Text.IndexOf(search, 0) > -1).FirstOrDefault(); if (matchingMessage == null) { return(message.Respond($"Sorry, {message.From.Mention}, I don't remember what {target} said about \"{search}.\"")); } var quoteStore = await _dataStoreProvider.GetDataStore("Quotes"); await quoteStore.Add(person.Id, matchingMessage.Text); return(message.Respond($"You got it, {message.From.Mention}.")); }