Exemple #1
0
        public override Task Execute(MessageData data)
        {
            if (BinUpdater.SoldLastMin.Count > 0)
            {
                var recentSold = BinUpdater.SoldLastMin.Take(40)
                                 .Select(a => new PlayerAuctionsCommand.AuctionResult(a))
                                 .Select(AuctionService.Instance.GuessMissingProperties)
                                 .ToList();

                return(data.SendBack(data.Create("endedAuctions", recentSold, A_MINUTE)));
            }

            using (var context = new HypixelContext())
            {
                context.Database.SetCommandTimeout(30);
                var end           = System.DateTime.Now;
                var highVolumeIds = new System.Collections.Generic.HashSet <int>()
                {
                    ItemDetails.Instance.GetItemIdForName("ENCHANTED_BOOK"),
                    ItemDetails.Instance.GetItemIdForName("GRAPPLING_HOOK"),
                    ItemDetails.Instance.GetItemIdForName("KISMET_FEATHER"),
                };
                var pages = context.Auctions.Where(a => highVolumeIds.Contains(a.ItemId) && a.End < end)
                            .OrderByDescending(a => a.Id)
                            .Select(p => new PlayerAuctionsCommand.AuctionResult(p))
                            .Take(100)
                            .ToList()
                            .OrderByDescending(a => a.End)
                            .Take(30)
                            .Select(AuctionService.Instance.GuessMissingProperties)
                            .ToList();
                return(data.SendBack(data.Create("endedAuctions", pages, A_MINUTE)));
            }
        }
Exemple #2
0
 public override Task Execute(MessageData data)
 {
     using (var context = new HypixelContext())
     {
         try
         {
             var user = data.User;
             return(data.SendBack(data.Create("premiumExpiration", user?.PremiumExpires)));
         } catch (Exception)
         {
             // no premium
             return(data.SendBack(data.Create <string>("premiumExpiration", null)));
         }
     }
 }
        public override Task Execute(MessageData data)
        {
            ItemSearchQuery details = ItemPricesCommand.GetQuery(data);

            // temporary map none (0) to any
            if (details.Reforge == Reforge.None)
            {
                details.Reforge = Reforge.Any;
            }


            if (Program.LightClient && details.Start < DateTime.Now - TimeSpan.FromDays(7))
            {
                return(ClientProxy.Instance.Proxy(data));
            }

            var thread = ItemPrices.Instance.GetPriceFor(details);
            var res    = thread.Result;

            var maxAge = A_MINUTE;

            if (IsDayRange(details))
            {
                maxAge = A_DAY;
            }
            Console.WriteLine("made response");

            return(data.SendBack(data.Create("itemResponse", res, maxAge)));
        }
