Esempio n. 1
0
        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}"));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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}."));
        }