Пример #1
0
    /// <summary>
    /// Adds meta information about the quote to the embed.
    /// </summary>
    /// <param name="message">The quoted message.</param>
    /// <param name="quotingUser">The quoting user.</param>
    /// <param name="embed">The embed to add the information to.</param>
    private static Embed AddMeta
    (
        IMessage message,
        Snowflake quotingUser,
        Embed embed
    )
    {
        var getUserAvatar = CDN.GetUserAvatarUrl(message.Author);

        var author = new EmbedAuthor($"{message.Author.Username}#{message.Author.Discriminator}")
        {
            IconUrl = getUserAvatar.IsSuccess
                ? getUserAvatar.Entity.ToString()
                : default(Optional <string>)
        };

        return(embed with
        {
            Author = author,
            Footer = new EmbedFooter(GetPostedTimeInfo(message)),
            Colour = Color.FromArgb(95, 186, 125),
            Fields = new[]
            {
                CreateQuoteMarkerField(message, quotingUser)
            }
        });
    }
Пример #2
0
        public async Task TextAvatar(SocketUser user = null, String text = "TEXT", String text1 = "", String text2 = "", String text3 = "", String text4 = "")
        {
            int nbArgument = 1;

            if (text4 != "")
            {
                nbArgument = 5;
            }
            if (text3 != "" && text4 == "")
            {
                nbArgument = 4;
            }
            if (text2 != "" && text3 == "")
            {
                nbArgument = 3;
            }
            if (text1 != "" && text2 == "")
            {
                nbArgument = 2;
            }



            EditImage editImage = new EditImage(CDN.GetUserAvatarUrl(user.Id, user.AvatarId, 512, ImageFormat.Auto));

            Console.WriteLine(user.GetAvatarUrl());
            editImage.writeMessageOnImage(text, text1, text2, text3, text4, nbArgument);

            await Context.Channel.SendFileAsync("image\\update.png");
        }