Exemple #4
0
        public override async Task Execute(MessageData data)
        {
            var items = data.GetAs <List <PricesSyncCommand.AveragePriceSync> >()
                        .ConvertAll(p => p.GetBack())
                        .OrderBy(p => p.Date)
                        .ToList();
            int count = 0;

            ReceivedCount += items.Count;
            if (items.Count == 0)
            {
                return;
            }
            using (var context = new HypixelContext())
            {
                var batchsize = 200;
                for (int i = 0; i < items.Count / batchsize; i++)
                {
                    await DoBatch(items.Skip(i *batchsize).Take(batchsize), count, context);
                }
                count = context.Prices.Count();
            }
            if (count > 200_000 && Environment.ProcessorCount > 9)
            {
                return; // break early on my dev machine
            }
            await data.SendBack(data.Create("pricesSync", ReceivedCount));
        }
        public override System.Threading.Tasks.Task Execute(MessageData data)
        {
            ItemSearchQuery details = GetQuery(data);



            Console.WriteLine($"Start: {details.Start} End: {details.End}");

            int hourAmount = DetermineHourAmount(details);

            var fromDB = ItemPrices.Instance.GetPriceFor(details);

            fromDB.Wait();

            var result = new List <Result>();

            result.AddRange(fromDB.Result.Prices.Select(p => new Result()
            {
                Count = p.Volume,
                Price = (int)p.Avg,
                End   = p.Date
            }));

            var response = GroupResponseByHour(result, hourAmount);

            var maxAge = 100;

            if (details.Start < DateTime.Now - TimeSpan.FromDays(2))
            {
                maxAge = A_DAY;
            }

            return(data.SendBack(data.Create("itemResponse", response, maxAge)));
        }
        public static MessageData CreateResponse(MessageData data, string uuid)
        {
            var name = PlayerSearch.Instance.GetName(uuid);

            // player names don't change often, but are easy to compute
            return(data.Create("nameResponse", name, A_HOUR));
        }
        public override Task Execute(MessageData data)
        {
            var r = new System.Random();

            using (var context = new HypixelContext())
            {
                var pages = context.Items
                            .OrderByDescending(i => i.HitCount)
                            .Select(i => new { Name = i.Names.FirstOrDefault(), i.Tag, i.IconUrl })
                            .Take(40).ToList()
                            .Select(i => new Result()
                {
                    title = i.Name?.Name, url = "/item/" + i.Tag, img = i.IconUrl
                })
                            .ToList();


                pages.AddRange(context.Players
                               .OrderByDescending(i => i.HitCount).Select(i => new { Name = i.Name, i.UuId })
                               .Take(40)
                               .ToList()
                               .Select(p => new Result()
                {
                    title = p.Name, url = "/player/" + p.UuId, img = SearchService.PlayerHeadUrl(p.UuId)
                }));

                return(data.SendBack(data.Create("popularSearches", pages
                                                 .OrderBy(s => r.Next()).Take(50).ToList(), A_MINUTE * 5)));
            }
        }
        public override async Task Execute(MessageData data)
        {
            var search = RemoveInvalidChars(data.Data);
            var result = await ItemDetails.Instance.Search(search);

            await data.SendBack(data.Create("itemSearch", result.Select(a => new SearchService.SearchResultItem(a)).ToList(), A_HOUR));
        }
Exemple #9
0
        public override async Task Execute(MessageData data)
        {
            var details = data.GetAs <ActiveItemSearchQuery>();

            if (Program.LightClient && details.Start < DateTime.Now - TimeSpan.FromDays(7))
            {
                await ClientProxy.Instance.Proxy(data);

                return;
            }
            // temporary map none (0) to any
            if (details.Reforge == Reforge.None)
            {
                details.Reforge = Reforge.Any;
            }

            var count = 24;

            if (details.Limit < count && details.Limit > 0)
            {
                count = details.Limit;
            }

            var res = await ItemPrices.Instance.GetActiveAuctions(details);

            await data.SendBack(data.Create("activeAuctions", res, A_MINUTE * 2));
        }
Exemple #10
0
 public override Task Execute(MessageData data)
 {
     using (var context = new HypixelContext())
     {
         var userId = data.UserId;
         var subs   = context.SubscribeItem.Where(s => s.UserId == userId).ToList();
         return(data.SendBack(data.Create("subscriptions", subs)));
     }
 }
        public override async Task Execute(MessageData data)
        {
            var    args = data.GetAs <Arguments>();
            string serviceAccountEmail = "*****@*****.**";

            var certificate = new X509Certificate2(@"keyfile.p12", "notasecret", X509KeyStorageFlags.Exportable);

            ServiceAccountCredential credential = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                Scopes = new[] { "https://www.googleapis.com/auth/androidpublisher" }
            }.FromCertificate(certificate));



            var service = new AndroidPublisherService(
                new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = "GooglePlay API Sample",
            });
            // try catch this function because if you input wrong params ( wrong token) google will return error.
            //var request = service.Inappproducts.List("de.flou.hypixel.skyblock");
            var request = service.Purchases.Products.Get(
                args.PackageName,
                args.ProductId,
                args.Token);

            try
            {
                Console.WriteLine($"Purchasing Product with id: {args.ProductId}");
                var purchaseState = await request.ExecuteAsync();

                //get purchase'status


                Console.WriteLine(JsonConvert.SerializeObject(purchaseState));

                if (((long)purchaseState.PurchaseTimeMillis / 1000).ThisIsNowATimeStamp() < DateTime.Now - TimeSpan.FromDays(7))
                {
                    throw new CoflnetException("purchase_expired", "This purchase is older than a week and thus expired");
                }

                var days = int.Parse(args.ProductId.Split('_')[1]);
                UserService.Instance.SavePurchase(data.User, days, purchaseState.OrderId);
            }
            catch (Exception e)
            {
                Logger.Instance.Error("Purchase failure " + e.Message);
                throw new CoflnetException("purchase_failed", "Purchase failed, please contact the admin");
            }



            await data.SendBack(data.Create("accepted", "payment was accepted enjoy your premium", A_WEEK));
        }
        public override Task Execute(MessageData data)
        {
            Regex rgx    = new Regex("[^a-zA-Z0-9_]");
            var   search = rgx.Replace(data.Data, "").ToLower();

            var players = PlayerSearch.Instance.Search(search, 5);

            return(data.SendBack(data.Create("searchResponse", players, A_WEEK)));

            return(Task.CompletedTask);
        }
        public override Task Execute(MessageData data)
        {
            using (var context = new HypixelContext())
            {
                var args   = data.GetAs <Arguments>();
                var userId = data.UserId;

                var affected = SubscribeEngine.Instance.Unsubscribe(userId, args.Topic, args.Type).Result;

                return(data.SendBack(data.Create("unsubscribed", affected)));
            }
        }
        public static MessageData CreateResponse(MessageData data)
        {
            string search  = ReplaceInvalidCharacters(data.Data);
            var    details = ItemDetails.Instance.GetDetails(search);
            var    time    = A_DAY;

            if (details.Tag == "Unknown" || string.IsNullOrEmpty(details.Tag))
            {
                time = 0;
            }
            return(data.Create("itemDetailsResponse", details, time));
        }
