예제 #1
0
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            Match match = regex.Match(arguments ?? string.Empty);

            if (match.Success)
            {
                int days = Math.Min(Math.Max(int.Parse(match.Groups[1].Value), 1), 7);
                FilterDefinition <Menu> filter = $"{{Date: {{ $gte: '{DateTime.Today:yyyyMMdd}', $lt: '{DateTime.Today.AddDays(days):yyyyMMdd}' }} }}";
                IEnumerable <Menu>      menus  = await menuRepository.ToListAsync(filter, cancellationToken) ?? new List <Menu>();

                if (menus.Any())
                {
                    var sb = new StringBuilder();

                    foreach (Menu menu in menus)
                    {
                        DateTime date = DateTime.ParseExact(menu.Date, "yyyyMMdd", CultureInfo.InvariantCulture);
                        sb.Append($"On *{date:dd.MM.yyyy}* the meals are:{Environment.NewLine}{menu}{Environment.NewLine}{Environment.NewLine}");
                    }

                    slackbot.SendMessage(channel, sb.ToString().Trim());
                }
                else
                {
                    slackbot.SendMessage(channel, $"I don't know which meals are being served the next {days} days!");
                }
            }
            else
            {
                slackbot.SendMessage(channel, "You need to provide some valid input.");
            }
        }
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            var      sb      = new StringBuilder();
            Process  process = Process.GetCurrentProcess();
            TimeSpan uptime  = DateTime.Now - process.StartTime;

            sb.AppendLine("*AspNetCore Runtime*");
            sb.AppendLine($"Version: {GetNetCoreVersion()}");
            sb.AppendLine();
            sb.AppendLine("*Service*");
            sb.AppendLine($"Private Memory: {process.PrivateMemorySize64 / 1024 / 1024} MB");
            sb.AppendLine($"Virtual Memory: {process.VirtualMemorySize64 / 1024 / 1024} MB");
            sb.AppendLine($"Working Memory: {process.WorkingSet64 / 1024 / 1024} MB");
            sb.AppendLine($"Total Memory: {GC.GetTotalMemory(false) / 1024 / 1024} MB");
            sb.AppendLine($"Starttime: {process.StartTime:u}");
            sb.AppendLine($"Uptime: {uptime.Days} days, {uptime.Hours} hours, {uptime.Minutes} minutes, {uptime.Seconds} seconds");
            sb.AppendLine();
            sb.AppendLine("*Database*");
            sb.AppendLine($"Saved menus: {await menuRepository.CountAsync(_ => true, cancellationToken)}");
            sb.AppendLine();
            sb.AppendLine("*Contribution*");
            sb.AppendLine("https://github.com/nalla/deathstar-canteen");

            slackbot.SendMessage(channel, sb.ToString());
        }
