public static async Task UserGambling(SocketCommandContext context, SocketMessage message, long gambleAmount) { //Tell off the user if they are trying to gamble 0 dollars if (gambleAmount <= 0) { await message.Channel.SendMessageAsync(UserInteraction.BoldUserName(context) + ", Quack, you have to gamble **1 or more** credits"); } else { //Get user credits to list var userCreditStorage = UserDataManager.GetUserStorage(); //Money subtractor if ((userCreditStorage.UserInfo[context.Message.Author.Id].UserBankingStorage.Credit - gambleAmount) < 0) { await message.Channel.SendMessageAsync(UserInteraction.BoldUserName(context) + $", you broke quack, you do not have enough credits || **" + UserBankingHandler.CreditCurrencyFormatter(userCreditStorage.UserInfo[context.Message.Author.Id].UserBankingStorage.Credit) + " Credits**"); } else { //Calculate outcome (userCredits - amountGambled + AmountReturned) long returnAmount = CalculateUserGamblingOutcome(gambleAmount); long userReturnAmount = userCreditStorage.UserInfo[context.Message.Author.Id].UserBankingStorage.Credit - gambleAmount + returnAmount; //Send outcome & calculate taxes //Write credits to file UserCreditsHandler.SetCredits( context, userReturnAmount - await UserCreditsTaxHandler.TaxCollectorAsync(context, returnAmount, UserInteraction.BoldUserName(context) + $", you gambled **{UserBankingHandler.CreditCurrencyFormatter(gambleAmount)} credits** and made **{UserBankingHandler.CreditCurrencyFormatter(returnAmount)} credits**")); } } }
public static async Task SellUserStocksAsync(SocketCommandContext Context, string tickerSymbol, long sellAmount) { var marketStockStorage = XmlManager.FromXmlFile <MarketStockStorage>(CoreMethod.GetFileLocation(@"\MarketStocksValue.xml")); foreach (var stock in marketStockStorage.MarketStock) { if (stock.StockTicker == tickerSymbol) { //Get user portfolio var userStockStorage = XmlManager.FromXmlFile <UserStockStorage>(CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + Context.User.Id.ToString() + ".xml"); //Check if user is selling more stocks than they have try { long userStockAmount = 0; long stockTotalWorth = 0; foreach (var userStock in userStockStorage.UserStock) { if (userStock.StockTicker == tickerSymbol) { userStockAmount = userStock.StockAmount; stockTotalWorth = sellAmount * stock.StockPrice; } } if (userStockAmount - sellAmount < 0) { await Context.Message.Channel.SendMessageAsync($"You do not have enough **{tickerSymbol}** stocks to sell || **{userStockAmount} Stocks**"); } //Check if user is selling 0 or less stocks else if (sellAmount < 1) { await Context.Message.Channel.SendMessageAsync($"You must sell **1 or more** stocks"); } else { //Add user balance UserCreditsHandler.AddCredits( Context, //Subtract tax deductions stockTotalWorth - await UserCreditsTaxHandler.TaxCollectorAsync( Context, stockTotalWorth, $"You sold **{sellAmount} {tickerSymbol}** stocks totaling **{UserBankingHandler.CreditCurrencyFormatter(stockTotalWorth)} Credits**")); //Send user receipt long newStockAmount = userStockAmount - sellAmount; //Write user stock amount //Add existing user stocks to list List <UserStock> userStockStorageList = new List <UserStock>(); foreach (var userStock in userStockStorage.UserStock) { if (userStock.StockTicker != tickerSymbol) { userStockStorageList.Add(userStock); } } //Add newly sold stock userStockStorageList.Add(new UserStock { StockTicker = tickerSymbol, StockAmount = newStockAmount, StockBuyPrice = stock.StockPrice }); //Write user stock amount var userStockRecord = new UserStockStorage { UserStock = userStockStorageList }; XmlManager.ToXmlFile(userStockRecord, CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + Context.User.Id.ToString() + ".xml"); } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } } }