protected override async Task Handle(GetWatchlist request, CancellationToken cancellationToken) { var Context = request.Context; using var scope = serviceProvider.CreateScope(); var db = scope.ServiceProvider.GetService <BotDbContext>(); var list = await db.Movie.AsQueryable().Where(x => !x.Watched) .OrderBy(x => x.Title) .ToListAsync(); var builder = new TableBuilder <Movie>() { MaxPageLength = 1900 }; builder.AddColumn("Title", "Title", 30); builder.AddColumn("Director", "Director", 20); builder.AddColumn("Runtime", "Runtime"); builder.AddColumn("AddedBy", "AddedByUsername"); var pages = builder.Build(list); foreach (var page in pages) { await Context.Channel.SendMessageAsync("```" + page + "```"); } }
protected override async Task Handle(GetWatchedList request, CancellationToken cancellationToken) { var Context = request.Context; using var scope = serviceProvider.CreateScope(); var db = scope.ServiceProvider.GetService <BotDbContext>(); var list = await db.Movie.AsQueryable().Where(x => x.Watched) .OrderBy(x => x.Title) .ToListAsync(); var returnstring = new StringBuilder(); //foreach (var item in list) //{ // returnstring.AppendLine($"**{ item.Title }** *https://www.imdb.com/title/{ item.Id}*"); //} //var eb = new EmbedBuilder() { Title = "We have watched these movies", Description = returnstring.ToString(), Color = Color.DarkBlue }; //await Context.Channel.SendMessageAsync(embed: eb.Build()); var builder = new TableBuilder <Movie>() { MaxPageLength = 2000 - 6 }; builder.AddColumn("Title", "Title", 25); builder.AddColumn("Director", "Director", 20); builder.AddColumn("WatchedDate", "WatchedDate"); var pages = builder.Build(list); foreach (var page in pages) { await Context.Channel.SendMessageAsync("```" + page + "```"); } }
public void Print(TextWriter writer, LocalReplay resource, int outputMaxWidth) { if (!resource.Details.Processed) { writer.WriteLine("Replay has not been processed"); writer.WriteLine($"Run \"worms process replay {resource.Details.Date:yyyy-MM-dd HH.mm.ss}\" to extract the log"); } else { writer.WriteLine($"Start Time: {resource.Details.Date:yyyy-MM-dd HH.mm.ss}"); writer.WriteLine(); writer.WriteLine("Teams:"); var teamsTable = new TableBuilder(outputMaxWidth); teamsTable.AddColumn("NAME", resource.Details.Teams.Select(x => x.Name).ToList()); teamsTable.AddColumn("PLAYER", resource.Details.Teams.Select(x => x.Machine).ToList()); teamsTable.AddColumn("COLOUR", resource.Details.Teams.Select(x => x.Colour.ToString()).ToList()); TablePrinter.Print(writer, teamsTable.Build()); writer.WriteLine(); writer.WriteLine("Turns:"); var turnsTable = new TableBuilder(outputMaxWidth); turnsTable.AddColumn("NUM", resource.Details.Turns.Select((_, i) => (i + 1).ToString()).ToList()); turnsTable.AddColumn("TEAM", resource.Details.Turns.Select(x => x.Team.Name).ToList()); turnsTable.AddColumn("WEAPONS", resource.Details.Turns.Select(x => string.Join(", ", x.Weapons.Select(GetWeaponText))).ToList()); turnsTable.AddColumn("DAMAGE", resource.Details.Turns.Select(x => string.Join(", ", x.Damage.Select(GetDamageText))).ToList()); TablePrinter.Print(writer, turnsTable.Build()); writer.WriteLine(); writer.WriteLine("Awards:"); writer.WriteLine($"Winner: {resource.Details.Winner}"); } }
public void Print(TextWriter writer, IReadOnlyCollection <ReplayResource> items, int outputMaxWidth) { var tableBuilder = new TableBuilder(outputMaxWidth); tableBuilder.AddColumn("NAME", items.Select(x => x.Date.ToString("yyyy-MM-dd HH.mm.ss")).ToList()); tableBuilder.AddColumn("CONTEXT", items.Select(x => x.Context).ToList()); tableBuilder.AddColumn("PROCESSED", items.Select(x => x.Processed.ToString()).ToList()); tableBuilder.AddColumn("WINNER", items.Select(x => x.Winner.ToString()).ToList()); tableBuilder.AddColumn("TEAMS", items.Select(x => string.Join(", ", x.Teams)).ToList()); var table = tableBuilder.Build(); TablePrinter.Print(writer, table); }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("2792cdda-3eb4-4bd3-b9d6-d81ea492587d", "Result") .AddColumn("3d4b05ba-6fa1-425e-8a32-f72757cd9df7", "Effect") .AddRow("d21314e9-e1df-4368-81ff-81397f602489", row => { row.AddCell("8bc2c85f-a0e9-43ed-a684-441e4dabe1f1", "1"); row.AddCell("e0b13351-856c-4769-a24b-68aec7a802db", "The target is frightened 2."); }) .AddRow("81324bdf-1fd9-4cd8-abf5-97ea41a80e81", row => { row.AddCell("ff6ec7bf-6641-4994-9244-b0d18f10008f", "2"); row.AddCell("1b7b0f66-5aef-4a03-b5ae-f908f6fe64a7", "The target is confused for 1 round."); }) .AddRow("741c39a8-e338-4c7b-8f9d-4aca84862679", row => { row.AddCell("9011d053-b0f6-4183-a9ee-3668646bc7bb", "3"); row.AddCell("bad7459a-c2a6-48c1-b6d8-e776507d88c2", "The target is stupefied 4 for 1 round."); }) .AddRow("1aa818a0-793e-41d3-9aba-86f5f93efa8c", row => { row.AddCell("549c84f9-a3f4-498f-a361-7d0d4f4d9000", "4"); row.AddCell("1dc82c7f-9268-414e-bcef-8d65547a5659", "The target is blinded for 1 round."); }) .AddRow("07585243-10f2-4903-bac5-bf75e3482bb2", row => { row.AddCell("5b9d0d2e-8dc0-48c9-95e6-8fbbd0109a47", "5"); row.AddCell("b96d7dd3-615d-4b1b-ab03-dbce5c17da00", "The target is stunned for 1 round and stupefied 1 for an unlimited duration."); }); return(builder.Build("d432fce3-02e6-4b1a-a9da-0b6ccdd97301")); }
public void Test1() { var builder = new TableBuilder <Movie>(); builder.AddColumn("Id", "Id"); builder.AddColumn("Title", "Title", 20); builder.AddColumn("Director", "Director"); builder.AddColumn("Runtime", "Runtime"); builder.AddColumn("Added", "AddedAt"); var m1 = new Movie() { Id = "tt390430", Title = "Three Billboards Outside Ebbing, Missouri", Director = "Martin McDonagh", Runtime = "1h 55min", AddedAt = DateTime.Now }; var m2 = new Movie() { Id = "tt343234", Title = "Blow the Man Down", Director = "Bridget Savage Cole", Runtime = "1h 31min", AddedAt = DateTime.Now }; var l = new List <Movie>() { m1, m2 }; var result = builder.Build(l); Assert.NotNull(result); //var lines = result.Split(Environment.NewLine); //Assert.Equal(4, lines.Length); //var count = lines[0].Length; //foreach (var line in lines) //{ // Assert.Equal(count, line.Length); //} //output.WriteLine(result); }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("8d4fe099-9f43-4beb-bdeb-fe0c65c8666b", "Dragon Type") .AddColumn("f4328fbe-dd26-4f0b-ba0a-7a2b780f06d1", "Area and Damage Type") .AddColumn("949bd8f3-fee0-4528-bca2-cf1bf56e029f", "Saving Throw") .AddRow("1799cadc-8298-4e3f-a2c9-855595bc24ad", row => { row .AddCell("dde93aa0-7bc6-414d-9ae0-81c68aae7d47", "Black or copper.") .AddCell("bbb57cfd-ab60-42dd-9d94-4c8590dd7f17", "60-foot line of acid.") .AddCell("ba302e6a-e058-4f06-893e-98e2bf35cc21", "Reflex."); }) .AddRow("0e106283-258f-43f0-8380-472280606c9d", row => { row .AddCell("e2610661-da07-4b77-952f-fe74d6b06bd9", "Blue or bronze.") .AddCell("6e110940-8204-4035-86c2-7d03281fd3cd", "60-foot line of electricity.") .AddCell("6c7a16a9-0cbf-4e1b-bf91-35ad0bc82b27", "Reflex"); }) .AddRow("bd5b21d2-e886-4c88-89f6-71e8a916a1ff", row => { row .AddCell("f6caf324-1e2f-480b-879c-dc76ae1e157f", "Brass.") .AddCell("02569c93-391e-4a66-a5ec-12192479af36", "60-foot line of fire.") .AddCell("4977716e-9d7d-40f1-b60a-b173eb49c23c", "Reflex"); }) .AddRow("74a876fa-6879-496d-8d73-4648de1b014c", row => { row .AddCell("22e85977-bb8d-4ed7-ad61-7722c9b63e40", "Green.") .AddCell("e07a7a6d-ec7e-4e76-ad99-b871258f0ba3", "30-foot cone of poison.") .AddCell("3424fbaf-7caa-4204-a44e-dc388130a449", "Fortitude"); }) .AddRow("a6d13064-96bc-4ef8-9c10-f355b69a773b", row => { row .AddCell("c89542bb-4f57-4443-8f68-9663596f81c2", "Gold or red.") .AddCell("d0f69b66-154d-4c35-a8c4-e2b98f2090c1", "30-foot cone of fire.") .AddCell("7eeb0641-a92b-402c-9cdf-8b3b284a3f68", "Reflex"); }) .AddRow("f273d613-2e9b-4628-8e46-798ba6769c28", row => { row .AddCell("0db1ef65-66e9-472e-8a8d-b4bbfe20c103", "Silver or white.") .AddCell("d07c9ade-1a62-4961-8a0c-d4730a1db098", "30-foot cone of cold.") .AddCell("c6cf8ab9-c13a-4196-9501-459ec2be5c85", "Reflex"); }); return(builder.Build("8f257a22-51a5-4dfd-994b-cf61347a5f58")); }
/// <summary> /// Creates the table builder for a specific <see cref="StatisticFeedDefinition" />. /// </summary> /// <returns></returns> private TableBuilder CreateTableBuilder() { var tableBuilder = new TableBuilder(_stringBuilder); foreach (FieldDefinition field in StatisticFeedDefinition.FieldsDefinition) { tableBuilder.AddColumn(new ColumnDefinition { Label = field.Label, Width = field.WidthHint, Alignment = ColumnAlignment.Left }); } tableBuilder.Prepare(); return(tableBuilder); }
public async Task TestScanTokenSize() { var builder = new TableBuilder(_tableName) .AddColumn("key", KuduType.Int8, opt => opt.Key(true)) .SetNumReplicas(1); for (int i = 0; i < 100; i++) { builder.AddColumn($"int64-{i}", KuduType.Int64); } var table = await _client.CreateTableAsync(builder); var tokenBuilder = _client.NewScanTokenBuilder(table); var tokens = await tokenBuilder .IncludeTabletMetadata(false) .IncludeTableMetadata(false) .BuildAsync(); var token = Assert.Single(tokens); var tokenBytes = token.Serialize(); var tokensWithTabletMetadata = await tokenBuilder .IncludeTabletMetadata(true) .IncludeTableMetadata(false) .BuildAsync(); var tokenWithTabletMetadata = Assert.Single(tokensWithTabletMetadata); var tokenWithTabletMetadataBytes = tokenWithTabletMetadata.Serialize(); var tokensWithTableMetadata = await tokenBuilder .IncludeTabletMetadata(false) .IncludeTableMetadata(true) .BuildAsync(); var tokenWithTableMetadata = Assert.Single(tokensWithTableMetadata); var tokenWithTableMetadataBytes = tokenWithTableMetadata.Serialize(); var tokensWithAllMetadata = await tokenBuilder .IncludeTabletMetadata(true) .IncludeTableMetadata(true) .BuildAsync(); var tokenWithAllMetadata = Assert.Single(tokensWithAllMetadata); var tokenWithAllMetadataBytes = tokenWithAllMetadata.Serialize(); Assert.True(tokenWithAllMetadataBytes.Length > tokenWithTableMetadataBytes.Length); Assert.True(tokenWithTableMetadataBytes.Length > tokenWithTabletMetadataBytes.Length); Assert.True(tokenWithTabletMetadataBytes.Length > tokenBytes.Length); }
private async Task <MattermostResponse> HandleList(MattermostRequest req) { var polls = await _dbContext.Polls .Where(p => p.ChannelId == req.channel_id) .OrderByDescending(p => p.CreatedAtUtc) .ToListAsync(); if (!polls.Any()) { return(new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = Langs.NoPollsOnThisChannel }); } var ownerNames = await _mattermostSrv.GetUsersByIds(polls.Select(x => x.OwnerId).Distinct().ToList()); var ownerNamesDictionary = ownerNames.ToDictionary(x => x.id, x => x.username); var table = new TableBuilder(); foreach (var poll in polls) { table .AddColumn("Id", poll.Id.ToString()) .AddColumn("Description", poll.Description) .AddColumn("Created at", poll.CreatedAtUtc.ToLocalTime().ToString("yyyy-MM-dd HH:mm")) .AddColumn("Active", poll.IsActive ? "Yes" : "No") .AddColumn( "Created by", ownerNamesDictionary.ContainsKey(poll.OwnerId) ? ownerNamesDictionary[poll.OwnerId] : "*Deleted*" ); } return(new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = string.Format( Langs.PollList, table.ToString() ) }); }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("b9917bfa-96d3-48c5-bc12-fb530e73db87", "1d4") .AddColumn("e29d1ddf-cb8a-44f3-aa00-23c5d402493b", "Color") .AddColumn("cce1ea2f-a856-428e-8a4d-5aac108cd5cd", "Failure") .AddColumn("5e34d24f-b720-4c64-9126-be13552c2d1f", "Critical Failure") .AddRow("fcf31656-4f89-42da-bf9b-35f209fdeb5c", row => { row .AddCell("f0840b48-88ba-44e2-8cde-fb9e2f6d697c", "1") .AddCell("a0b9d7c1-832e-4c60-908a-50cec6807126", "White") .AddCell("64d74f40-2eb3-471d-9187-01b10f3226c0", "Dazzled 1 round.") .AddCell("8c9a6be8-4153-4682-8ecf-d437772333b0", "Dazzled 1 minute."); }) .AddRow("43f1abd3-b59c-4fcb-a8f9-d25d67561301", row => { row .AddCell("93781c76-8083-4c4e-a028-bd30f1c75d0a", "2") .AddCell("485fd071-daa8-4ec3-83f0-96fa201ad0ac", "Red") .AddCell("07b98d48-04f5-4328-a53e-87445f6bfcd5", "Enfeebled 1 for 1 round.") .AddCell("84f6b213-8315-4f60-a941-15009d662b60", "Enfeebled 2 for 1 round."); }) .AddRow("be37f12e-0f0e-468f-b954-a25ee89c5176", row => { row .AddCell("d3cf00ac-078a-4d6a-8777-6c89229427aa", "3") .AddCell("0f6c0a01-39af-4162-999c-421b3ed3083b", "Yellow") .AddCell("69ba681d-f286-448e-8f49-eeede6ac8061", "Frightened 1.") .AddCell("7a005aaa-c00c-4c68-9c65-b41140dbe588", "Frightened 2."); }) .AddRow("044f0a18-cc33-4c05-9f2e-cc411fe89279", row => { row .AddCell("63a29908-5408-457f-b128-c2e164b1ea58", "4") .AddCell("7f9acb9d-5e79-454f-a1d6-c1e26bd07e88", "Blue") .AddCell("59446203-e584-478e-8991-42706c01e4d8", "Clumsy 1 for 1 round.") .AddCell("56068469-144a-407d-8edc-af02233ad5b3", "Clumsy 2 for 1 round."); }); return(builder.Build("77fab51e-5718-4cbc-93ec-29df80ce3c3b")); }
private static void DisplayNews(ITopNewsResponse response) { CellFormat headerFormat = new CellFormat() { ForegroundColor = Color.LightSeaGreen }; IList <string> columns = new List <string>() { "Name", "Top News ID", "Revision ID", "Revision Date" }; foreach (var category in response.Data.Categories) { Console.WriteLine($"Category: {category.Key}"); var builder = new TableBuilder(headerFormat); foreach (var name in columns) { builder.AddColumn(name); } var table = builder.Build(); table.Config = TableConfig.Unicode(); table.Config.wrapText = true; table.Config.textWrapLimit = 40; IList <object> rowData = new List <object>(); foreach (var page in category.Value) { rowData.Clear(); rowData.Add(page.Page); rowData.Add(page.TopNewsID); rowData.Add(page.RevisionID); rowData.Add(page.RevisionDate); table.AddRow(rowData.ToArray()); } Console.Write(table); } }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("8f8b5c9d-6cb0-414a-bfd7-67ca16dbace9", "1d4") .AddColumn("8d4f4f9b-ee4d-4f2f-971f-7427a586c588", "Realm") .AddColumn("67bcbb99-6a2e-4fd4-b32a-39d3dd0f7a01", "Manifestation") .AddColumn("5ead8a47-ff78-409a-bbfb-2dc8b03f0c88", "Damage Type") .AddRow("f24670a8-4ad0-4d3a-80e4-d1a17e8808ba", row => { row .AddCell("22cb2810-3342-4c02-9c67-7e263af82de8", "1") .AddCell("fbb1b6e3-847b-4514-9d04-bcad5b86a4de", "Skies") .AddCell("a343affe-523e-4573-b6bc-e960eeab1e43", "Bolts of lightning and flying debris.") .AddCell("95dc97f6-d9a3-44fb-94e2-c216ee845a5a", "Bluedgeoning and electricity."); }) .AddRow("59d365af-56c7-43f3-8361-c928974ff538", row => { row .AddCell("9bd06a1e-9c72-4d21-9a23-b9f031433281", "2") .AddCell("33e470b8-f2c4-4b9d-a1c5-d6ed132732a2", "Depths") .AddCell("c7dbb56a-1236-4b69-88e9-059d65b05c6b", "Acid and demonic shells.") .AddCell("b044f702-6f8f-4353-b9cf-a15e2382aa3d", "Acid and slashing"); }) .AddRow("0a1cbdb3-cc9e-4b91-ae08-9c9dc9425185", row => { row .AddCell("1a98ad22-efd6-40a2-83cd-defc27c90d1b", "3") .AddCell("5e651b0d-93da-4ce2-aa39-4c378290acce", "Frozen") .AddCell("3c5693c0-b521-487c-854e-575faef48671", "Frigid air and ice.") .AddCell("806a9c8f-b6b1-4e35-9788-ad2ee9edb58b", "Bludgeoning and cold."); }) .AddRow("c637f33b-5924-4cc6-85a2-cb75d7b5add9", row => { row .AddCell("419cda7d-5946-47e1-9be1-ca59c362c856", "4") .AddCell("5e0fbbd7-11cf-4926-ae54-4ebfd800e9dd", "Volcanic") .AddCell("e9630bd0-a5e6-4ebd-bc5d-f69c3ae3a0cb", "Jagged volcanic rocks and magma.") .AddCell("048af3d4-dc26-4a3f-951e-59c5416cad93", "Fire and piercing."); }); return(builder.Build("3bea2bd8-f9fa-4369-b76b-37486eb7afbf", "You deal 4d6 damage of each of the corresponding types to each creature in the cone(8d6 total damage).")); }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("a995d2ac-862a-4144-a49d-ebe41674b98d", "Creature or Item Level") .AddColumn("5fbc8431-df89-49f0-8031-278de1d821d7", "Spell or Effect Level") .AddColumn("3b3ca2e1-0bae-4139-8a60-a5a67eed076c", "Aura Strength") .AddRow("67704341-3c02-40fa-abf7-7bb01147f9d9", row => { row.AddCell("92b4678a-f0df-4d06-8145-13949c8abf7e", "0-5"); row.AddCell("2c0c37e8-5033-4b6d-bae8-9761cbf12512", "-"); row.AddCell("746c0b3e-83a3-483c-9bc8-c8bbf6c5ba5b", "None"); }) .AddRow("8e5b88b0-47fb-489e-9a1b-6b3c1b03e2f3", row => { row.AddCell("5f27f445-de06-47c7-9d83-a2d8b4f7805c", "6-10"); row.AddCell("d5e05a9d-2570-4d18-a5d0-2158af7c457f", "0-3"); row.AddCell("f1e5b86d-eca6-42f4-856f-b2ed70c38a87", "Faint"); }) .AddRow("93244a11-0097-47dc-94c0-38cb7603a229", row => { row.AddCell("884ab5b0-8f89-4568-944d-9e645aa0f796", "11-15"); row.AddCell("f21212d2-9441-4f9f-91f6-c1b146882597", "4-7"); row.AddCell("7867aa1f-fd1c-4983-979f-cfab25851b17", "Moderate"); }) .AddRow("772692cd-853c-4adc-9c37-2b67f4afd24f", row => { row.AddCell("26aca67e-567e-4abc-bad2-6f8d889d254a", "16-20"); row.AddCell("e49811d9-7330-4803-97b2-48e6eb30c70a", "4-7"); row.AddCell("9fe614a2-f821-48d9-be52-d420b8f69417", "Moderate"); }) .AddRow("6d62d5c6-671a-4023-aa1b-ab989bea290c", row => { row.AddCell("7f98a85c-4835-4940-9abd-ed786424ed0a", "21+"); row.AddCell("0bb5fe75-a9d1-4a4b-bbf4-1cedee2c2d5b", "10"); row.AddCell("a3c30e30-faa2-450f-83bc-f688558f55df", "Overwhelming"); }); return(builder.Build("2258f9cf-0a20-4580-a2dd-66ef4ba69280", "The strength of an alignment aura depends on the level of the creature, item, or spell. The auras of undead, clerics and other divine spellcasters with a patron deity, and creatures from the Outer Sphere are one step stronger than normal (faint instead of none, for example).")); }
public void Print(TextWriter writer, IReadOnlyCollection <SchemeResource> items, int outputMaxWidth) { var tableBuilder = new TableBuilder(outputMaxWidth); tableBuilder.AddColumn("NAME", items.Select(x => x.Name).ToList()); tableBuilder.AddColumn("CONTEXT", items.Select(x => x.Context).ToList()); tableBuilder.AddColumn("HEALTH", items.Select(x => x.Details.WormEnergy.ToString()).ToList()); tableBuilder.AddColumn( "TURN-TIME", items.Select(x => GetTurnTime(x.Details.TurnTimeInfinite, x.Details.TurnTime)).ToList()); tableBuilder.AddColumn( "ROUND-TIME", items.Select(x => GetRoundTime(x.Details.RoundTimeMinutes, x.Details.RoundTimeSeconds)).ToList()); tableBuilder.AddColumn("WORM-SELECT", items.Select(x => x.Details.WormSelect.ToString()).ToList()); tableBuilder.AddColumn("WEAPONS", items.Select(x => GetWeaponSummary(x.Details.Weapons)).ToList()); var table = tableBuilder.Build(); TablePrinter.Print(writer, table); }
private static void DisplayNews(ITopNewsHeadlinesResponse response) { CellFormat headerFormat = new CellFormat() { ForegroundColor = Color.LightSeaGreen }; var builder = new TableBuilder(headerFormat); foreach (var name in new List <string>() { "Publish Date", "Headline", "Story ID" }) { builder.AddColumn(name); } var table = builder.Build(); table.Config = TableConfig.Unicode(); table.Config.wrapText = true; table.Config.textWrapLimit = 40; IList <object> rowData = new List <object>(); foreach (var headline in response.Data.Headlines) { rowData.Clear(); rowData.Add(headline.VersionCreated); rowData.Add(headline.Text); rowData.Add(headline.StoryId); table.AddRow(rowData.ToArray()); } Console.Write(table); }
/// <summary> /// /poll results [ID] /// </summary> private async Task <MattermostResponse> HandlePollResults(MattermostRequest req) { //-send poll results as an ephemeral message var cmdParams = req.text.Split(" ").Select(x => x.Trim()).ToList(); int pollId = 0; if (cmdParams.Count > 1) { //get specific poll answers var pollIdParam = cmdParams[1]; if (!int.TryParse(pollIdParam, out pollId)) { return(new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = Langs.ResultsUsage }); } } else { //get latest poll answers var latestPoll = await _dbContext.Polls .Where(x => x.ChannelId == req.channel_id) .OrderByDescending(x => x.CreatedAtUtc) .FirstOrDefaultAsync(); if (latestPoll == null) { return new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = Langs.ResultsUsage } } ; pollId = latestPoll.Id; } var answers = await( from poll in _dbContext.Polls where poll.ChannelId == req.channel_id && poll.Id == pollId from pollAnswer in _dbContext.PollAnswers.Where(x => x.PollId == poll.Id).DefaultIfEmpty() select pollAnswer ).ToListAsync(); if (answers != null && answers.Any()) { var table = new TableBuilder(); foreach (var answer in answers) { table .AddColumn("User", answer.UserName) .AddColumn("Answer", answer.Answer); } return(new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = table.ToString() }); } else { return(new MattermostResponse() { ResponseType = Common.Consts.ResponseType.Ephemeral, Text = Langs.NoAnswersFound }); } }
protected override Table?GetTable(TableBuilder builder) { builder .AddColumn("6ca123fe-d3de-444e-8e7b-a2312913fd9f", "1d8") .AddColumn("09bfd599-c40b-46a7-a20a-9c6462f5b314", "Color") .AddColumn("1732bfa4-4f69-4877-8669-a63df0d1fabd", "Save") .AddColumn("31d79ecf-61eb-4720-a428-daeb519e4b44", "Effect (Traits)") .AddRow("7c351358-cfa8-432e-a9f6-63084994f3a8", row => { row .AddCell("48194501-c45e-4cbc-8627-1f4c0f4d90a2", "1") .AddCell("3713fc47-41a9-47e4-9e53-5747aa62c6a0", "Red") .AddCell("39fa72a0-237e-4880-8f22-1543791d8daa", "Reflex") .AddCell("f643c2ea-e650-4dec-9d43-97b1c1c70125", "50 fire damage (fire)."); }) .AddRow("27d3bf9f-c660-45df-9e89-492027a410f1", row => { row .AddCell("aad5596d-15e7-4858-92bf-90426d94c329", "2") .AddCell("633a5e12-13d4-4e88-b522-7437e1544dd4", "Orange") .AddCell("018070e7-ce96-478b-a33e-c4ff41857977", "Reflex") .AddCell("838afa4e-e2bc-4e9b-8362-f61f365aa991", "60 acid damage (acid)."); }) .AddRow("7e4fd6be-c972-4977-b727-28df2acf32e6", row => { row .AddCell("2c53e992-d67c-4aed-a997-50302f3e7da9", "3") .AddCell("66252eaa-f04f-4b90-a442-60f25bad3ee2", "Yellow") .AddCell("88da78e9-8b2c-488d-a85e-95840a9a186d", "Reflex") .AddCell("095791cf-28a0-4b20-9e4a-4479a9041081", "70 electricity damage (electricity)."); }) .AddRow("3fdca9cd-e3d4-49df-9482-32a3c38f7051", row => { row .AddCell("f513949f-95bf-48ad-9139-5da25b60f919", "4") .AddCell("2c3b1ba1-a50c-4a4d-88c8-8da50ac12dbb", "Green") .AddCell("96a3d2db-6df7-4d9e-8e24-5caa1c39fbb7", "Fortitude") .AddCell("7d31be5d-f364-48ae-a04c-54d0e2745bf7", "30 poison damage and enfeebled 1 for 1 minute (poison)."); }) .AddRow("51558f46-046a-48e2-8dcc-201b8a9888f7", row => { row .AddCell("d10ca47c-420e-423e-9a7b-811629baef3c", "5") .AddCell("b555850e-ec50-4d7d-9adb-388d9d4dc764", "Blue") .AddCell("245575a1-44b4-44c5-be5c-fdd493757edc", "Fortitude") .AddCell("c56ff7d5-f181-4f85-ac30-5bb35552d772", "Affected as if by flesh to stone."); }) .AddRow("8d9bc647-5119-4bdd-85ea-bd3eedda5d03", row => { row .AddCell("07708ee5-0ac7-4ba6-b10c-242d5a3232f8", "6") .AddCell("9cd860fd-5ddd-4e00-8537-e5255da00cdb", "Indigo") .AddCell("7e25ca2e-d2af-4c50-b5a2-1c9a29e37e2d", "Will") .AddCell("3e3e0c77-f4b0-443c-b9d3-66b261bcc88b", "Confused, as the warp mind spell (mental)."); }) .AddRow("79860964-d0ec-4234-b0ed-abcda815cee6", row => { row .AddCell("4dc94d09-7ef3-4951-9c3e-beeb8dddcbf0", "7") .AddCell("3ae421de-cd42-4620-8a6f-9504ab7652bd", "Violet") .AddCell("19d981f4-68b8-49c9-b9e4-b51f7b748f7f", "Will") .AddCell("3c856f4f-caac-4db3-b4f7-2c76e2893f03", "Slowed 1 for 1 minute; if a critical failure, sent to another plane, as plane shift (teleportation)."); }) .AddRow("40e8b921-e62c-4ed0-aa8c-e93e7334152e", row => { row .AddCell("63c16510-4d11-439d-8179-e3e8dd45786d", "8") .AddCell("f5a5715f-b496-4bca-a2f2-5e52964753fa", "Potent Beam") .AddCell("131297f2-aaab-458e-91d0-ca1e3278ff60", "-") .AddCell("fc30d3e9-7541-4fb6-9a8b-530e4c26e3d1", "Affected by two beams - roll twice, rerolling any duplicates or results of 8."); }); return(builder.Build("755b85a4-3292-4c5e-b898-f89e5e06e9b1")); }
/// <summary> /// 添加列 /// </summary> /// <param name="name">列名</param> /// <param name="valueExpression">值的表达式</param> /// <returns></returns> public ExcelResultBuilder <T> AddColumn(string name, Func <T, object> valueExpression) { _tableBuilder.AddColumn(name, valueExpression); return(this); }
// DisplayRows // Generic routine to display the rows of a table public static void DisplayRows(DataColumnCollection columns, IEnumerable <DataRow> rows, int maxCols = 0, int maxRows = 0) { CellFormat headerFormat = new CellFormat() { ForegroundColor = Color.LightSeaGreen }; var builder = new TableBuilder(headerFormat); var displayCols = maxCols <= 0 ? columns.Count : maxCols; foreach (DataColumn col in columns) { builder.AddColumn(col.ColumnName); if (--displayCols == 0) { break; } } if (maxCols > 0 && maxCols < columns.Count) { builder.AddColumn($"{columns.Count - maxCols} more"); } var table = builder.Build(); table.Config = TableConfig.Unicode(); table.Config.wrapText = true; table.Config.textWrapLimit = 40; var rowCount = rows.ToArray().Length; var displayRows = maxRows <= 0 ? rowCount : maxRows; displayCols = maxCols <= 0 ? columns.Count : maxCols; IList <object> rowData = new List <object>(); foreach (DataRow dataRow in rows) { foreach (object item in dataRow.ItemArray) { if (rowData.Count == displayCols) { rowData.Add("..."); break; } switch (item) { case null: break; case JValue val: var str = val.ToString(); rowData.Add(str); break; case IEnumerable <JToken> list: rowData.Add($"[{string.Join(", ", list.Select(node => $"{node}"))}]"); break; default: rowData.Add(item); break; } } table.AddRow(rowData.ToArray()); rowData.Clear(); if (--displayRows == 0) { break; } } if (maxRows > 0 && maxRows < rowCount) { table.AddRow($"<{rowCount - maxRows} more>..."); } Console.Write(table); }