Beispiel #1
0
        public async Task AwardRoll(IGuildUser user, [Remainder] string itemQueryString)
        {
            EpgpRaid raid;

            try
            {
                raid = _raidService.GetRaid();
            }
            catch (InvalidOperationException)
            {
                await ReplyAsync("No active raid could be found.");

                return;
            }
            var activeAliases = _aliasService.GetActiveAliases(user.Id).ToList();
            var activeAlias   = await QueryTargetAlias(activeAliases);

            var item = await _itemService.TryGetItem(itemQueryString, Context, activeAlias);

            if (item == null)
            {
                return;
            }
            var gp = _epgpCalculator.ConvertGpFromGold(raid.NexusCrystalValue) * 2;

            _epgpService.Gp(activeAlias, item, $"[Roll] {item.Name}", gp);
            var embed      = CreateItemEmbed(item, gp);
            var userString = activeAlias.IsPrimary ? $"<@{user.Id}>" : _emoteService.GetAliasString(activeAlias, Context.Guild.Id);

            await ReplyAsync($"Assigning to {userString}", false, embed);
        }
Beispiel #2
0
        private Embed BuildRaidSummary()
        {
            using var scope = _serviceScopeFactory.CreateScope();
            var db   = scope.ServiceProvider.GetRequiredService <BuzzBotDbContext>();
            var raid = db.Raids
                       .Include(r => r.Loot).ThenInclude(ri => ri.Item)
                       .Include(r => r.Loot).ThenInclude(ri => ri.Transaction)
                       .FirstOrDefault(r => r.Id == _raidData.RaidObject.RaidId);

            if (raid == null)
            {
                return(new EmbedBuilder().Build());
            }
            var startTime = raid.StartTime;

            startTime = DateTime.SpecifyKind(startTime, DateTimeKind.Utc);
            var embedBuilder = new EmbedBuilder()
                               .WithTitle("Raid Summary")
                               .AddField("⏲️ Total Raid Time", $"{(DateTime.UtcNow - startTime).TotalMinutes:F0} min", true)
                               .AddField("📒 EP Bonus Total", _epAwarded, true)
                               .AddField("💰 Loot distributed", raid.Loot.Count, true);

            var lootRecipients = raid.Loot.GroupBy(l => l.AwardedAliasId);

            foreach (var recipient in lootRecipients)
            {
                var alias  = db.Aliases.Find(recipient.Key);
                var itemSb = new StringBuilder();
                foreach (var raidItem in recipient)
                {
                    itemSb.AppendLine($"{raidItem.Item.Name}");
                }

                embedBuilder.AddField(_emoteService.GetAliasString(alias, _raidData.ServerId), itemSb.ToString(),
                                      true);
            }

            return(embedBuilder.Build());
        }