public void TotalDealScraped()
        {
            //Given

            Hotukdeals hotukdeals = scraper.Hotukdeal();

            //When

            //Then

            Assert.Equal(20, hotukdeals.Total);
        }
        public void RssFeedItem()
        {
            Hotukdeals hotukdeals = hotUKDealRss.Hotukdeal();
            Deal       deal       = hotukdeals.deals[0];

            String firstItemName = deal.Name;

            string link = deal.Link;
            // check if the first deal is similar to one to rss
            // Assert.Equal("1,000 free audiobooks @ Open Culture",firstItemName);
            // Assert.Equal("https://www.hotukdeals.com/deals/1000-free-audiobooks-3490202", link);

            // Assert.Equal("£100.64", deal.Price);
            // Assert.Equal("Amazon", deal.MerchantName);
            // Assert.Equal("https://images.hotukdeals.com/threads/thread_list_big/default/3490255_1.jpg", deal.ImageLink);
        }
        public void RssFeedCount()
        {
            Hotukdeals hotukdeals = hotUKDealRss.Hotukdeal();


            int totalDeal = hotukdeals.Total;

            Assert.Equal(20, totalDeal);

            Deal deal = new DealBuilder()
                        .Name("UnitTest")
                        .Build();

            hotukdeals.addDeal(deal);

            totalDeal = hotukdeals.Total;

            Assert.Equal(21, totalDeal);
        }
        private async Task PostDeals(Hotukdeals hotukdeals, SocketTextChannel channel)
        {
            foreach (Deal deal in hotukdeals.deals)

            {
                var embed = new EmbedBuilder()
                {
                    Title        = deal.Name,
                    Url          = deal.DirectLink,
                    Description  = $"{deal.Description}...[Read More]({deal.Link})",
                    Color        = Color.Green,
                    ThumbnailUrl = deal.ImageLink,
                    Footer       = new EmbedFooterBuilder()
                                   .WithText($"{deal.MadeHot} - {deal.MerchantName}")
                                   .WithIconUrl(deal.CategoryImage),
                };

                embed.AddField("Price", deal.Price, true);


                try{
                    embed.AddField("Hot Meter", deal.HotMeter, true);
                    embed.AddField("Comments", deal.Comments, true);
                }
                catch (ArgumentException secondaryInfo) {
                    embed.AddField("Category ", deal.Category, true);
                    embed.AddField("Merchant", deal.MerchantName, true);
                    embed.Footer = new EmbedFooterBuilder()
                                   .WithText($"{deal.PostedDate}");

                    // Console.WriteLine(nameof(secondaryInfo) + " doesnt exist");
                }

                await Task.Delay(2000);


                await channel.SendMessageAsync(embed : embed.Build());
            }
        }
        private async Task processHotUkDeal(ulong channelID, Hotukdeals hotukdeal)
        {
            System.Console.WriteLine("loop");


            var channel  = (SocketTextChannel)_client.GetChannel(channelID);
            var messages = (IReadOnlyCollection <IMessage>) await channel.GetMessagesAsync(30).FlattenAsync();

            // await channel.DeleteMessagesAsync(messages);



            if (messages.Count != 0)
            {
                // returns  the object tassk from ascyncron
                Hotukdeals dealsNotPosted = filterExpiredDeal(messages, hotukdeal).Result;
                await PostDeals(dealsNotPosted, channel);
            }

            else
            {
                await PostDeals(hotukdeal, channel);
            }
        }
        private async Task <Hotukdeals> filterExpiredDeal(IReadOnlyCollection <IMessage> messages, Hotukdeals hotukdeals)
        {
            bool dealExist = false;

            // check all messages sent in the channel
            foreach (var message in messages)
            {       // all messages were sent as embeds before, only need to check titles
                foreach (var embed in message.Embeds)
                {
                    var title = embed.Title;
                    // check the altest deals scraped and comapre
                    foreach (var deal in hotukdeals.deals)
                    {
                        //System.Console.WriteLine(title);

                        var name = deal.Name;
                        // if the deal exist, just ignore it and break out loop
                        if (title.Equals(name))
                        {
                            dealExist = true;
                            hotukdeals.removeDeal(deal);
                            break;
                        }
                        else
                        {
                            dealExist = false;
                        }
                    }
                    // if it no longer exist on the hotukdeal, means the deal expired so free to delete message
                    if (!dealExist)
                    {
                        // delete the message as it's not needed
                        await Task.Delay(2000);

                        await message.DeleteAsync();
                    }
                }
            }
            // return all the deals that were not posted
            return(hotukdeals);
        }