Пример #1
0
        public async Task Info([Remainder] SocketGuildUser mention = null)
        {
            DiscordUser user = null;

            if (mention != null)
            {
                user = _stewardContext.DiscordUsers
                       .Include(du => du.Characters)
                       .ThenInclude(c => c.House)
                       .Include(du => du.Characters)
                       .ThenInclude(c => c.CharacterTraits)
                       .ThenInclude(ct => ct.Trait)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.DefaultMeleeWeapon)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.DefaultRangedWeapon)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.EquippedArmour)
                       .SingleOrDefault(u => u.DiscordId == mention.Id.ToString());
            }
            else
            {
                user = _stewardContext.DiscordUsers
                       .Include(du => du.Characters)
                       .ThenInclude(c => c.House)
                       .Include(du => du.Characters)
                       .ThenInclude(c => c.CharacterTraits)
                       .ThenInclude(ct => ct.Trait)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.DefaultMeleeWeapon)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.DefaultRangedWeapon)
                       .Include(du => du.Characters)
                       .ThenInclude(pc => pc.EquippedArmour)
                       .SingleOrDefault(u => u.DiscordId == Context.User.Id.ToString());
            }

            if (user == null)
            {
                await ReplyAsync(
                    "User does not have a profile yet. This will be created when they send a message for the first time.");

                return;
            }

            var activeCharacter = user.Characters.FirstOrDefault(c => c.IsAlive());

            if (activeCharacter == null)
            {
                await ReplyAsync("Could not find a living character.");

                return;
            }

            var year = _stewardContext.Year.SingleOrDefault();

            var embedBuilder = new EmbedBuilder
            {
                Color = Color.Purple
            };

            var characterTraits = activeCharacter.CharacterTraits.Select(ct => ct.Trait).ToList();

            var traitsListString = ".";

            if (characterTraits.Count > 0)
            {
                traitsListString = "";
                foreach (var trait in characterTraits)
                {
                    traitsListString += trait.Description + "\n";
                }
            }

            if (traitsListString == ".")
            {
                traitsListString = "None.";
            }

            var equippedStuff = new StringBuilder();

            if (activeCharacter.DefaultMeleeWeapon == null)
            {
                equippedStuff.AppendLine($"Equipped Melee Weapon: nothing");
            }
            else
            {
                equippedStuff.AppendLine($"Equipped Melee Weapon: {activeCharacter.DefaultMeleeWeapon.WeaponName}");
            }

            if (activeCharacter.DefaultRangedWeapon == null)
            {
                equippedStuff.AppendLine($"Equipped Ranged Weapon: nothing");
            }
            else
            {
                equippedStuff.AppendLine($"Equipped Ranged Weapon: {activeCharacter.DefaultRangedWeapon.WeaponName}");
            }

            if (activeCharacter.EquippedArmour == null)
            {
                equippedStuff.AppendLine($"Equipped Armour: nothing");
            }
            else
            {
                equippedStuff.AppendLine($"Equipped Armour: {activeCharacter.EquippedArmour.ArmourName}");
            }

            embedBuilder.AddField(_characterService.ComposeStatEmbedField(activeCharacter, year));

            _ = embedBuilder.AddField("Traits", traitsListString)
                .WithColor(Color.Purple);

            embedBuilder.AddField("Bio", $"{activeCharacter.Bio}")
            .WithColor(Color.Purple);

            embedBuilder.AddField("Equipment", equippedStuff.ToString());

            await ReplyAsync(embed : embedBuilder.Build());
        }