Example #1
0
        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
                });
            }
        }
Example #2
0
        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
                });
            }
        }
Example #3
0
        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
                });
            }
        }