internal static async Task NumberUsers() { Task bidNumberTask = null; using (var context = new HypixelContext()) { for (int i = 0; i < 3; i++) { var doublePlayersId = await context.Players.GroupBy(p => p.Id).Where(p => p.Count() > 1).Select(p => p.Key).FirstOrDefaultAsync(); if (doublePlayersId == 0) { break; } await ResetDoublePlayers(context, doublePlayersId); } await context.SaveChangesAsync(); var unindexedPlayers = await context.Players.Where(p => p.Id == 0).Take(2000).ToListAsync(); if (unindexedPlayers.Any()) { Console.Write($" numbering: {unindexedPlayers.Count()} "); foreach (var player in unindexedPlayers) { player.Id = System.Threading.Interlocked.Increment(ref Indexer.highestPlayerId); context.Players.Update(player); } // save all the ids await context.SaveChangesAsync(); } if (unindexedPlayers.Count < 2000) { // all players in the db have an id now bidNumberTask = Task.Run(NumberBids); await NumberAuctions(context); await context.SaveChangesAsync(); } // temp migration foreach (var item in context.Auctions.Where(a => a.UId == 0) .OrderByDescending(a => a.Id).Take(5000)) { item.UId = AuctionService.Instance.GetId(item.Uuid); context.Update(item); } await context.SaveChangesAsync(); } if (bidNumberTask != null) { await bidNumberTask; } // give the db a moment to store everything await Task.Delay(2000); }
private async Task AddOccurences(HypixelContext context) { foreach (var itemId in ItemDetails.Instance.TagLookup.Values) { var sample = await context.Auctions .Where(a => a.ItemId == itemId) .OrderByDescending(a => a.Id) .Take(20) .Select(a => a.ItemName) .ToListAsync(); var names = context.AltItemNames.Where(n => n.DBItemId == itemId); foreach (var item in names) { var occured = sample.Count(s => s == item.Name); if (occured == 0) { continue; } item.OccuredTimes += occured; context.Update(item); } await context.SaveChangesAsync(); } await Task.Delay(TimeSpan.FromSeconds(1)); }
public void SavePurchase(GoogleUser user, int days, string transactionId) { using (var context = new HypixelContext()) { Server.AddPremiumTime(days, user); context.Add(new Bonus() { BonusTime = TimeSpan.FromDays(days), ReferenceData = transactionId, Type = Bonus.BonusType.PURCHASE, UserId = user.Id }); if (user.ReferedBy != 0) { context.Add(new Bonus() { BonusTime = TimeSpan.FromDays(days) / 10, ReferenceData = transactionId, Type = Bonus.BonusType.REFERED_UPGRADE, UserId = user.ReferedBy }); } context.Update(user); context.SaveChanges(); } }
public void WasReferedBy(GoogleUser user, string referer) { if (user.ReferedBy != 0) { throw new CoflnetException("already_refered", "You already have used a referal Link. You can only be refered once."); } var id = hashids.Decode(referer)[0]; if (id == user.Id) { throw new CoflnetException("self_refered", "You cant refer yourself"); } using (var context = new HypixelContext()) { user.ReferedBy = id; // give the user 'test' premium time Server.AddPremiumTime(1, user); context.Update(user); // persist the boni context.Add(new Bonus() { BonusTime = TimeSpan.FromDays(1), ReferenceData = id.ToString(), Type = Bonus.BonusType.BEING_REFERED, UserId = user.Id }); var referUser = context.Users.Where(u => u.Id == id).FirstOrDefault(); if (referUser != null) { // award referal bonus to user who refered Server.AddPremiumTime(1, referUser); context.Add(new Bonus() { BonusTime = TimeSpan.FromDays(1), ReferenceData = user.Id.ToString(), Type = Bonus.BonusType.REFERAL, UserId = referUser.Id }); context.Update(referUser); } context.SaveChanges(); } }
private static void ShrinkHitsType(HypixelContext context, IEnumerable <IHitCount> source) { // heavy searched results are reduced in order to allow other results to overtake them var res = source.Where(p => p.HitCount > 4); foreach (var item in res) { item.HitCount = item.HitCount * 9 / 10; // - 1; players that were searched once will be prefered forever context.Update(item); } }
public void SaveHits(HypixelContext context) { var hits = itemHits; itemHits = new ConcurrentDictionary <int, int>(); foreach (var hit in hits) { var item = context.Items.Where(item => item.Id == hit.Key).First(); item.HitCount += hit.Value; context.Update(item); } }
internal void AddToken(int userId, string deviceName, string token) { using (var context = new HypixelContext()) { var user = context.Users.Where(u => u.Id == userId).Include(u => u.Devices).FirstOrDefault(); if (user == null) { throw new CoflnetException("unknown_user", "The user is not known"); } var target = user.Devices.Where(d => d.Name == deviceName); if (target.Any()) { var device = target.First(); device.Token = token; context.Update(device); } else { var hasPremium = user.PremiumExpires > DateTime.Now; if (!hasPremium && user.Devices.Count >= 3) { throw new CoflnetException("no_premium", "You need premium to add more than 3 devices"); } if (user.Devices.Count > 10) { throw new CoflnetException("limit_reached", "You can't have more than 11 devices linked to your account"); } var device = new Device() { UserId = user.Id, Name = deviceName, Token = token }; user.Devices.Add(device); context.Update(user); context.Add(device); } context.SaveChanges(); } }
private static async Task ResetDoublePlayers(HypixelContext context, int doublePlayersId) { if (doublePlayersId % 3 == 0) { Console.WriteLine($"Found Double player id: {doublePlayersId}, renumbering, highestId: {Indexer.highestPlayerId}"); } foreach (var item in context.Players.Where(p => p.Id == doublePlayersId)) { item.Id = 0; context.Update(item); } foreach (var item in context.Auctions.Where(p => p.SellerId == doublePlayersId)) { item.SellerId = 0; context.Update(item); } foreach (var item in context.Bids.Where(p => p.BidderId == doublePlayersId)) { item.BidderId = 0; context.Update(item); } await context.SaveChangesAsync(); }
public void SaveHits(HypixelContext context) { var hits = playerHits; playerHits = new ConcurrentDictionary <string, int>(); foreach (var hit in hits) { var player = context.Players.Where(player => player.UuId == hit.Key).FirstOrDefault(); if (player == null) { continue; } player.HitCount += hit.Value; context.Update(player); } }
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 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 async Task DoBatch() { await Task.Delay(TimeSpan.FromMinutes(5)); var batchSize = 2000; using (var context = new HypixelContext()) { var select = context.Auctions .Where(a => a.Id < minId) .OrderByDescending(a => a.Id) .Include(a => a.NBTLookup) .Include(a => a.NbtData) .Take(batchSize); foreach (var auction in select) { if (auction.NBTLookup != null && auction.NBTLookup.Count > 0) { continue; } try { auction.NBTLookup = NBT.CreateLookup(auction.NbtData); context.Update(auction); } catch (Exception e) { Console.WriteLine($"could not generate nbtlookup for {auction.Uuid} {e.Message} \n{e.StackTrace} \n {e.InnerException?.Message} {e.InnerException.StackTrace}"); } } int updated = await context.SaveChangesAsync(); Console.WriteLine($"updated nbt lookup for {updated} auctions, highest: {minId}"); minId -= batchSize; } }
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 }); }