Exemple #15
0
        public override Task Execute(MessageData data)
        {
            var uuid = data.GetAs <string>();

            System.Console.WriteLine(uuid);
            using (var context = new HypixelContext())
            {
                var auction = context.Auctions
                              .Where(a => a.Uuid == uuid)
                              .Include(a => a.NbtData)
                              .Include(a => a.Enchantments)
                              .FirstOrDefault();
                if (auction == null)
                {
                    throw new CoflnetException("auction_unkown", "not found");
                }
                if (Flipper.FlipperEngine.Instance.relevantAuctionIds.TryGetValue(auction.UId, out List <long> ids))
                {
                    return(data.SendBack(data.Create("basedOnResp", context.Auctions.Where(a => ids.Contains(a.UId)).Select(a => new Response()
                    {
                        uuid = a.Uuid,
                        highestBid = a.HighestBidAmount,
                        end = a.End
                    }).ToList(), 120)));
                }
                System.Console.WriteLine($"uuid not found on id list " + Flipper.FlipperEngine.Instance.relevantAuctionIds.Count);

                var result = Flipper.FlipperEngine.Instance.GetRelevantAuctions(auction, context);
                result.Wait();
                return(data.SendBack(data.Create("basedOnResp", result.Result.Item1
                                                 .Select(a => new Response()
                {
                    uuid = a.Uuid,
                    highestBid = a.HighestBidAmount,
                    end = a.End
                }),
                                                 A_HOUR)));
            }
        }
Exemple #16
0
 public override Task Execute(MessageData data)
 {
     using (var context = new HypixelContext())
     {
         var pages = context.Auctions.OrderByDescending(a => a.Id)
                     .Take(30)
                     .Select(p => new PlayerAuctionsCommand.AuctionResult(p))
                     .ToList()
                     .Select(AuctionService.Instance.GuessMissingProperties)
                     .ToList();
         return(data.SendBack(data.Create("newAuctions", pages, A_MINUTE)));
     }
 }
Exemple #17
0
 public override Task Execute(MessageData data)
 {
     using (var context = new HypixelContext())
     {
         var players = context.Players
                       .OrderByDescending(p => p.UpdatedAt)
                       .Take(50)
                       .ToList()
                       .Select(p => new Response()
         {
             Name = p.Name, UpdatedAt = p.UpdatedAt, UuId = p.UuId
         });
         return(data.SendBack(data.Create("newPlayersResponse", players, A_MINUTE)));
     }
 }
