Пример #1
0
        public async Task Template()
        {
            var config = _epgpConfigurationService.GetConfiguration();

            if (!config.Templates.Any())
            {
                await ReplyAsync($"No raid templates are currently configured. Try !{GroupName} help");

                return;
            }
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Template ID")
                              .AddColumn("EP Start Bonus")
                              .AddColumn("EP End Bonus")
                              .AddColumn("Duration")
                              .AlternateRowColors();

            foreach (var template in config.Templates)
            {
                pageBuilder.AddRow(new[]
                {
                    template.TemplateId,
                    $"{template.StartBonus} EP",
                    $"{template.EndBonus} EP",
                    TimeSpan.FromMinutes(template.RaidDurationMinutes).ToString("g")
                });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #2
0
        public async Task PrintTemplateInfo(string templateId)
        {
            var template = await GetTemplate(templateId);

            if (template == null)
            {
                await ReplyAsync("No template by that name could be found");

                return;
            }

            var kvps        = _templateConfigurationService.GetPropertyData(template);
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Property Key")
                              .AddColumn("Property Name")
                              .AddColumn("Current Value")
                              .AlternateRowColors();

            pageBuilder.AddRow(new[] { "N/A", "Template Name", template.Id });
            foreach (var kvp in kvps)
            {
                pageBuilder.AddRow(new[] { kvp.Key.ToString(), kvp.Name, kvp.Value.ToString() });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #3
0
        public async Task Configuration()
        {
            var config      = _epgpConfigurationService.GetConfiguration();
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Configuration Property Key")
                              .AddColumn("Property Name")
                              .AddColumn("Value")
                              .AlternateRowColors();

            var properties = config.GetType().GetProperties()
                             .Where(pi => Attribute.IsDefined(pi, typeof(ConfigurationKeyAttribute)));

            foreach (var propertyInfo in properties)
            {
                var    key         = propertyInfo.GetCustomAttribute <ConfigurationKeyAttribute>().Key;
                var    name        = propertyInfo.Name;
                var    value       = propertyInfo.GetValue(config);
                string valueString = string.Empty;
                if (((int)value).ToString() != value.ToString())
                {
                    valueString = $" ({value.ToString()})";
                }
                pageBuilder.AddRow(new[] { key.ToString(), name, $"{(int)value}{valueString}" });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #4
0
        public async Task Template(string templateId)
        {
            EpgpRaidTemplate template;

            try
            {
                template = _epgpConfigurationService.GetTemplate(templateId);
            }
            catch (ArgumentException ex)
            {
                await ReplyAsync(ex.Message);

                return;
            }
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Configuration Property Key")
                              .AddColumn("Property Name")
                              .AddColumn("Value")
                              .AlternateRowColors()
                              .AddRow(new[] { "N/A", nameof(EpgpRaidTemplate.TemplateId), template.TemplateId });

            var properties = template.GetType().GetProperties()
                             .Where(pi => Attribute.IsDefined(pi, typeof(ConfigurationKeyAttribute)));

            foreach (var propertyInfo in properties)
            {
                var key   = propertyInfo.GetCustomAttribute <ConfigurationKeyAttribute>().Key;
                var name  = propertyInfo.Name;
                var value = propertyInfo.GetValue(template);
                pageBuilder.AddRow(new[] { key.ToString(), name, value.ToString() });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #5
0
        private async Task Report(IMessageChannel messageChannel, IEnumerable <EpgpAlias> aliases)
        {
            var formatBuilder = new PageFormatBuilder()
                                .AlternateRowColors()
                                .AddColumn("Member")
                                .AddColumn("EP")
                                .AddColumn("GP")
                                .AddColumn("PR");

            //var header = $"{Header}\n{HorizontalRule}";
            //var formattedAliases = new List<string>();
            //var alternate = false;
            foreach (var alias in aliases)
            {
                formatBuilder.AddRow(new[]
                {
                    alias.Name,
                    alias.EffortPoints.ToString(),
                    alias.GearPoints.ToString(),
                    ((double)alias.EffortPoints / alias.GearPoints).ToString("F2")
                });
            }

            await _pageService.SendPages(messageChannel, formatBuilder.Build());
        }
Пример #6
0
        public async Task PrintConfig()
        {
            var config = await AddOrGetRaidTemplate();

            var configPropertyData =
                _templateConfigurationService.GetPropertyData(config).ToList().OrderBy(pi => pi.Key);
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Property Key")
                              .AddColumn("Property Name")
                              .AddColumn("Current Value")
                              .AlternateRowColors();

            foreach (var kvp in configPropertyData)
            {
                var valueString = kvp.Value.ToString();
                if (kvp.Key == typeof(RecurringRaidTemplate)
                    .GetProperty(nameof(RecurringRaidTemplate.ResetDayOfWeek))
                    .GetCustomAttribute <ConfigurationKeyAttribute>().Key)
                {
                    valueString = $"{kvp.Value} ({((DayOfWeek) kvp.Value)})";
                }

                pageBuilder.AddRow(new[] { kvp.Key.ToString(), kvp.Name, valueString });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #7
0
        public async Task Characters(IGuildUser user)
        {
            List <EpgpAlias> aliases;

            await using (var dbContext = new BuzzBotDbContext(_configuration))
            {
                var guildUser = dbContext.GuildUsers.Include(gu => gu.Aliases).FirstOrDefault(usr => usr.Id == user.Id);
                if (guildUser == null)
                {
                    await ReplyAsync("No record of that user exists.");

                    return;
                }
                aliases = guildUser.Aliases;
                if (!aliases.Any())
                {
                    await ReplyAsync("No aliases found for that user.");

                    return;
                }

                if (!aliases.Any(a => a.IsActive))
                {
                    var primary = aliases.FirstOrDefault(a => a.IsPrimary);
                    if (primary != null)
                    {
                        primary.IsActive = true;
                    }
                    await dbContext.SaveChangesAsync();
                }
            }
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Alias")
                              .AddColumn("Is Primary?")
                              .AddColumn("Is Active?")
                              .AddColumn("EP")
                              .AddColumn("GP")
                              .AddColumn("PR");

            foreach (var alias in aliases)
            {
                pageBuilder.AddRow(new[]
                {
                    alias.Name,
                    alias.IsPrimary ? "Yes" : "No",
                    alias.IsActive ? "Yes" : "No",
                    alias.EffortPoints.ToString(),
                    alias.GearPoints.ToString(),
                    ((double)alias.EffortPoints / alias.GearPoints).ToString("F2")
                });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #8
0
        public async Task PrintLootHistory(IMessageChannel channel, EpgpAlias alias, bool asAdmin)
        {
            alias = _dbContext.Aliases
                    .Include(a => a.AwardedItems)
                    .ThenInclude(ri => ri.Transaction)
                    .Include(a => a.AwardedItems)
                    .ThenInclude(ri => ri.Item)
                    .Include(a => a.AwardedItems)
                    .ThenInclude(ri => ri.Raid)
                    .FirstOrDefault(a => a.Id == alias.Id);
            if (alias == null)
            {
                await channel.SendMessageAsync("Unable to locate record of that user in the database.");

                return;
            }

            if (!alias.AwardedItems.Any())
            {
                await channel.SendMessageAsync("There are no records of items being awarded to that user.");

                return;
            }
            var pageBuilder = new PageFormatBuilder()
                              .AlternateRowColors()
                              .AddColumn("Item Name:")
                              .AddColumn("Raid")
                              .AddColumn("Time (UTC)")
                              .AddColumn("GP");

            if (asAdmin)
            {
                pageBuilder.AddHiddenColumn("Transaction ID");
            }

            foreach (var raidItem in alias.AwardedItems.OrderByDescending(ai => ai.Transaction.TransactionDateTime))
            {
                var row = new List <string>()
                {
                    raidItem.Item.Name,
                    raidItem.Raid.Name,
                    raidItem.Transaction.TransactionDateTime.ToString("g"),
                    raidItem.Transaction.Value.ToString()
                };
                if (asAdmin)
                {
                    row.Add(raidItem.TransactionId.ToString("N"));
                }
                pageBuilder.AddRow(row.ToArray());
            }

            await _pageService.SendPages(channel, pageBuilder.Build());
        }
Пример #9
0
        public async Task PrintItemHistory(IMessageChannel channel, Item item, bool asAdmin = false)
        {
            item = _dbContext.Items
                   .Include(itm => itm.RaidItems).ThenInclude(ri => ri.AwardedAlias)
                   .Include(itm => itm.RaidItems).ThenInclude(ri => ri.Transaction)
                   .Include(itm => itm.RaidItems).ThenInclude(ri => ri.Raid)
                   .FirstOrDefault(itm => itm.Id == item.Id);
            if (item == null)
            {
                await channel.SendMessageAsync("No item could be found.");

                return;
            }

            if (!item.RaidItems.Any())
            {
                await channel.SendMessageAsync("No record of that item being awarded could be found");

                return;
            }
            var pageBuilder = new PageFormatBuilder();

            pageBuilder.AlternateRowColors()
            .AddColumn("Awarded User")
            .AddColumn("Raid")
            .AddColumn("Time (UTC)");
            if (asAdmin)
            {
                pageBuilder.AddHiddenColumn("Transaction ID");
            }
            foreach (var raidItem in item.RaidItems)
            {
                var row = new List <string>();
                row.AddRange(new []
                {
                    raidItem.AwardedAlias.Name,
                    raidItem.Raid.Name,
                    raidItem.Transaction.TransactionDateTime.ToString("g")
                });
                if (asAdmin)
                {
                    row.Add(raidItem.Transaction.Id.ToString("N"));
                }
                pageBuilder.AddRow(row.ToArray());
            }

            await _pageService.SendPages(channel, pageBuilder.Build());
        }
Пример #10
0
        public async Task TestPagination()
        {
            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Col1")
                              .AddColumn("Col2")
                              .AddColumn("Col3")
                              .AddHiddenColumn("HiddenCol1")
                              .AlternateRowColors();

            for (var i = 0; i < 50; i++)
            {
                pageBuilder.AddRow(new[] { $"Col1:Row{i}", $"Col2:Row{i}", $"Col3:Row{i}", $"HiddenCol1:Row{i}", });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #11
0
        public async Task GetTransactions(int reportCount)
        {
            var transactions = _dbContext.EpgpTransactions.Include(t => t.Alias)
                               .OrderByDescending(t => t.TransactionDateTime).Take(reportCount).ToList();
            var pageBuilder1 = new PageFormatBuilder()
                               .AlternateRowColors()
                               .AddColumn("Time (UTC)")
                               .AddColumn("Alias")
                               .AddColumn("Currency")
                               .AddColumn("Value")
                               .AddColumn("Memo");
            var pageBuilder2 = new PageFormatBuilder()
                               .AlternateRowColors()
                               .AddColumn("Time (UTC)")
                               .AddColumn("Alias")
                               .AddColumn("Currency")
                               .AddColumn("Value")
                               .AddColumn("ID");

            foreach (var epgpTransaction in transactions)
            {
                pageBuilder1.AddRow(new[]
                {
                    epgpTransaction.TransactionDateTime.ToString("g"),
                    epgpTransaction.Alias.Name,
                    epgpTransaction.TransactionType.GetAttributeOfType <CurrencyAttribute>().Currency.ToString(),
                    epgpTransaction.Value.ToString(),
                    epgpTransaction.Memo
                });
                pageBuilder2.AddRow(new[]
                {
                    epgpTransaction.TransactionDateTime.ToString("g"),
                    epgpTransaction.Alias.Name,
                    epgpTransaction.TransactionType.GetAttributeOfType <CurrencyAttribute>().Currency.ToString(),
                    epgpTransaction.Value.ToString(),
                    epgpTransaction.Id.ToString("N")
                });
            }

            var format1 = pageBuilder1.Build();
            var format2 = pageBuilder2.Build();

            format1.HasHiddenColumns   = true;
            format1.RevealedPageFormat = format2;
            await _pageService.SendPages(await GetUserChannel(), format1);
        }
Пример #12
0
        public async Task All()
        {
            var characters  = _bankService.GetBankCharacters();
            var pageBuilder = new PageFormatBuilder();

            pageBuilder.AddColumn("Item Name")
            .AddColumn("Quantity")
            .AddColumn("Bank Character")
            .AlternateRowColors();
            var itemData = new List <ItemData>();

            foreach (var character in characters)
            {
                foreach (var bag in character.Bags)
                {
                    foreach (var bagSlot in bag.BagSlots)
                    {
                        var item = itemData.FirstOrDefault(itm =>
                                                           itm.Name == bagSlot.Item?.Name && itm.Character == character.Name);
                        if (item == null)
                        {
                            item = new ItemData
                            {
                                Character = character.Name,
                                Quantity  = 0,
                                Name      = bagSlot.Item?.Name
                            };
                            itemData.Add(item);
                        }

                        item.Quantity += bagSlot.Quantity;
                    }
                }
            }

            foreach (var data in itemData.OrderBy(itm => itm.Name))
            {
                pageBuilder.AddRow(new[] { data.Name, data.Quantity.ToString(), data.Character });
            }

            var format = pageBuilder.Build();
            await _pageService.SendPages(await GetUserChannel(), $"{format.HeaderLine}\n{format.HorizontalRule}",
                                         format.ContentLines.ToArray());
        }
Пример #13
0
        public async Task PrintTemplates()
        {
            var templates =
                await _recurringRaidTemplateRepository.GetAsync((qry, _) =>
                                                                qry.Include(tmp => tmp.SoftResTemplate).Where(tmp => tmp.ServerId == Context.Guild.Id));

            var pageBuilder = new PageFormatBuilder()
                              .AddColumn("Template Name")
                              .AddColumn("Instance")
                              .AddColumn("Allowed Reserves")
                              .AlternateRowColors();

            foreach (var template in templates)
            {
                pageBuilder.AddRow(new[]
                {
                    template.SoftResTemplate.Id,
                    template.SoftResTemplate.Instance,
                    template.SoftResTemplate.ReserveAmounts.ToString()
                });
            }

            await _pageService.SendPages(Context.Channel, pageBuilder.Build());
        }
Пример #14
0
        public async Task Audit(string aliasId, IMessageChannel messageChannel, bool isAdmin = false)
        {
            var transactions = _dbContext.Aliases.Include(a => a.Transactions).FirstOrDefault(a => a.Name == aliasId)?
                               .Transactions.OrderByDescending(t => t.TransactionDateTime).ToList();
            //var transactions = _epgpRepository.GetTransactions(aliasId).OrderByDescending(t => t.TransactionDateTime).ToList();
            var builder1 = new PageFormatBuilder()
                           .AddColumn("Time (UTC)")
                           .AddColumn("Type")
                           .AddColumn("Currency")
                           .AddColumn("Amount")
                           .AddColumn("Memo")
                           .AlternateRowColors();
            var builder2 = new PageFormatBuilder()
                           .AddColumn("Time (UTC)")
                           .AddColumn("Type")
                           .AddColumn("Currency")
                           .AddColumn("Amount")
                           .AddColumn("ID")
                           .AlternateRowColors();

            if (transactions == null)
            {
                transactions = new List <EpgpTransaction>();
            }
            var rows = new List <string>();

            if (!transactions.Any())
            {
                rows.AddRange(new[] { "", "", "", "", "" });
                builder1.AddRow(rows.ToArray());
                builder2.AddRow(rows.ToArray());
            }

            foreach (var transaction in transactions)
            {
                var rows1       = new List <string>();
                var rows2       = new List <string>();
                var memoToPrint = transaction.Memo;
                var currency    =
                    transaction.TransactionType.ToString().Contains("EP", StringComparison.CurrentCultureIgnoreCase)
                        ? "EP"
                        : "GP";
                if (transaction.Memo.Length > 28)
                {
                    memoToPrint = $"{transaction.Memo.Substring(0, 25)}...";
                }
                rows1.AddRange(new[]
                {
                    $"{transaction.TransactionDateTime.ToShortDateString()}:{transaction.TransactionDateTime.ToShortTimeString()}",
                    $"{transaction.TransactionType}",
                    $"{currency}",
                    transaction.Value.ToString()
                });
                rows2.AddRange(new[]
                {
                    $"{transaction.TransactionDateTime.ToShortDateString()}:{transaction.TransactionDateTime.ToShortTimeString()}",
                    $"{transaction.TransactionType}",
                    $"{currency}",
                    transaction.Value.ToString()
                });
                rows1.Add(memoToPrint);
                rows2.Add(transaction.Id.ToString("N"));
                builder1.AddRow(rows1.ToArray());
                builder2.AddRow(rows2.ToArray());
            }

            var format = builder1.Build();

            if (isAdmin)
            {
                format.HasHiddenColumns   = true;
                format.RevealedPageFormat = builder2.Build();
            }
            await _pageService.SendPages(messageChannel, format);
        }