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); }
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()); }