Esempio n. 1
0
        private async Task LookupAddressAsync(IncomingMessage incomingMessage, string location)
        {
            if (incomingMessage == null)
            {
                throw new ArgumentNullException("incomingMessage");
            }

            if (location == null)
            {
                throw new ArgumentNullException("location");
            }

            const string googleMapUrl = "http://maps.googleapis.com/maps/api/geocode/json";

            using (var client = new HttpClient())
            {
                var uri      = string.Format("{0}?address={1}&sensor={2}", googleMapUrl, HttpUtility.UrlEncode(location), true);
                var response = await client.GetAsync(uri);

                var body   = JsonConvert.DeserializeObject <dynamic>(await response.Content.ReadAsStringAsync());
                var coords = body.results[0].geometry.location;

                var text = await LookupWeatherAsync((decimal)coords.lat, (decimal)coords.lng);

                await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} {1}", incomingMessage.UserName, text));
            }
        }
Esempio n. 2
0
        private async Task VersionAsync(IncomingMessage incomingMessage)
        {
            var environmentName = ConfigurationManager.AppSettings["EnvironmentName"];
            var version         = typeof(IoC).Assembly.GetName().Version.ToString(3);

            await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("{0} - {1}", environmentName, version));
        }
Esempio n. 3
0
        private async Task GiphyAsync(IncomingMessage incomingMessage, string input)
        {
            Exception exception = null;

            try
            {
                if (string.IsNullOrEmpty(input) || input.ToLower().StartsWith("random"))
                {
                    await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} {1}", incomingMessage.UserName, await Random()));

                    return;
                }

                var random  = new Random();
                var results = await Search(input);

                var max = results.Count();

                var image = max <= 0
                    ? await Random()
                    : results[random.Next(max)];

                await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} {1}", incomingMessage.UserName, image));
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            if (exception != null)
            {
                var response = string.Format("@{0} Umm... something went wrong  \"{1}\" {2}", incomingMessage.UserName, incomingMessage.Text, exception.Message);
                await Slack.SendAsync(incomingMessage.ReplyTo(), response);
            }
        }
Esempio n. 4
0
        private async Task CaptureAsync(IncomingMessage incomingMessage, string resource)
        {
            if (string.IsNullOrEmpty(resource))
            {
                await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} what are you trying to capture?", incomingMessage.UserName));

                return;
            }

            string text;
            object value;

            if (Brain.TryGetValue(resource, out value) == false)
            {
                Brain[resource] = incomingMessage.UserName;

                text = string.Format("{0} captured by @{1}", resource, incomingMessage.UserName);
            }
            else
            {
                text = string.Format("@{0} {1} is being held captive by @{2}", incomingMessage.UserName, resource, value);
            }

            await Slack.SendAsync(incomingMessage.ReplyTo(), text);
        }
Esempio n. 5
0
        private async Task SendAsync(IncomingMessage incomingMessage, string replyTo, string input)
        {
            var response = incomingMessage.Text.StartsWith(incomingMessage.BotName)
                    ? string.Format("@{0} I speak for myself thank you very much!", incomingMessage.UserName)
                    : input;

            await Slack.SendAsync(replyTo, response);
        }
Esempio n. 6
0
        private async Task RespondAsync(IncomingMessage incomingMessage)
        {
            var random    = new Random();
            var responses = GetResponses();
            var response  = responses[random.Next(responses.Length)];

            await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} {1}", incomingMessage.UserName, response));
        }
Esempio n. 7
0
        public override async Task Handle(IncomingMessage incomingMessage)
        {
            var match = Regex.Match(incomingMessage.Text, "foo (.*)", RegexOptions.IgnoreCase);

            if (match.Length > 0)
            {
                await Slack.SendAsync(incomingMessage.ReplyTo(), match.Groups[1].Value);
            }
        }
Esempio n. 8
0
        private async Task LoadAsync(IncomingMessage incomingMessage, string input)
        {
            var users = new List <string>();
            var names = input.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            users.AddRange(names.Where(name => name.ToLower() != incomingMessage.BotName));
            Brain[UsersKey] = string.Join(",", users);

            var response = string.Format("@{0} users loaded. [{1}]", incomingMessage.UserName, string.Join(", ", users));
            await Slack.SendAsync(incomingMessage.ReplyTo(), response);
        }
Esempio n. 9
0
        private async Task ReleaseAsync(IncomingMessage incomingMessage, string resource)
        {
            if (string.IsNullOrEmpty(resource))
            {
                var fields = new List <AttachmentField>();

                foreach (var key in Brain.Keys)
                {
                    fields.Add(new AttachmentField
                    {
                        Value = string.Format("{0} is being held captive by @{1}", key, Brain[key])
                    });
                }

                await Slack.PostAsync(new Attachment
                {
                    Channel = incomingMessage.ReplyTo(),
                    Text    = "Current inmates",
                    Fields  = fields,
                });

                return;
            }

            string text;
            object value;

            if (Brain.TryGetValue(resource, out value))
            {
                if (value.ToString() == incomingMessage.UserName)
                {
                    Brain.Remove(resource);

                    text = string.Format("{0} was released by @{1}", resource, incomingMessage.UserName);
                }
                else
                {
                    text = string.Format("@{0} you can't release {1} can only be released by @{2}", incomingMessage.UserName, resource, value);
                }
            }
            else
            {
                text = string.Format("@{0} {1} has not been captured", incomingMessage.UserName, resource);
            }

            await Slack.SendAsync(incomingMessage.ReplyTo(), text);
        }
Esempio n. 10
0
        private async Task TurnAsync(IncomingMessage incomingMessage, string input)
        {
            var    users = new List <string>();
            object value;

            if (Brain.TryGetValue(UsersKey, out value))
            {
                users.AddRange(value.ToString().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries));
            }
            else
            {
                await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} no users loaded.", incomingMessage.UserName));

                return;
            }

            var random = new Random();
            var user   = users[random.Next(users.Count())];

            var response = string.Format("@{0} is {1}", user, input);
            await Slack.SendAsync(incomingMessage.ReplyTo(), response);
        }
Esempio n. 11
0
        private async Task LoadApiKeyAsync(IncomingMessage incomingMessage, string input)
        {
            Brain[ForcastIoApiKey] = input;

            await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} Forcast.io ApiKey set.", incomingMessage.UserName));
        }
Esempio n. 12
0
        private async Task LoadApiKeyAsync(IncomingMessage incomingMessage, string input)
        {
            Brain[GiphyApiKey] = input;

            await Slack.SendAsync(incomingMessage.ReplyTo(), string.Format("@{0} Giphy ApiKey Set", incomingMessage.UserName));
        }