// Override the CheckPermissions method public async override Task <PreconditionResult> CheckPermissions(ICommandContext context, CommandInfo command, IServiceProvider _services) { var userStorage = UserDataManager.GetUserStorage(); //Create xml user credit entry if user does not exist if (!userStorage.UserInfo.TryGetValue(context.Message.Author.Id, out var i)) { //Create user profile UserDataManager.CreateNewUserXmlEntry(context as SocketCommandContext); } //Create user stock entry if stock entry does not exist if (!File.Exists(CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + context.Message.Author.Id + ".xml")) { //Create user profile //Write user stock amount var userStockRecord = new UserStockStorage { UserStock = new List <UserStock> { //new UserStock {StockTicker="DUCK", StockAmount=0, StockBuyPrice=0 } } }; XmlManager.ToXmlFile(userStockRecord, CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + context.User.Id.ToString() + ".xml"); } return(PreconditionResult.FromSuccess()); }
public static async Task BuyUserStocksAsync(SocketCommandContext Context, string tickerSymbol, long buyAmount) { var marketStockStorage = XmlManager.FromXmlFile <MarketStockStorage>(CoreMethod.GetFileLocation(@"\MarketStocksValue.xml")); foreach (var stock in marketStockStorage.MarketStock) { //Get the user selected stock from storage if (stock.StockTicker == tickerSymbol) { //Sets buystockExists to true so it won't send a warning saying stock does not exist bool buyStockExists = true; //Get user portfolio var userStocksStorage = XmlManager.FromXmlFile <UserStockStorage>(CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + Context.User.Id.ToString() + ".xml"); //Calculate stock price long stockTotalCost = stock.StockPrice * buyAmount; //Return error if stock value is currently at 0 if (stock.StockPrice <= 0) { await Context.Message.Channel.SendMessageAsync($"There are no available sellers for stock **{tickerSymbol}**"); } //Check if user can buy stock else if (UserCreditsHandler.GetUserCredits(Context) - stockTotalCost < 0) { await Context.Message.Channel.SendMessageAsync($"You do not have enough credits to buy **{buyAmount} {tickerSymbol}** stocks at price of **{UserBankingHandler.CreditCurrencyFormatter(stock.StockPrice)} each** totaling **{UserBankingHandler.CreditCurrencyFormatter(stockTotalCost)} Credits**"); } //Check if user is buying 0 or less stocks else if (buyAmount < 1) { await Context.Message.Channel.SendMessageAsync($"You must buy **1 or more** stocks"); } else { //Subtract user balance UserCreditsHandler.AddCredits(Context, Convert.ToInt64(-stockTotalCost)); //Check if user already has some of stock currently buying //If true, Calculates new user stock total long newStockAmount = buyAmount; foreach (var userStock in userStocksStorage.UserStock) { if (userStock.StockTicker == tickerSymbol) { newStockAmount += userStock.StockAmount; } } //Send user receipt await Context.Message.Channel.SendMessageAsync($"You purchased **{buyAmount} {tickerSymbol}** stocks at price of **{stock.StockPrice} each** totaling **{stockTotalCost} Credits**"); //Add existing user stocks to list var userStockStorage = XmlManager.FromXmlFile <UserStockStorage>(CoreMethod.GetFileLocation(@"\UserStocks") + @"\" + Context.User.Id.ToString() + ".xml"); List <UserStock> userStockStorageList = new List <UserStock>(); foreach (var userStock in userStockStorage.UserStock) { if (userStock.StockTicker != tickerSymbol) { userStockStorageList.Add(userStock); } } //Add new 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"); } //Send warning if stock does not exist if (buyStockExists == false) { await Context.Message.Channel.SendMessageAsync($"Stock **{tickerSymbol}** does not exist in the market"); } } } }
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); } } } }