Example #1
0
        public async Task Surprise(CommandContext ctx)
        {
            using (var httpClient = new HttpClient())
            {
                var client = DevRantClient.Create(httpClient);

                var rant = client.GetSurprise().Result;

                var rantEmbed = new DiscordEmbedBuilder
                {
                    Author = new DiscordEmbedBuilder.EmbedAuthor
                    {
                        IconUrl = GetIcon(rant.Rant.UserAvatar.Image),
                        Name    = $"{rant.Rant.UserName} [{rant.Rant.UserScore}]",
                        Url     = GetUrl(rant.Rant.UserName)
                    },
                    ThumbnailUrl = GetIcon(rant.Rant.UserAvatar.Image),
                    Timestamp    = new DateTimeOffset(DateTime.Now),
                    Color        = new DiscordColor(rant.Rant.UserAvatar.Background),
                    Description  = rant.Rant.Content,
                    ImageUrl     = rant.Rant.AttachedImage?.URL,
                    Footer       = new DiscordEmbedBuilder.EmbedFooter
                    {
                        Text = $"Rant ID: {rant.Rant.Id}"
                    }
                };

                await ctx.RespondAsync($"", embed : rantEmbed);
            }
        }
Example #2
0
        public async Task Search_Rant_From_In_Memory_Web_Server_Not_Null()
        {
            var client = DevRantClient.Create(new HttpClient(this._httpServer));

            var rant = await client.SearchRants("devRant");

            Assert.IsNotNull(rant);
            Assert.IsTrue(rant.Success);
        }
Example #3
0
        public async Task Get_Rants_From_In_Memory_Web_Server_Not_Null()
        {
            var client = DevRantClient.Create(new HttpClient(this._httpServer));

            var rant = await client.GetRants(Sort.Algo, 50, 0);

            Assert.IsNotNull(rant);
            Assert.IsTrue(rant.Success);
        }
Example #4
0
        public async Task <IActionResult> Get(string username, string subtext)
        {
            var client = DevRantClient.Create(new HttpClient());

            // Convert username to userID
            var userId = await client.GetUserID(username);

            if (!userId.Success)
            {
                _logger.LogDebug($"User {username} does not exist.");

                return(BadRequest("User does not exist!"));
            }

            // Use the userID to retrive the meta information about the avatar
            var user = await client.GetUser(userId.UserId);

            var userProfile = user.Profile;

            var text = string.IsNullOrEmpty(subtext) ? userProfile.About : subtext;

            if (text.Length > _bannerOptions.MaxSubtextLength)
            {
                _logger.LogDebug("Subtext is too long");
                _logger.LogDebug(subtext);

                return(BadRequest("Subtext too long"));
            }

            string banner;

            try
            {
                banner = await Banner.GenerateAsync(_bannerOptions, userProfile, text);
            }
            catch (AvatarNotFoundException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error");

                return(StatusCode(500, ex.Message));
            }

            _logger.LogDebug($"Successfully generated banner for {username}");

            return(PhysicalFile(banner, "image/png"));
        }
Example #5
0
        public FileResult Get(string username, string subtext)
        {
            // Convert username to userID
            var client = DevRantClient.Create(new HttpClient());
            var userId = client.GetUserID(username).Result.UserId;

            // Use the userID to retrive the meta information about the avatar
            var userProfile = client.GetUser(userId).Result.Profile;
            var avatar      = userProfile.Avatar;
            // Avatar base url + avatar meta = rendered avatar url
            var avatarPath = $"{this.DevrantAvatarBaseURL}/{avatar.Image}";

            var banner = Banner.Generate(avatarPath, avatar.Background, userProfile.Username, (String.IsNullOrEmpty(subtext) ? userProfile.About : subtext));

            return(base.PhysicalFile(banner, "image/png"));
        }
Example #6
0
 public RantProducer(Sort sort = Sort.Algo, int bufferSize = 20)
 {
     SortType   = sort;
     Client     = DevRantClient.Create(new HttpClient());
     RantBuffer = new Queue <Rant>();
 }
Example #7
0
        public async Task Rant(CommandContext ctx, [Description("[top | recent | algo]")] string args = "recent")
        {
            using (var httpClient = new HttpClient())
            {
                var client = DevRantClient.Create(httpClient);

                Task <RantsResponse> c;

                switch (args)
                {
                case "top":
                    c = client.GetRants(Sort.Top, 1);
                    break;

                case "algo":
                    c = client.GetRants(Sort.Algo, 1);
                    break;

                default:
                    c = client.GetRants(Sort.Recent, 1);
                    break;
                }
                var rant = c.Result.Rants.First();

                var rantEmbed = new DiscordEmbedBuilder
                {
                    Author = new DiscordEmbedBuilder.EmbedAuthor
                    {
                        IconUrl = GetIcon(rant.UserAvatar.Image), Name = $"{rant.UserName} [{rant.UserScore}]",
                        Url     = GetUrl(rant.UserName)
                    },
                    ThumbnailUrl = GetIcon(rant.UserAvatar.Image), Timestamp = new DateTimeOffset(DateTime.Now),
                    Color        = new DiscordColor(rant.UserAvatar.Background), Description = rant.Content
                };

                if (rant.Tags.Any())
                {
                    var tags = rant.Tags.Aggregate("", (current, tag) => current + $"[{tag}]");
                    rantEmbed.WithFooter($"Tags: {tags}", "https://www.google.com/s2/favicons?domain=www.devrant.io");
                }

                if (rant.AttachedImage != null)
                {
                    rantEmbed.ImageUrl = rant.AttachedImage.URL;
                }

                rantEmbed.Build();
                await ctx.RespondAsync("", embed : rantEmbed);

                var comments = client.GetRant(rant.Id).Result.Comments;

                if (comments.Count == 0)
                {
                    return;
                }

                DiscordEmbedBuilder CommentEmbed(int commentNumber)
                {
                    return(new DiscordEmbedBuilder
                    {
                        Author = new DiscordEmbedBuilder.EmbedAuthor
                        {
                            IconUrl = GetIcon(comments[commentNumber].UserAvatar.Image),
                            Name = $"{comments[commentNumber].UserName} [{comments[commentNumber].UserScore}]",
                            Url = GetUrl(comments[commentNumber].UserName)
                        },
                        Color = new DiscordColor(comments[commentNumber].UserAvatar.Background),
                        Description = comments[commentNumber].Content
                    });
                }

                var counter = 1;

                CommentEmbed(counter).Build();

                var commentSection = ctx.RespondAsync($"Comment #{counter}/{comments.Count}", embed: CommentEmbed(counter - 1))
                                     .Result;
                var up   = UpEmoji(ctx);
                var down = DownEmoji(ctx);

                await commentSection.CreateReactionAsync(up);

                await commentSection.CreateReactionAsync(down);

                ctx.Client.MessageReactionAdded += eventArgs =>
                {
                    if (eventArgs.User.IsBot)
                    {
                        return(Task.CompletedTask);
                    }
                    if (eventArgs.Message.Id != commentSection.Id)
                    {
                        return(Task.CompletedTask);
                    }
                    //if (eventArgs.User.Id != ctx.Member.Id) return Task.CompletedTask;

                    eventArgs.Message.DeleteReactionAsync(eventArgs.Emoji, eventArgs.User);

                    if (eventArgs.Emoji.Equals(up))
                    {
                        if (counter < 0)
                        {
                            counter = 0;
                            return(Task.CompletedTask);
                        }
                        counter--;
                        commentSection.ModifyAsync($"Comment #{counter}/{comments.Count}", CommentEmbed(counter - 1));
                        Task.Delay(250);
                        return(Task.CompletedTask);
                    }
                    if (!eventArgs.Emoji.Equals(down))
                    {
                        return(Task.CompletedTask);
                    }
                    if (counter < comments.Count + 1)
                    {
                        counter++;
                        commentSection.ModifyAsync($"Comment #{counter}/{comments.Count}", CommentEmbed(counter - 1));
                        Task.Delay(250);
                        return(Task.CompletedTask);
                    }
                    if (counter == comments.Count + 1)
                    {
                        return(Task.CompletedTask);
                    }
                    Task.Delay(250);
                    return(Task.CompletedTask);
                };
            }
        }