Exemple #18
0
        public override async Task Execute(MessageData data)
        {
            var response = data.GetAs <PlayerSyncCommand.PlayerSyncData>();
            var players  = response.Players;
            var ids      = players.Select(p => p.UuId);

            if (players.Count == 0)
            {
                return; // done
            }
            int count = 0;

            using (var context = new HypixelContext())
            {
                var existingPlayers = context.Players.Where(p => ids.Contains(p.UuId));
                var existing        = existingPlayers.ToDictionary(p => p.UuId);
                foreach (var player in players)
                {
                    if (existing.ContainsKey(player.UuId))
                    {
                        var existingPlayer = existingPlayers.Where(p => p.UuId == player.UuId).FirstOrDefault();
                        if (existingPlayer.Name == null)
                        {
                            existingPlayer.Name = player.Name;
                            context.Update(existingPlayer);
                        }
                        continue;
                    }
                    context.Players.Add(player);
                    count++;
                    if (count % 1000 == 0)
                    {
                        await context.SaveChangesAsync();
                    }
                }
                try
                {
                    await context.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    dev.Logger.Instance.Error(e, "playerSync");
                }
                count = context.Players.Count();
            }
            await data.SendBack(data.Create("playerSync", response.Offset));
        }
 public override Task Execute(MessageData data)
 {
     using (var context = new HypixelContext())
     {
         var items = context.Items.OrderByDescending(p => p.Id)
                     .Select(i => new { IconUrl = i.IconUrl, Name = i.Names.Where(n => n.Name != null && n.Name != "null").FirstOrDefault(), Tag = i.Tag })
                     .Where(i => i.Name != null)
                     .Take(50)
                     .ToList()
                     .Select(i => new Response()
         {
             IconUrl = i.IconUrl, Name = i.Name.Name, Tag = i.Tag
         })
                     .ToList();
         return(data.SendBack(data.Create("newItemsResponse", items, A_HOUR)));
     }
 }
        public override Task Execute(MessageData data)
        {
            ItemSearchQuery details = ItemPricesCommand.GetQuery(data);

            if (Program.LightClient && details.Start < DateTime.Now - TimeSpan.FromDays(7))
            {
                return(ClientProxy.Instance.Proxy(data));
            }
            // temporary map none (0) to any
            if (details.Reforge == Reforge.None)
            {
                details.Reforge = Reforge.Any;
            }

            var res = ItemPrices.Instance.GetRecentAuctions(details);

            return(data.SendBack(data.Create("auctionResponse", res, A_MINUTE * 2)));
        }
        public override Task Execute(MessageData data)
        {
            var flipps = Flipper.FlipperEngine.Instance.Flipps.Take(50);

            try {
                if (data.UserId != 0)
                {
                    flipps = Flipper.FlipperEngine.Instance.Flipps.Skip(50).Take(50);
                }
                if (data.User.HasPremium)
                {
                    flipps = Flipper.FlipperEngine.Instance.Flipps.Reverse().Skip(2).Take(50);
                }
            } catch (CoflnetException)
            {
                // no premium, continue
            }
            return(data.SendBack(data.Create("flips", flipps, A_MINUTE)));
        }
        public override async Task Execute(MessageData data)
        {
            var uuid = data.GetAs<string>();
            var amount = (new Random()).Next(20, 999);
            var userId = 1;//data.UserId;
            var player = await PlayerService.Instance.GetPlayer(uuid);
            if (player == default(Player))
                throw new CoflnetException("unkown_player", "This player was not found");

            var sub = new VerifySub(a =>
            {
                var code = a.StartingBid;
                if(a.AuctioneerId != uuid)
                    code = a.Bids.Where(u => u.Bidder == uuid).Select(b => b.Amount).Where(b => b % 1000 == amount).FirstOrDefault();
                Console.WriteLine("vertifying " + code);
                if (code % 1000 == amount)
                    using (var context = new HypixelContext())
                    {
                        var user = context.Users.Where(u => u.Id == userId).FirstOrDefault();
                        user.MinecraftUuid = a.AuctioneerId;
                        context.Update(user);
                        context.SaveChanges();
                    }
            });
            sub.Type = SubscribeItem.SubType.PLAYER;
            sub.UserId = userId;
            sub.TopicId = uuid;
            sub.Price = amount;

            SubscribeEngine.Instance.AddNew(sub);

            var response = new Response()
            {
                StartingBid = amount
            };

            await data.SendBack(data.Create("connectMc", response));
        }
        public override Task Execute(MessageData data)
        {
            var watch             = Stopwatch.StartNew();
            var search            = ItemSearchCommand.RemoveInvalidChars(data.Data);
            var cancelationSource = new CancellationTokenSource();
            var results           = SearchService.Instance.Search(search, cancelationSource.Token);

            var result   = new ConcurrentBag <SearchService.SearchResultItem>();
            var pullTask = Task.Run(async() =>
            {
                Console.WriteLine($"Started task " + watch.Elapsed);
                while (results.Result.TryDequeue(out SearchService.SearchResultItem r))
                {
                    result.Add(r);
                    if (result.Count > 15)
                    {
                        return; // return early
                    }
                    Task.Run(() => LoadPreview(watch, r), cancelationSource.Token).ConfigureAwait(false);
                }
            }, cancelationSource.Token);

            Console.WriteLine($"Waiting half a second " + watch.Elapsed);
            pullTask.Wait(320);
            while (results.Result.TryDequeue(out SearchService.SearchResultItem r))
            {
                result.Add(r);
            }
            Console.WriteLine($"Waited half a second " + watch.Elapsed);

            var maxAge = A_DAY / 2;

            cancelationSource.Cancel();
            Console.WriteLine($"Started sorting {search} " + watch.Elapsed);
            var orderedResult = result
                                .Select(r =>
            {
                var lower = r.Name.ToLower();
                return(new
                {
                    rating = String.IsNullOrEmpty(r.Name) ? 0 :
                             lower.Length / 2
                             - r.HitCount * 2
                             - (lower == search ? 10000000 : 0)                                                    // is exact match
                             - (lower.Length > search.Length && lower.Truncate(search.Length) == search ? 100 : 0) // matches search
                             - (Fastenshtein.Levenshtein.Distance(lower, search) <= 1 ? 40 : 0)                    // just one mutation off maybe a typo
                             + Fastenshtein.Levenshtein.Distance(lower.PadRight(search.Length), search) / 2        // distance to search
                             + Fastenshtein.Levenshtein.Distance(lower.Truncate(search.Length), search),
                    r
                });
            }
                                        )
                                .OrderBy(r => r.rating)
                                .Where(r => { Console.WriteLine($"Ranked {r.r.Name} {r.rating} {Fastenshtein.Levenshtein.Distance(r.r.Name.PadRight(search.Length), search) / 10} {Fastenshtein.Levenshtein.Distance(r.r.Name.Truncate(search.Length), search)}"); return(true); })
                                .Where(r => r.rating < 10)
                                .ToList()
                                .Select(r => r.r)
                                .Distinct(new SearchService.SearchResultComparer())
                                .Take(5)
                                .ToList();

            Console.WriteLine($"making response " + watch.Elapsed);
            if (orderedResult.Count() == 0)
            {
                maxAge = A_MINUTE;
            }

            return(data.SendBack(data.Create(Type, orderedResult, maxAge)));

            return(Task.Run(() =>
            {
                if (!(data is Server.ProxyMessageData <string, object>))
                {
                    TrackingService.Instance.TrackSearch(data, data.Data, orderedResult.Count, watch.Elapsed);
                }
            }));
        }
        public override Task Execute(MessageData data)
        {
            Result result = new Result();

            Regex rgx    = new Regex("[^a-f0-9]");
            var   search = rgx.Replace(data.Data, "");

            result.Bids.Add(new BidResult()
            {
                ItemName = "Loading ..."
            });
            result.Bids.Add(new BidResult()
            {
                ItemName = "This takes a minute :/"
            });
            result.Auctions.Add(new AuctionResult()
            {
                ItemName = "Loading the latest data"
            });
            data.SendBack(data.Create("playerResponse", result, A_HOUR));

            using (var context = new HypixelContext()) {
                var playerQuery        = context.Players.Where(p => p.UuId == search);
                var playerWithAuctions = playerQuery
                                         //   .Include (p => p.Auctions)
                                         .First();

                result.Auctions = context.Auctions
                                  .Where(e => e.SellerId == playerWithAuctions.Id)
                                  .Select(a => new AuctionResult(a))
                                  .OrderByDescending(a => a.End)
                                  .ToList();

                // just the auctions for now
                data.SendBack(data.Create("playerResponse", result, A_HOUR));


                var playerBids = context.Bids.Where(b => b.Bidder == search)
                                 //.Include (p => p.Auction)
                                 .Select(b => new {
                    b.Auction.Uuid,
                    b.Auction.ItemName,
                    b.Auction.HighestBidAmount,
                    b.Auction.End,
                    b.Amount,
                }).GroupBy(b => b.Uuid)
                                 .Select(bid => new {
                    bid.Key,
                    Amount        = bid.Max(b => b.Amount),
                    HighestBid    = bid.Max(b => b.HighestBidAmount),
                    ItemName      = bid.Max(b => b.ItemName),
                    HighestOwnBid = bid.Max(b => b.Amount),
                    End           = bid.Max(b => b.End)
                })
                                 //.ThenInclude (b => b.Auction)
                                 .ToList();

                var aggregatedBids = playerBids
                                     .Select(b => new BidResult()
                {
                    HighestBid    = b.HighestBid,
                    AuctionId     = b.Key,
                    End           = b.End,
                    HighestOwnBid = b.HighestOwnBid,
                    ItemName      = b.ItemName
                })
                                     .OrderByDescending(b => b.End)
                                     .ToList();

                result.Bids = aggregatedBids;
                //data.SendBack (MessageData.Create ("playerResponse", result));

                // fetch full auction data
                //var auctionsForBids = context.Auctions.Where(a=>result.Bids.Any(b=>b.==a.Id))
            }

            return(data.SendBack(data.Create("playerResponse", result, A_HOUR)));
        }
 public override Task Execute(MessageData data)
 {
     return(data.SendBack(data.Create("preview",
                                      PreviewService.Instance.GetItemPreview(data.GetAs <string>()),
                                      A_DAY)));
 }
 public override Task Execute(MessageData data)
 {
     return(data.SendBack(data.Create("version", Program.Version, A_DAY)));
 }
        public override Task Execute(MessageData data)
        {
            var devices = data.User.Devices;

            return(data.SendBack(data.Create("devices", devices)));
        }
 public override Task Execute(MessageData data)
 {
     SubscribeEngine.Instance.Subscribe(data.GetAs <string>(), data.UserId);
     return(data.SendBack(data.Create("subscribeResponse", "success")));
 }
        public override Task Execute(MessageData data)
        {
            var refInfo = ReferalService.Instance.GetReferalInfo(data.User);

            return(data.SendBack(data.Create("refInfo", refInfo)));
        }
        public override Task Execute(MessageData data)
        {
            string productId;

            try
            {
                productId = data.GetAs <string>();
            }
            catch (Exception)
            {
                throw new CoflnetException("invaild_data", "Data should contain a product id as string");
            }
            var product = GetProduct(productId);
            var price   = GetPrice(productId);

            var domain  = "https://sky.coflnet.com";
            var options = new SessionCreateOptions
            {
                PaymentMethodTypes = new List <string>
                {
                    "card",
                },
                LineItems = new List <SessionLineItemOptions>
                {
                    new SessionLineItemOptions
                    {
                        PriceData = new SessionLineItemPriceDataOptions
                        {
                            UnitAmount = price.UnitAmount,

                            Currency = "eur",
                            Product  = productId
                        },

                        // Description = "Unlocks premium features: Subscribe to 100 Thrings, Search with multiple filters and you support the project :)",
                        Quantity = 1,
                    },
                },
                Metadata          = product.Metadata,
                Mode              = "payment",
                SuccessUrl        = domain + "/success",
                CancelUrl         = domain + "/cancel",
                ClientReferenceId = data.UserId.ToString()
            };
            var     service = new SessionService();
            Session session;

            try
            {
                session = service.Create(options);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw new CoflnetException("internal_error", "service not working");
            }
            using (var context = new HypixelContext())
            {
                var user = data.User;
                context.Update(user);
                context.SaveChanges();
            }

            return(data.SendBack(data.Create("checkoutSession", session.Id), false));
            //return Json(new { id = session.Id });
        }