private static async Task <TaskResult> DoTransaction(TransactionRequest request, VooperContext context) { if (!request.Force && request.Amount < 0) { return(new TaskResult(false, "Transaction must be positive.")); } if (request.Amount == 0) { return(new TaskResult(false, "Transaction must have a value.")); } if (request.FromAccount == request.ToAccount) { return(new TaskResult(false, $"An entity cannot send credits to itself.")); } Entity fromUser = await Entity.FindAsync(request.FromAccount); Entity toUser = await Entity.FindAsync(request.ToAccount); if (fromUser == null) { return(new TaskResult(false, $"Failed to find sender {request.FromAccount}.")); } if (toUser == null) { return(new TaskResult(false, $"Failed to find reciever {request.ToAccount}.")); } if (!request.Force && fromUser.Credits < request.Amount) { return(new TaskResult(false, $"{fromUser.Name} cannot afford to send ¢{request.Amount}")); } GovControls govControls = await GovControls.GetCurrentAsync(context); Transaction trans = new Transaction() { ID = Guid.NewGuid().ToString(), Credits = request.Amount, FromUser = request.FromAccount, ToUser = request.ToAccount, Details = request.Detail, Time = DateTime.Now }; await context.Transactions.AddAsync(trans); fromUser.Credits -= request.Amount; toUser.Credits += request.Amount; context.Update(fromUser); context.Update(toUser); await context.SaveChangesAsync(); if (toUser.Id != VooperiaID) { if (request.Tax == ApplicableTax.None && toUser is Group && ((Group)toUser).Group_Category == Group.GroupTypes.Company) { request.Tax = ApplicableTax.Corporate; } if (request.Tax == ApplicableTax.Payroll) { decimal ntax = request.Amount * (govControls.PayrollTaxRate / 100.0m); govControls.UBIAccount += ntax * (govControls.UBIBudgetPercent / 100.0m); govControls.PayrollTaxRevenue += ntax; RequestTransaction(new TransactionRequest(toUser.Id, VooperiaID, ntax, "Payroll Tax", ApplicableTax.None, true)); } else if (request.Tax == ApplicableTax.Sales) { decimal ntax = request.Amount * (govControls.SalesTaxRate / 100.0m); govControls.UBIAccount += ntax * (govControls.UBIBudgetPercent / 100.0m); govControls.SalesTaxRevenue += ntax; RequestTransaction(new TransactionRequest(fromUser.Id, VooperiaID, ntax, "Sales Tax", ApplicableTax.None, true)); } else if (request.Tax == ApplicableTax.Corporate) { decimal ntax = request.Amount * (govControls.CorporateTaxRate / 100.0m); govControls.UBIAccount += ntax * (govControls.UBIBudgetPercent / 100.0m); govControls.CorporateTaxRevenue += ntax; RequestTransaction(new TransactionRequest(toUser.Id, VooperiaID, ntax, "Corporate Tax", ApplicableTax.None, true)); } else if (request.Tax == ApplicableTax.CapitalGains) { decimal ntax = request.Amount * (govControls.CapitalGainsTaxRate / 100.0m); govControls.UBIAccount += ntax * (govControls.UBIBudgetPercent / 100.0m); govControls.CapitalGainsTaxRevenue += ntax; RequestTransaction(new TransactionRequest(fromUser.Id, VooperiaID, ntax, "Capital Gains Tax", ApplicableTax.None, true)); } } else { if (!request.Detail.Contains("Tax") && !request.Detail.Contains("Stock purchase")) { govControls.SalesRevenue += request.Amount; govControls.UBIAccount += (request.Amount * (govControls.UBIBudgetPercent / 100.0m)); } } context.GovControls.Update(govControls); await context.SaveChangesAsync(); return(new TaskResult(true, $"Successfully sent ¢{request.Amount} to {toUser.Name}.")); }
public async void UpdateRanks() { Console.WriteLine("Doing rank job"); using (VooperContext context = new VooperContext(DBOptions)) { Group government = context.Groups.AsQueryable().FirstOrDefault(x => x.Name == "Vooperia"); if (government == null) { Console.WriteLine("Holy f**k something is wrong."); } leaderboard = context.Users.AsEnumerable().Where(u => u.Email != u.UserName).OrderByDescending(u => u.GetTotalXP()).ToList(); List <SocketGuildUser> userList = new List <SocketGuildUser>(); // Add connected users foreach (User userData in leaderboard) { SocketGuildUser user = null; if (userData.discord_id != null) { //user = server.Users.FirstOrDefault(x => x.Id == (ulong)userData.discord_id); user = server.GetUser((ulong)userData.discord_id); } if (user != null) { // Clear roles if muted if (userData.GetDiscordRoles().Any(r => r.Name == "Muted")) { if (user.Roles.Contains(spleenRole)) { await user.RemoveRoleAsync(spleenRole); } if (user.Roles.Contains(crabRole)) { await user.RemoveRoleAsync(crabRole); } if (user.Roles.Contains(gatyRole)) { await user.RemoveRoleAsync(gatyRole); } if (user.Roles.Contains(corgiRole)) { await user.RemoveRoleAsync(corgiRole); } if (user.Roles.Contains(oofRole)) { await user.RemoveRoleAsync(oofRole); } } else { userList.Add(user); } } } int counter = 0; int totalUsers = userList.Count; GovControls govControls = await GovControls.GetCurrentAsync(context); decimal UBITotal = govControls.UBIAccount; govControls.UBIAccount = 0; context.GovControls.Update(govControls); await context.SaveChangesAsync(); int spleenUserCount = totalUsers / 100; int crabUserCount = (totalUsers / 20) - spleenUserCount; int gatyUserCount = (totalUsers / 10) - spleenUserCount - crabUserCount; int corgiUserCount = (totalUsers / 4) - spleenUserCount - crabUserCount - gatyUserCount; int oofUserCount = (totalUsers / 2) - spleenUserCount - crabUserCount - gatyUserCount - corgiUserCount; int unrankedCount = totalUsers - spleenUserCount - crabUserCount - gatyUserCount - corgiUserCount - oofUserCount; decimal spleenPay = 0.0m; decimal crabPay = 0.0m; decimal gatyPay = 0.0m; decimal corgiPay = 0.0m; decimal oofPay = 0.0m; decimal unrankedPay = 0.0m; if (spleenUserCount > 0) { spleenPay = (UBITotal * (govControls.SpleenPayPercent / 100.0m)) / spleenUserCount; } if (crabUserCount > 0) { crabPay = (UBITotal * (govControls.CrabPayPercent / 100.0m)) / crabUserCount; } if (gatyUserCount > 0) { gatyPay = (UBITotal * (govControls.GatyPayPercent / 100.0m)) / gatyUserCount; } if (corgiUserCount > 0) { corgiPay = (UBITotal * (govControls.CorgiPayPercent / 100.0m)) / corgiUserCount; } if (oofUserCount > 0) { oofPay = (UBITotal * (govControls.OofPayPercent / 100.0m)) / oofUserCount; } if (unrankedCount > 0) { unrankedPay = (UBITotal * (govControls.UnrankedPayPercent / 100.0m)) / unrankedCount; } foreach (SocketGuildUser discordUser in userList) { User webUser = context.Users.FirstOrDefault(u => u.discord_id == discordUser.Id); // Update pfp in storage webUser.Image_Url = webUser.GetPfpUrl(); context.Update(webUser); await context.SaveChangesAsync(); bool hasSpleen = discordUser.Roles.Contains(spleenRole); bool hasCrab = discordUser.Roles.Contains(crabRole); bool hasGaty = discordUser.Roles.Contains(gatyRole); bool hasCorgi = discordUser.Roles.Contains(corgiRole); bool hasOof = discordUser.Roles.Contains(oofRole); bool hasCitizen = discordUser.Roles.Contains(patreonCitizen) || discordUser.Roles.Contains(youtubeCitizen); bool hasSoldier = discordUser.Roles.Contains(patreonSoldier); bool hasLoyalist = discordUser.Roles.Contains(patreonLoyalist); bool hasHero = discordUser.Roles.Contains(patreonHero); bool hasMadlad = discordUser.Roles.Contains(patreonMadlad); bool patron = hasCitizen || hasSoldier || hasLoyalist || hasHero || hasMadlad; // Inactivity tax if (Math.Abs(webUser.Discord_Last_Message_Time.Subtract(DateTime.UtcNow).TotalDays) > 14 && !patron) { decimal tax = webUser.Credits * (govControls.InactivityTaxRate / 100.0M); TransactionRequest req = new TransactionRequest(webUser.Id, EconomyManager.VooperiaID, tax, "Inactivity Tax", ApplicableTax.None, true); TaskResult result = await req.Execute(); if (result.Succeeded) { govControls.InactivityTaxRevenue += tax; // Add to UBI govControls.UBIAccount += tax * (govControls.UBIBudgetPercent / 100.0M); context.GovControls.Update(govControls); await context.SaveChangesAsync(); } // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } continue; } // Set district if (!String.IsNullOrWhiteSpace(webUser.district)) { var oldDistrictRoles = discordUser.Roles.Where(x => x.Name.Contains("District") && !x.Name.Contains(webUser.district)); if (oldDistrictRoles.Count() > 0) { await discordUser.RemoveRolesAsync(oldDistrictRoles); } if (!discordUser.Roles.Any(x => x.Name == webUser.district + " District")) { await discordUser.AddRoleAsync(districtRoles[webUser.district + " District"]); } } // Spleen rank if (counter <= spleenUserCount) { // Add new role if (!hasSpleen) { await discordUser.AddRoleAsync(spleenRole); } // Remove last role if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 238827, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, spleenPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } // Crab rank else if (counter <= spleenUserCount + crabUserCount) { // Add new role if (!hasCrab) { await discordUser.AddRoleAsync(crabRole); } // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 146267, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, crabPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } // Gaty rank else if (counter <= spleenUserCount + crabUserCount + gatyUserCount) { // Add new role if (!hasGaty) { await discordUser.AddRoleAsync(gatyRole); } // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 125698, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, gatyPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } // Corgi rank else if (counter <= spleenUserCount + crabUserCount + gatyUserCount + corgiUserCount) { // Add new role if (!hasCorgi) { await discordUser.AddRoleAsync(corgiRole); } // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 110369, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, corgiPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } // Oof rank else if (counter <= spleenUserCount + crabUserCount + gatyUserCount + corgiUserCount + oofUserCount) { // Add new role if (!hasOof) { await discordUser.AddRoleAsync(oofRole); } // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 91085, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, oofPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } // Unranked else { // Remove last role if (hasSpleen) { await discordUser.RemoveRoleAsync(spleenRole); } if (hasCrab) { await discordUser.RemoveRoleAsync(crabRole); } if (hasGaty) { await discordUser.RemoveRoleAsync(gatyRole); } if (hasCorgi) { await discordUser.RemoveRoleAsync(corgiRole); } if (hasOof) { await discordUser.RemoveRoleAsync(oofRole); } if (webUser != null) { //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 125698, "UBI Mistake Fix", ApplicableTax.None, true); TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, unrankedPay, "UBI Payment", ApplicableTax.None, true); EconomyManager.RequestTransaction(transaction); } } if (patron) { webUser = await context.Users.FindAsync(webUser.Id); if (hasMadlad) { webUser.Credits += 500; } else if (hasHero) { webUser.Credits += 350; } else if (hasLoyalist) { webUser.Credits += 175; } else if (hasSoldier) { webUser.Credits += 60; } else if (hasCitizen) { webUser.Credits += 20; } context.Update(webUser); await context.SaveChangesAsync(); } counter++; } } Console.WriteLine("Finished rank system"); }
public async Task <IActionResult> Edit(Group model) { if (!ModelState.IsValid) { return(View(model)); } // Get current user User user = await _userManager.GetUserAsync(User); // Ensure user is logged in if (user == null) { StatusMessage = $"Error: Please log in!"; return(RedirectToAction("Index", controllerName: "Home")); } Group lastmodel = await _context.Groups.FindAsync(model.Id); if (lastmodel == null) { StatusMessage = $"Error: Group {model.Name} does not exist!"; return(RedirectToAction("Index", controllerName: "Home")); } //if (lastmodel.Name != model.Name) //{ // StatusMessage = $"Error: Name cannot be changed!"; // return RedirectToAction("Index", controllerName: "Home"); //} if (model.Name != lastmodel.Name) { if (_context.Groups.Any(x => x.Name.ToLower() == model.Name.ToLower())) { StatusMessage = $"Error: Name {model.Name} is already taken!"; return(RedirectToAction("Index", controllerName: "Home")); } } if (!await lastmodel.HasPermissionAsync(user, "edit")) { StatusMessage = $"Error: You don't have permission to edit {lastmodel.Name}!"; return(RedirectToAction("Index", controllerName: "Home")); } if (lastmodel.Group_Category != model.Group_Category) { StatusMessage = $"Error: Category cannot be changed!"; return(RedirectToAction("Index", controllerName: "Home")); } if (await lastmodel.HasPermissionAsync(user, "description")) { lastmodel.Description = model.Description; } if (lastmodel.Owner_Id == user.Id) { lastmodel.Name = model.Name; lastmodel.Image_Url = model.Image_Url; lastmodel.Open = model.Open; lastmodel.District_Id = model.District_Id; } _context.Update(lastmodel); await _context.SaveChangesAsync(); StatusMessage = $"Successfully edited {model.Name}!"; return(RedirectToAction(nameof(View), new { groupid = model.Id })); }
public static void Client_OnMessageReceived(object sender, OnMessageReceivedArgs e) { Console.WriteLine($"Caught Twitch message {e.ChatMessage.Message}"); string[] args = e.ChatMessage.Message.ToLower().Split(' '); if (args[0] == "!golive" && e.ChatMessage.DisplayName == "SpikeViper") { VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, "Message tracking enabled!"); streaming = true; } if (args[0] == "!stoplive" && e.ChatMessage.DisplayName == "SpikeViper") { VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, "Message tracking disabled!"); streaming = false; } if (args[0] == "!connectsite") { Console.WriteLine($"Detected connect site command!"); if (args.Length < 2) { VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, "Please include your key!"); Console.WriteLine($"Key was not included!"); return; } int key = -1; bool success = int.TryParse(args[1], out key); if (success) { Console.WriteLine($"Parsed key {key}"); using (VooperContext context = new VooperContext(VoopAI.DBOptions)) { var webUser = context.Users.FirstOrDefault(u => u.Id == VoopAI.service._connectionHandler.GetUserFromKey(key)); Console.WriteLine($"Got user"); if (webUser != null) { Console.WriteLine($"Found webuser {webUser.UserName}"); webUser.twitch_id = e.ChatMessage.DisplayName; context.Update(webUser); Console.WriteLine($"Updating context"); try { context.SaveChanges(); } catch (System.Exception ex) { Console.WriteLine(ex.StackTrace); } Console.WriteLine($"Saving changes"); VoopAI.service._connectionHandler.RemoveKey(key); Console.WriteLine($"Removing key"); VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, $"Successfully linked {e.ChatMessage.DisplayName}!"); Console.WriteLine($"Successfully linked twitch {e.ChatMessage.DisplayName}!"); } else { VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, "Unable to find user who generated this key."); Console.WriteLine($"Unable to find web user trying to connect {e.ChatMessage.DisplayName}!"); return; } } } else { VoopAI.twitchClient.SendMessage(e.ChatMessage.Channel, "Unable to read your key."); Console.WriteLine("Failed to read key!"); } } if (!streaming) { return; } using (VooperContext context = new VooperContext(VoopAI.DBOptions)) { User user = context.Users.FirstOrDefault(u => u.twitch_id == e.ChatMessage.DisplayName); if (user != null) { user.twitch_messages++; if (user.twitch_last_message_minute != DateTime.Now.Minute) { user.twitch_message_xp++; user.twitch_last_message_minute = DateTime.Now.Minute; } context.Update(user); context.SaveChanges(); } } }