public BotMessage GetResponse(ResponseContext context) { using (var db = new DatabaseContext()) { var currentBeefEntries = db.BeefEntries .Where(x => x.ExpiresOn > DateTimeOffset.UtcNow) .OrderBy(x => x.ReportedOn) .ToList(); var resultsTable = currentBeefEntries .ToStringTable( new[] { "Id", "Offender", "Reported By", "Reported On", "Expires On", "Explanation" }, x => x.Id, x => $"{SOChatAccessor.GetUserNameForChatId(x.OffendingChatUserId)} ({x.OffendingChatUserId})", x => x.ReporterUserId, x => x.ReportedOn.ToString("yyyy-MM-dd HH:mm 'UTC'"), x => x.ExpiresOn.ToString("yyyy-MM-dd HH:mm 'UTC'"), x => x.ShortExplanation); var outputMessage = $"Current beefs:{Environment.NewLine}```{resultsTable}```"; return(new BotMessage() { Text = outputMessage }); } }
public override BotMessage GetResponse(ResponseContext context) { var daysOffset = commandPattern.Match(context.Message.Text).Groups[1].Value.Parse <int>(); var minimumDateTime = DateTimeOffset.UtcNow.AddDays(-daysOffset); using (var db = new DatabaseContext()) { var dbEntries = db.BeefEntries .Where(x => x.ReportedOn >= minimumDateTime) .OrderBy(x => x.ReportedOn) .ToList(); var headerLine = $"In the past {daysOffset} days, {dbEntries.Count} beefs have been recorded."; string resultsTable = ""; if (dbEntries.Any()) { resultsTable = dbEntries .ToStringTable( new[] { "Id", "Offender", "Reported By", "Reported On", "Expires On", "Explanation" }, x => x.Id, x => $"{SOChatAccessor.GetUserNameForChatId(x.OffendingChatUserId)} ({x.OffendingChatUserId})", x => x.ReporterUserId, x => x.ReportedOn.ToStandardDisplayString(), x => x.ExpiresOn.ToStandardDisplayString(), x => x.ShortExplanation); resultsTable = $"```{resultsTable}```"; } var outputMessage = $"{headerLine}\n{resultsTable}"; return(new BotMessage { Text = outputMessage }); } }
public override BotMessage GetResponse(ResponseContext context) { var offenderUserId = commandPattern.Match(context.Message.Text).Groups[1].Value.Parse <int>(); using (var db = new DatabaseContext()) { var dbEntries = db.BeefEntries .Where(x => x.OffendingChatUserId == offenderUserId) .OrderBy(x => x.ReportedOn) .ToList(); var openBeefsCount = dbEntries .Where(x => x.ExpiresOn >= DateTimeOffset.UtcNow) .Count(); var headerLine = $"There are currently {dbEntries.Count} beefs recorded against {SOChatAccessor.GetUserNameForChatId(offenderUserId)} ({offenderUserId}), {openBeefsCount} of which are active."; string resultsTable = ""; if (dbEntries.Any()) { resultsTable = dbEntries .ToStringTable( new[] { "Id", "Reported By", "Reported On", "Expires On", "Explanation" }, x => x.Id, x => x.ReporterUserId, x => x.ReportedOn.ToString("yyyy-MM-dd HH:mm 'UTC'"), x => x.ExpiresOn.ToString("yyyy-MM-dd HH:mm 'UTC'"), x => x.ShortExplanation); resultsTable = $"```{resultsTable}```"; } var outputMessage = $"{headerLine}\n{resultsTable}"; return(new BotMessage { Text = outputMessage }); } }
public override BotMessage GetResponse(ResponseContext context) { var beefIds = commandPattern.Match(context.Message.Text) .Groups[1] .Captures .OfType <Capture>() .Select(x => x.Value.Parse <int>()) .ToList(); using (var db = new DatabaseContext()) { var dbEntries = (from dbRecord in db.BeefEntries join beefId in beefIds on dbRecord.Id equals beefId select dbRecord) .OrderBy(x => x.ReportedOn) .ToList(); var outputMessage = ""; if (dbEntries.Count != beefIds.Count) { outputMessage = "*Warning, could not locate all requested entries. Ensure you have typed the Id numbers correctly.*\n\n"; } foreach (var dbEntry in dbEntries) { var header = $"*Id #{dbEntry.Id}*."; var details = $"Reported by {dbEntry.ReporterUserId} on {dbEntry.ReportedOn.ToStandardDisplayString()} against {SOChatAccessor.GetUserNameForChatId(dbEntry.OffendingChatUserId)} ({dbEntry.OffendingChatUserId}). {(dbEntry.HasExpired ? "Expired" : "Expires")} {dbEntry.ExpiresOn.ToStandardDisplayString()}."; var explanation = $"> {dbEntry.Explanation}"; outputMessage += $"{header} {details}\n{explanation}\n"; } return(new BotMessage { Text = outputMessage }); } }