示例#1
0
        private void AddMemberInformationToEmbed(EphemeralUser member, StringBuilder builder)
        {
            builder.AppendLine();
            builder.AppendLine("**\u276F Member Information**");

            if (!string.IsNullOrEmpty(member.Nickname))
            {
                builder.AppendLine("Nickname: " + Format.Sanitize(member.Nickname));
            }

            builder.AppendLine($"Created: {FormatUtilities.FormatTimeAgo(_utcNow, member.CreatedAt)}");

            if (member.JoinedAt is DateTimeOffset joinedAt)
            {
                builder.AppendLine($"Joined: {FormatUtilities.FormatTimeAgo(_utcNow, joinedAt)}");
            }

            if (member.RoleIds?.Count > 0)
            {
                var roles = member.RoleIds.Select(x => member.Guild.Roles.Single(y => y.Id == x))
                            .Where(x => x.Id != x.Guild.Id) // @everyone role always has same ID than guild
                            .ToArray();

                if (roles.Length > 0)
                {
                    Array.Sort(roles);    // Sort by position: lowest positioned role is first
                    Array.Reverse(roles); // Reverse the sort: highest positioned role is first

                    builder.Append($"{"Role".ToQuantity(roles.Length, ShowQuantityAs.None)}: ");
                    builder.AppendLine(roles.Select(r => r.Mention).Humanize());
                }
            }
        }
示例#2
0
        /// <inheritdoc />
        public async Task <EphemeralUser> GetUserInformationAsync(ulong guildId, ulong userId)
        {
            if (userId == 0)
            {
                return(null);
            }

            var guild = await DiscordClient.GetGuildAsync(guildId);

            var guildUser = await guild.GetUserAsync(userId);

            if (!(guildUser is null))
            {
                await TrackUserAsync(guildUser);
            }

            var user = await DiscordClient.GetUserAsync(userId);

            var restUser = await DiscordRestClient.GetUserAsync(userId);

            var guildUserSummary = await GetGuildUserSummaryAsync(guildId, userId);

            var ban = (await guild.GetBansAsync()).FirstOrDefault(x => x.User.Id == userId);

            var buildUser = new EphemeralUser()
                            .WithGuildUserSummaryData(guildUserSummary)
                            .WithIUserData(restUser)
                            .WithIUserData(user)
                            .WithIGuildUserData(guildUser)
                            .WithGuildContext(guild)
                            .WithBanData(ban);

            return(buildUser.Id == 0 ? null : buildUser);
        }
示例#3
0
        public async Task <IGuildUser?> TryGetGuildUserAsync(IGuild guild, ulong userId, CancellationToken cancellationToken)
        {
            var user = await guild.GetUserAsync(userId);

            if (user is not null)
            {
                await TrackUserAsync(user, cancellationToken);

                return(user);
            }

            var restUser = await DiscordRestClient.GetUserAsync(userId);

            // Even if they aren't in the guild, we still want to track them.
            if (restUser is not null)
            {
                var ephemeralUser = new EphemeralUser()
                                    .WithIUserData(restUser)
                                    .WithGuildContext(guild);

                await TrackUserAsync(ephemeralUser, cancellationToken);

                return(null);
            }

            throw new InvalidOperationException($"Discord user {userId} does not exist");
        }
示例#4
0
        private async Task AddMemberInformationToEmbedAsync(EphemeralUser member, StringBuilder builder, EmbedBuilder embedBuilder)
        {
            builder.AppendLine();
            builder.AppendLine("**\u276F Member Information**");

            if (!string.IsNullOrEmpty(member.Nickname))
            {
                builder.AppendLine("Nickname: " + member.Nickname);
            }

            builder.AppendLine($"Created: {FormatUtilities.FormatTimeAgo(_utcNow, member.CreatedAt)}");

            if (member.JoinedAt is DateTimeOffset joinedAt)
            {
                builder.AppendLine($"Joined: {FormatUtilities.FormatTimeAgo(_utcNow, joinedAt)}");
            }

            if (member.RoleIds?.Count > 0)
            {
                var roles = member.RoleIds.Select(x => member.Guild.Roles.Single(y => y.Id == x))
                            .Where(x => x.Id != x.Guild.Id) // @everyone role always has same ID than guild
                            .ToArray();

                if (roles.Length > 0)
                {
                    Array.Sort(roles);    // Sort by position: lowest positioned role is first
                    Array.Reverse(roles); // Reverse the sort: highest positioned role is first

                    builder.Append("Role".ToQuantity(roles.Length, ShowQuantityAs.None));
                    builder.Append(": ");
                    builder.AppendLine(roles.Select(r => r.Mention).Humanize());
                }
            }

            if ((member.GetAvatarUrl(size: 16) ?? member.GetDefaultAvatarUrl()) is string avatarUrl)
            {
                using (var httpStream = await HttpClientFactory.CreateClient().GetStreamAsync(avatarUrl))
                {
                    using (var avatarStream = new MemoryStream())
                    {
                        await httpStream.CopyToAsync(avatarStream);

                        var avatar = new Image(avatarStream);

                        embedBuilder.WithColor(FormatUtilities.GetDominantColor(avatar));
                    }
                }
            }
        }