Example #8
0
        public async Task Search(CommandContext ctx,
                                 [Description("Search term")] string term,
                                 [Description("Start rant #")] int startingRant = 1)
        {
            if (startingRant < 1)
            {
                await ctx.RespondAsync("Last argument has to be above 1.");

                return;
            }

            using (var httpClient = new HttpClient())
            {
                var client = DevRantClient.Create(httpClient);

                var rants = client.SearchRants(term).Result;
                if (!rants.Success || rants.Results.Count < 1)
                {
                    await ctx.RespondAsync("No rants with this tag found.");

                    return;
                }

                var counter = startingRant;

                DiscordEmbedBuilder RantEmbed(int rantNumber)
                {
                    return(new DiscordEmbedBuilder
                    {
                        Author = new DiscordEmbedBuilder.EmbedAuthor
                        {
                            IconUrl = GetIcon(rants.Results[rantNumber].UserAvatar.Image),
                            Name = $"{rants.Results[rantNumber].UserName} [{rants.Results[rantNumber].UserScore}]",
                            Url = GetUrl(rants.Results[rantNumber].UserName)
                        },
                        ThumbnailUrl = GetIcon(rants.Results[rantNumber].UserAvatar.Image),
                        Timestamp = new DateTimeOffset(DateTime.Now),
                        Color = new DiscordColor(rants.Results[rantNumber].UserAvatar.Background),
                        Description = rants.Results[rantNumber].Content,
                        ImageUrl = rants.Results[rantNumber].AttachedImage == null ? null : rants.Results[rantNumber].AttachedImage.URL
                    });
                }

                var message = ctx.RespondAsync($"Rant #{counter}/{rants.Results.Count}", embed: RantEmbed(counter - 1)).Result;

                if (rants.Results.Count > 1)
                {
                    var up   = UpEmoji(ctx);
                    var down = DownEmoji(ctx);

                    await message.CreateReactionAsync(up);

                    await message.CreateReactionAsync(down);

                    ctx.Client.MessageReactionAdded += eventArgs =>
                    {
                        if (eventArgs.User.IsBot || eventArgs.Message.Id != message.Id)
                        {
                            return(Task.CompletedTask);
                        }
                        eventArgs.Message.DeleteReactionAsync(eventArgs.Emoji, eventArgs.User);
                        //if (eventArgs.User.Id != ctx.Member.Id) return Task.CompletedTask;

                        if (eventArgs.Emoji.Equals(up))
                        {
                            if (counter < 0)
                            {
                                counter = 0;
                                return(Task.CompletedTask);
                            }
                            counter--;
                            message.ModifyAsync($"Rant #{counter}/{rants.Results.Count}", RantEmbed(counter - 1));
                            Task.Delay(250);
                            return(Task.CompletedTask);
                        }
                        if (!eventArgs.Emoji.Equals(down))
                        {
                            return(Task.CompletedTask);
                        }
                        if (counter < rants.Results.Count + 1)
                        {
                            counter++;
                            message.ModifyAsync($"Rant #{counter}/{ rants.Results.Count}", RantEmbed(counter - 1));
                            Task.Delay(250);
                            return(Task.CompletedTask);
                        }
                        if (counter == rants.Results.Count + 1)
                        {
                            return(Task.CompletedTask);
                        }
                        Task.Delay(250);
                        return(Task.CompletedTask);
                    };
                }
            }
        }