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()); }
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."); } }
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; } } } }
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!"); } }
public Task HandleAsync(string arguments, string channel, CancellationToken cancellationToken) { slackbot.SendMessage(channel, string.IsNullOrWhiteSpace(arguments) ? GetGeneralHelpMessage() : GetDetailedHelpMessage(arguments)); return(Task.CompletedTask); }