Пример #3
0
    public async Task <IResult> ListNotesAsync(IUser user)
    {
        var notes = await _notes.GetNotesAsync(_context.GuildID.Value, user.ID);

        var createPages = await PaginatedEmbedFactory.PagesFromCollectionAsync
                          (
            notes,
            async note =>
        {
            var getAuthor = await _userAPI.GetUserAsync(note.Author.DiscordID);
            if (!getAuthor.IsSuccess)
            {
                return(Result <Embed> .FromError(getAuthor));
            }

            var author = getAuthor.Entity;

            var getAuthorAvatar = CDN.GetUserAvatarUrl(author);

            var embedFields = new List <EmbedField>();
            var eb          = new Embed
            {
                Title  = $"Note #{note.ID} for {user.Username}:{user.Discriminator}",
                Colour = Color.Gold,
                Author = new EmbedAuthor(author.Username)
                {
                    IconUrl = getAuthorAvatar.IsSuccess
                            ? getAuthorAvatar.Entity.ToString()
                            : default(Optional <string>)
                },
                Description = note.Content,
                Fields      = embedFields
            };

            embedFields.Add(new EmbedField("Created", note.CreatedAt.Humanize()));

            if (note.CreatedAt != note.UpdatedAt)
            {
                embedFields.Add(new EmbedField("Last Updated", note.UpdatedAt.Humanize()));
            }

            return(eb);
        }
                          );

        if (createPages.Any(p => !p.IsSuccess))
        {
            return(createPages.First(p => !p.IsSuccess));
        }

        var pages = createPages.Select(p => p.Entity).ToList();

        return((Result)await _feedback.SendContextualPaginatedMessageAsync
               (
                   _context.User.ID,
                   pages,
                   ct : this.CancellationToken
               ));
    }
 public async Task <IResult> InfoDiscord(IUser user)
 {
     var fields         = new List <EmbedField>();
     var iconUrl        = new Optional <string>();
     var embedThumbnail = user.Avatar?.Value is null
         ? new Optional <IEmbedThumbnail>()
         : CDN.GetUserAvatarUrl(user, CDNImageFormat.PNG) switch
     {
         { IsSuccess : true, Entity : { } e } => new EmbedThumbnail(e.ToString()),
Пример #5
0
        public async Task DistortionAvatar(SocketUser user = null, ushort size = 512)
        {
            EditImage editImage = new EditImage(CDN.GetUserAvatarUrl(user.Id, user.AvatarId, size, ImageFormat.Auto));

            Console.WriteLine(user.GetAvatarUrl());
            editImage.Brightness();


            await Context.Channel.SendFileAsync("image\\update.png", "Caption goes here");
        }
Пример #6
0
        public async Task AvatarAsync(SocketUser user = null, ushort size = 512)
        {
            if (user == null)
            {
                await ReplyAsync(CDN.GetUserAvatarUrl(Context.User.Id, Context.User.AvatarId, size, ImageFormat.Auto));
            }
            else
            {
                await ReplyAsync(CDN.GetUserAvatarUrl(user.Id, user.AvatarId, size, ImageFormat.Auto));

                // await ReplyAsync(user.GetAvatarUrl());
            }
        }
Пример #7
0
            public void ReturnsUnsuccessfulResultIfInstanceHasNoImage()
            {
                var userID = new Snowflake(0);

                var mockedUser = new Mock <IUser>();

                mockedUser.SetupGet(g => g.Avatar).Returns((IImageHash?)null);
                mockedUser.SetupGet(g => g.ID).Returns(userID);

                var user = mockedUser.Object;

                var getActual = CDN.GetUserAvatarUrl(user, CDNImageFormat.PNG);

                Assert.False(getActual.IsSuccess);
                Assert.IsType <ImageNotFoundError>(getActual.Unwrap());
            }
Пример #8
0
            public void ReturnsCorrectAddressWithAnimatedImageAndCustomFormat()
            {
                var expected = new Uri("https://cdn.discordapp.com/avatars/0/a_1.png");

                var userID    = new Snowflake(0);
                var imageHash = new ImageHash("a_1");

                var mockedUser = new Mock <IUser>();

                mockedUser.SetupGet(g => g.Avatar).Returns(imageHash);
                mockedUser.SetupGet(g => g.ID).Returns(userID);

                var user = mockedUser.Object;

                var getActual = CDN.GetUserAvatarUrl(user, CDNImageFormat.PNG);

                Assert.True(getActual.IsSuccess);
                Assert.Equal(expected, getActual.Entity);
            }
Пример #9
0
            /// <inheritdoc />
            protected override IEnumerable <Result <Uri> > GetImageUris
            (
                Optional <CDNImageFormat> imageFormat = default,
                Optional <ushort> imageSize           = default
            )
            {
                var userID    = new Snowflake(0);
                var imageHash = new ImageHash("1");

                var mockedUser = new Mock <IUser>();

                mockedUser.SetupGet(g => g.Avatar).Returns(imageHash);
                mockedUser.SetupGet(g => g.ID).Returns(userID);

                var user = mockedUser.Object;

                yield return(CDN.GetUserAvatarUrl(user, imageFormat, imageSize));

                yield return(CDN.GetUserAvatarUrl(userID, imageHash, imageFormat, imageSize));
            }
 public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
 => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
Пример #11
0
 /// <inheritdoc />
 public string GetAvatarUrlOrDefault(ImageFormat format = ImageFormat.Auto, ushort size = 128)
 => CDN.GetUserAvatarUrl(Id, AvatarId, size, format) ?? CDN.GetDefaultUserAvatarUrl(DiscriminatorValue);
Пример #12
0
    public async Task <IResult> ListBansAsync()
    {
        var bans = await _bans.GetBansAsync(_context.GuildID.Value);

        var createPages = await PaginatedEmbedFactory.PagesFromCollectionAsync
                          (
            bans,
            async ban =>
        {
            var getBanAuthor = await _userAPI.GetUserAsync(ban.Author.DiscordID);
            if (!getBanAuthor.IsSuccess)
            {
                return(Result <Embed> .FromError(getBanAuthor));
            }

            var banAuthor = getBanAuthor.Entity;

            var getBannedUser = await _userAPI.GetUserAsync(ban.User.DiscordID);
            if (!getBannedUser.IsSuccess)
            {
                return(Result <Embed> .FromError(getBannedUser));
            }

            var bannedUser = getBanAuthor.Entity;

            var getBanAuthorAvatar = CDN.GetUserAvatarUrl(banAuthor);

            var embedFields = new List <IEmbedField>();
            var eb          = new Embed
            {
                Title  = $"Ban #{ban.ID} for {bannedUser.Username}:{bannedUser.Discriminator}",
                Colour = Color.Orange,
                Author = new EmbedAuthor(banAuthor.Username)
                {
                    Url = getBanAuthorAvatar.IsSuccess
                            ? getBanAuthorAvatar.Entity.ToString()
                            : default(Optional <string>)
                },
                Description = ban.Reason,
                Fields      = embedFields
            };

            embedFields.Add(new EmbedField("Created", ban.CreatedAt.Humanize()));

            if (ban.CreatedAt != ban.UpdatedAt)
            {
                embedFields.Add(new EmbedField("Last Updated", ban.UpdatedAt.Humanize()));
            }

            if (ban.ExpiresOn.HasValue)
            {
                embedFields.Add(new EmbedField("Expires On", ban.ExpiresOn.Humanize()));
            }

            if (ban.MessageID is not null)
            {
                // TODO
            }

            return(eb);
        }
                          );

        if (createPages.Any(p => !p.IsSuccess))
        {
            return(createPages.First(p => !p.IsSuccess));
        }

        var pages = createPages.Select(p => p.Entity).ToList();

        return((Result)await _feedback.SendContextualPaginatedMessageAsync
               (
                   _context.User.ID,
                   pages,
                   ct : this.CancellationToken
               ));
    }
Пример #13
0
    /// <summary>
    /// Shows a nicely formatted info block about a user.
    /// </summary>
    /// <param name="discordUser">The Discord user to show the info of.</param>
    /// <param name="user">The stored information about the user.</param>
    private async Task <Result> ShowUserInfoAsync(IUser discordUser, User user)
    {
        var embedFields = new List <IEmbedField>();

        var getUserAvatar = CDN.GetUserAvatarUrl(discordUser);
        var embed         = new Embed
        {
            Author = new EmbedAuthor
                     (
                $"{discordUser.Username}#{discordUser.Discriminator}",
                IconUrl: getUserAvatar.IsSuccess
                    ? getUserAvatar.Entity.ToString()
                    : default(Optional <string>)
                     ),
            Thumbnail = new EmbedThumbnail
                        (
                getUserAvatar.IsSuccess
                    ? getUserAvatar.Entity.ToString()
                    : string.Empty
                        ),
            Fields = embedFields
        };

        if (_context.GuildID.IsDefined(out var guildID))
        {
            var getMember = await _guildAPI.GetGuildMemberAsync
                            (
                guildID,
                discordUser.ID,
                this.CancellationToken
                            );

            if (!getMember.IsSuccess)
            {
                return(Result.FromError(getMember));
            }

            var member = getMember.Entity;
            if (member.Roles.Count > 0)
            {
                var getRoles = await _guildAPI.GetGuildRolesAsync(guildID, this.CancellationToken);

                if (!getRoles.IsSuccess)
                {
                    return(Result.FromError(getRoles));
                }

                var roles       = getRoles.Entity;
                var primaryRole = roles.OrderByDescending(r => r.Position).First(r => member.Roles.Contains(r.ID));
                embed = embed with
                {
                    Colour = primaryRole.Colour
                };
            }
        }
        else
        {
            embed = embed with
            {
                Colour = Color.LightSlateGray
            };
        }

        embedFields.Add(new EmbedField("Name", discordUser.Username));

        string timezoneValue;

        if (user.Timezone is null)
        {
            timezoneValue = "No timezone set.";
        }
        else
        {
            timezoneValue = "UTC";
            if (user.Timezone >= 0)
            {
                timezoneValue += "+";
            }

            timezoneValue += user.Timezone.Value;
        }

        embedFields.Add(new EmbedField("Timezone", timezoneValue));

        var bioValue = string.IsNullOrEmpty(user.Bio) ? "No bio set." : user.Bio;

        embedFields.Add(new EmbedField("Bio", bioValue));

        var technicalInfo = new StringBuilder();

        technicalInfo.AppendLine($"ID: {discordUser.ID}");

        var span = DateTimeOffset.UtcNow - discordUser.ID.Timestamp;

        var humanizedTimeAgo = span > TimeSpan.FromSeconds(60)
            ? span.Humanize(maxUnit: TimeUnit.Year, culture: CultureInfo.InvariantCulture)
            : "a few seconds";

        var created = $"{humanizedTimeAgo} ago ({discordUser.ID.Timestamp.UtcDateTime:yyyy-MM-ddTHH:mm:ssK})\n";

        technicalInfo.AppendLine($"Created: {created}");

        embedFields.Add(new EmbedField("Technical Info", technicalInfo.ToString()));

        var sendEmbed = await _channelAPI.CreateMessageAsync
                        (
            _context.ChannelID,
            embeds : new[] { embed },
            ct : this.CancellationToken
                        );

        return(sendEmbed.IsSuccess
            ? Result.FromSuccess()
            : Result.FromError(sendEmbed));
    }
Пример #14
0
 public async Task AvatarAsync(ushort size = 512)
 {
     await ReplyAsync(CDN.GetUserAvatarUrl(Context.User.Id, Context.User.AvatarId, size, ImageFormat.Auto));
 }
Пример #15
0
 public async Task AvatarAsync(ushort size = 512)
 {
     await ReplyAsync(Context.User.Username + " la photo de ton avatar est :");
     await ReplyAsync(CDN.GetUserAvatarUrl(Context.User.Id, Context.User.AvatarId, size, ImageFormat.Auto));
 }