Beispiel #1
0
        public async Task <IActionResult> GetGuildUser([FromRoute] ulong guildId, [FromRoute] ulong userId)
        {
            var client = await HttpContext.GetBotClient();

            Task <RestGuildUser> currentUser = client.GetGuildUserAsync(guildId, HttpContext.GetUserId());
            Task <RestGuildUser> searchUser  = client.GetGuildUserAsync(guildId, userId);
            var guild = client.GetGuildAsync(guildId);
            var tasks = new List <Task>();

            try
            {
                tasks.Add(currentUser);
                tasks.Add(searchUser);
                tasks.Add(guild);
                await Task.WhenAll(tasks);
            }
            catch (HttpException)
            {
                return(StatusCode(412, "Bot not in guild"));
            }
            if (currentUser.Result == null)
            {
                return(StatusCode(403, "Unauthorized"));
            }
            if (searchUser.Result == null)
            {
                return(StatusCode(404, "No user in guild"));
            }

            var profile = await ProfileDb.GetProfile(searchUser.Result.Id);

            var bal = await BalanceDb.GetToastiesAsync(userId, guildId);

            var dailyRes = await DailyDb.GetDailyAsync(userId, guildId);

            var daily  = dailyRes == null ? 0 : dailyRes.Streak;
            var waifus = (await UserInventoryDb.GetWaifusAsync(userId, guildId)).OrderBy(x => x.Source).ThenBy(x => x.Name).ToView();
            var waifu  = FeaturedWaifuDb.GetFeaturedWaifu(userId, guildId).ToView();

            var user = new GuildUserView
            {
                AvatarUrl       = searchUser.Result.GetAvatarUrl(size: 256),
                Id              = searchUser.Result.Id.ToString(),
                Name            = searchUser.Result.Username,
                Discriminator   = searchUser.Result.Discriminator,
                ImageUrl        = profile.Image,
                Quote           = profile.Quote.CleanQuote(),
                LootboxesOpened = profile.LootboxesOpened,
                Rep             = profile.Rep,
                Balance         = bal,
                Daily           = daily,
                Waifus          = waifus,
                JoinedAt        = searchUser.Result.JoinedAt,
                Waifu           = waifu,
                Guild           = new GuildSummaryView
                {
                    ImageUrl = guild.Result.IconUrl,
                    Id       = guild.Result.Id.ToString(),
                    Name     = guild.Result.Name
                }
            };

            return(Ok(user));
        }