예제 #3
0
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            Match match = regex.Match(arguments ?? string.Empty);

            if (match.Success)
            {
                string date          = $"{match.Groups[3].Value}{match.Groups[2].Value}{match.Groups[1]}";
                string formattedDate = $"{match.Groups[1].Value}.{match.Groups[2].Value}.{match.Groups[3].Value}";
                string meal          = match.Groups[4].Value;
                Menu   menu          = await menuRepository.SingleOrDefaultAsync(x => x.Date == date, cancellationToken);

                if (menu != null)
                {
                    if (menu.Meals.Contains(meal))
                    {
                        slackbot.SendMessage(channel, $"_{meal}_ is already on the menu on *{formattedDate}*!");
                    }
                    else
                    {
                        List <string> list = menu.Meals.ToList();

                        list.Add(meal);
                        menu.Meals = list.ToArray();
                        await menuRepository.ReplaceOneAsync(x => x.Id == menu.Id, menu, cancellationToken);

                        slackbot.SendMessage(channel, $"I added _{meal}_ to the menu on *{formattedDate}*.");
                    }
                }
                else
                {
                    menu = new Menu
                    {
                        Date  = date,
                        Meals = new[] { meal },
                    };
                    await menuRepository.InsertOneAsync(menu, cancellationToken);

                    slackbot.SendMessage(channel, $"I added _{meal}_ to the menu on *{formattedDate}*.");
                }
            }
            else
            {
                slackbot.SendMessage(channel, "You need to provide some valid input.");
            }
        }
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            DateTime date = DateTime.Today.AddDays(1);
            Menu     menu = await menuRepository.SingleOrDefaultAsync(x => x.Date == date.ToString("yyyyMMdd"), cancellationToken);

            string response = menu == null
                                ? "I don't know which meals are being served tomorrow!"
                                : $"Tomorrow is the *{date:dd.MM.yyyy}* and the meals are:{Environment.NewLine}{menu}";

            slackbot.SendMessage(channel, response);
        }
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            if (regex.IsMatch(arguments ?? string.Empty))
            {
                FilterDefinition <Menu> filter = $"{{Meals: {{ $regex: '.*{arguments}.*' }}, Date: {{ $gte: '{DateTime.Today:yyyyMMdd}' }} }}";
                IEnumerable <Menu>      menus  = await menuRepository.ToListAsync(filter, cancellationToken) ?? new List <Menu>();

                if (menus.Any())
                {
                    slackbot.SendMessage(channel, menus.Count() <= 10 ? GetMessage(menus).Trim() : "I found more than 10 menus. Please be more precise.");
                }
                else
                {
                    slackbot.SendMessage(channel, "I found nothing.");
                }
            }
            else
            {
                slackbot.SendMessage(channel, "You need to provide some valid input.");
            }
        }
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            var url = new Url((arguments ?? string.Empty).TrimStart('<').TrimEnd('>'));

            if (!url.IsValid())
            {
                slackbot.SendMessage(channel, "You need to provide a well formed url.");

                return;
            }

            try
            {
                Menu[] menus = await url.GetJsonAsync <Menu[]>(cancellationToken);

                var i = 0;

                foreach (Menu menu in menus)
                {
                    // ReSharper disable once InvertIf
                    if (regex.IsMatch(menu.Date ?? string.Empty) &&
                        menu.Meals?.Length > 0 &&
                        menu.Meals.All(x => !string.IsNullOrWhiteSpace(x)) &&
                        await menuRepository.CountAsync(x => x.Date == menu.Date, cancellationToken) == 0)
                    {
                        await menuRepository.InsertOneAsync(menu, cancellationToken);

                        i++;
                    }
                }

                slackbot.SendMessage(channel, $"I imported {i} menus.");
            }
            catch (Exception e)
            {
                logger.LogError(e, e.Message);
                slackbot.SendMessage(channel, "I got an error while downloading the url you provided.");
            }
        }
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            Match match = regex.Match(arguments ?? string.Empty);

            if (match.Success)
            {
                string date          = $"{match.Groups[3].Value}{match.Groups[2].Value}{match.Groups[1]}";
                string formattedDate = $"{match.Groups[1].Value}.{match.Groups[2].Value}.{match.Groups[3].Value}";
                string response      = $"There is no menu on *{formattedDate}*!";

                if (await menuRepository.DeleteOneAsync(x => x.Date == date, cancellationToken) == 1)
                {
                    response = $"I cleared the menu on *{formattedDate}*.";
                }

                slackbot.SendMessage(channel, response);
            }
            else
            {
                slackbot.SendMessage(channel, "You need to provide some valid input.");
            }
        }
예제 #8
0
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            Match match = regex.Match(arguments ?? string.Empty);

            if (match.Success)
            {
                switch (match.Groups[1].Value)
                {
                case "add":

                    await chatResponseRepository.AddAsync(match.Groups[2].Value, match.Groups[3].Value);

                    slackbot.SendMessage(channel, "I added your chat response to my AI.");

                    break;

                case "remove":
                    if (await chatResponseRepository.RemoveAsync(match.Groups[2].Value))
                    {
                        slackbot.SendMessage(channel, "I just forgot your response. Can't remember a thing.");
                    }

                    break;
                }
            }
            else
            {
                foreach (ChatResponse chatResponse in await chatResponseRepository.GetAsync(cancellationToken))
                {
                    if (new Regex(chatResponse.Regex).IsMatch(arguments ?? string.Empty))
                    {
                        slackbot.SendMessage(channel, chatResponse.Response);

                        break;
                    }
                }
            }
        }
예제 #9
0
        public async Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            int      diff                  = CalculateDifference();
            DateTime startOfNextWeek       = DateTime.Today.AddDays(diff).Date;
            FilterDefinition <Menu> filter = $"{{Date: {{ $gte: '{DateTime.Today:yyyyMMdd}', $lt: '{startOfNextWeek:yyyyMMdd}' }} }}";
            IEnumerable <Menu>      menus  = await menuRepository.ToListAsync(filter, cancellationToken) ?? new List <Menu>();

            if (menus.Any())
            {
                var sb = new StringBuilder();

                foreach (Menu menu in menus)
                {
                    DateTime date = DateTime.ParseExact(menu.Date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    sb.Append($"On *{date:dd.MM.yyyy}* the meals are:{Environment.NewLine}{menu}{Environment.NewLine}{Environment.NewLine}");
                }

                slackbot.SendMessage(channel, sb.ToString().Trim());
            }
            else
            {
                slackbot.SendMessage(channel, "I don't know which meals are being served this week!");
            }
        }
예제 #10
0
        public Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken)
        {
            slackbot.SendMessage(channel, string.IsNullOrWhiteSpace(arguments) ? GetGeneralHelpMessage() : GetDetailedHelpMessage(arguments));

            return(Task.CompletedTask);
        }