Exemplo n.º 1
0
 public async Task GetBalanceAsync()
 {
     if (CanRunTipCommands)
     {
         var result = QTCommands.GetBalance(Context.User.Id);
         await ReplyAsync($"Your balance is {result.Result} {Preferences.BaseCurrency}");
     }
     else
     {
         await ReplyAsync($"Please use the <#{Preferences.TipBotChannel}> channel");
     }
 }
Exemplo n.º 2
0
        public async Task GetHouseBalance()
        {
            if (CanRunTipCommands)
            {
                var balanceString = QTCommands.GetBalance(DiscordClientNew._client.CurrentUser.Id).Result;

                if (decimal.TryParse(balanceString, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint, CultureInfo.CreateSpecificCulture("en-GB"), out var balance))
                {
                    balance = balance - FantasyPortfolioModule.PrizePool;
                    await ReplyAsync($"The house balance is at {balance} {Preferences.BaseCurrency}");
                }
                else
                {
                    await ReplyAsync("Error getting house balance");
                }
            }
            else
            {
                await ReplyAsync($"Please use the <#{Preferences.TipBotChannel}> channel");
            }
        }
Exemplo n.º 3
0
        public async Task RockPaperScissorsGame(string rps, string amount)
        {
            if (CanRunTipCommands)
            {
                if (Enum.TryParse(rps.ToLower(), out RockPaperScissors userDecision))
                {
                    if (decimal.TryParse(amount, out var betAmount))
                    {
                        if (QTCommands.CheckBalance(Context.User.Id, betAmount))
                        {
                            if (betAmount < MinBetAmount)
                            {
                                await ReplyAsync($"Minimum bet {MinBetAmount} {Preferences.BaseCurrency}");

                                return;
                            }

                            decimal balance          = 0;
                            var     houseBalanceCall = QTCommands.GetBalance(Context.Client.CurrentUser.Id).Result;
                            decimal.TryParse(houseBalanceCall, out balance);

                            decimal maxBet = balance / 10;

                            if (betAmount > maxBet)
                            {
                                await ReplyAsync($"Maximum bet exceeded. Max: {maxBet} {Preferences.BaseCurrency}");

                                return;
                            }

                            var rewardValue = betAmount * (decimal)BetWin;
                            if (QTCommands.CheckBalance(DiscordClientNew._client.CurrentUser.Id, rewardValue + FantasyPortfolioModule.PrizePool))
                            {
                                QTCommands.SendTip(Context.User.Id, DiscordClientNew._client.CurrentUser.Id, betAmount);
                                try {
                                    var botDecision = (RockPaperScissors)RandomInteger(0, 3);

                                    var embed = new EmbedBuilder();

                                    string message = "";

                                    var userOutcome = new Outcome();

                                    switch (botDecision)
                                    {
                                    case RockPaperScissors.rock: {
                                        switch (userDecision)
                                        {
                                        case RockPaperScissors.rock:
                                            userOutcome = Outcome.draw;
                                            break;

                                        case RockPaperScissors.paper:
                                            userOutcome = Outcome.win;
                                            break;

                                        case RockPaperScissors.scissors:
                                            userOutcome = Outcome.lose;
                                            break;
                                        }
                                        break;
                                    }

                                    case RockPaperScissors.paper: {
                                        switch (userDecision)
                                        {
                                        case RockPaperScissors.rock:
                                            userOutcome = Outcome.lose;
                                            break;

                                        case RockPaperScissors.paper:
                                            userOutcome = Outcome.draw;
                                            break;

                                        case RockPaperScissors.scissors:
                                            userOutcome = Outcome.win;
                                            break;
                                        }
                                        break;
                                    }

                                    case RockPaperScissors.scissors: {
                                        switch (userDecision)
                                        {
                                        case RockPaperScissors.rock:
                                            userOutcome = Outcome.win;
                                            break;

                                        case RockPaperScissors.paper:
                                            userOutcome = Outcome.lose;
                                            break;

                                        case RockPaperScissors.scissors:
                                            userOutcome = Outcome.draw;
                                            break;
                                        }
                                        break;
                                    }
                                    }

                                    switch (userOutcome)
                                    {
                                    case Outcome.win:
                                        QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, rewardValue);
                                        embed.AddInlineField("Outcome", $"Bot opted for {botDecision.ToString()} whereas you opted for {userDecision.ToString()}");
                                        embed.AddInlineField("Prize", $"{rewardValue} {Preferences.BaseCurrency}");
                                        embed.AddInlineField("Profit", $"{(rewardValue - betAmount)} {Preferences.BaseCurrency}");
                                        embed.WithColor(Discord.Color.Green);
                                        message = $"You won! Congratulations {Context.User.Mention}!";
                                        break;

                                    case Outcome.draw:
                                        QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, betAmount);
                                        embed.AddInlineField("Outcome", $"Bot opted for {botDecision.ToString()} whereas you opted for {userDecision.ToString()}");
                                        embed.WithColor(Discord.Color.Gold);
                                        message = "It was a draw! Bet refunded";
                                        break;

                                    case Outcome.lose:
                                        QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, betAmount);
                                        embed.AddInlineField("Outcome", $"Bot opted for {botDecision.ToString()} whereas you opted for {userDecision.ToString()}");
                                        embed.AddInlineField("Prize", $"{rewardValue} {Preferences.BaseCurrency}");
                                        embed.AddInlineField("Profit", $"{(rewardValue - betAmount)} {Preferences.BaseCurrency}");
                                        embed.WithColor(Discord.Color.Red);
                                        message = "Unlucky! You lose! Bot won";
                                        break;
                                    }
                                    embed.WithFooter(Preferences.FooterText);
                                    await ReplyAsync(message, false, embed);

                                    Console.WriteLine($"{Context.User.Id} ({Context.User.Username}) opted for {userDecision} and bot opted for {botDecision}");
                                }
                                catch (Exception e) {
                                    Console.WriteLine(e.Message);
                                    QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, betAmount);
                                    await ReplyAsync("Sorry something went wrong. You have been refunded your bet.");
                                }
                            }
                            else
                            {
                                await ReplyAsync("Sorry, the bot is too poor to reward you if you won :(");
                            }
                        }
                        else
                        {
                            await ReplyAsync("You do not have enough balance to perform this action");
                        }
                    }
                }
            }
            else
            {
                await ReplyAsync($"Please use the <#{Preferences.TipBotChannel}> channel");
            }
        }
Exemplo n.º 4
0
        public async Task Flip(string side, string amount)
        {
            if (CanRunTipCommands)
            {
                if (Enum.TryParse(side.ToLower(), out CoinSide coinSide))
                {
                    if (decimal.TryParse(amount, out var betAmount))
                    {
                        if (QTCommands.CheckBalance(Context.User.Id, betAmount))
                        {
                            if (betAmount < MinBetAmount)
                            {
                                await ReplyAsync($"Minimum bet {MinBetAmount} {Preferences.BaseCurrency}");

                                return;
                            }

                            decimal balance          = 0;
                            var     houseBalanceCall = QTCommands.GetBalance(Context.Client.CurrentUser.Id).Result;
                            decimal.TryParse(houseBalanceCall, out balance);

                            decimal maxBet = balance / 10;

                            if (betAmount > maxBet)
                            {
                                await ReplyAsync($"Maximum bet exceeded. Max: {maxBet} {Preferences.BaseCurrency}");

                                return;
                            }

                            var rewardValue = betAmount * (decimal)BetWin;
                            if (QTCommands.CheckBalance(Context.Client.CurrentUser.Id, rewardValue + FantasyPortfolioModule.PrizePool))
                            {
                                QTCommands.SendTip(Context.User.Id, Context.Client.CurrentUser.Id, betAmount);
                                try {
                                    var coin = (CoinSide)RandomInteger(0, 2);
                                    //var coin = (CoinSide)Generator.Next(0, 2);

                                    var embed = new EmbedBuilder();

                                    string message;

                                    if (coin == coinSide)
                                    {
                                        QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, rewardValue);
                                        embed.AddInlineField("Flipped", FirstCharToUpper(coin.ToString()));
                                        embed.AddInlineField("Prize", $"{rewardValue} {Preferences.BaseCurrency}");
                                        embed.AddInlineField("Profit", $"{(rewardValue - betAmount)} {Preferences.BaseCurrency}");
                                        embed.WithColor(Discord.Color.Green);
                                        message = $"You won! Congratulations {Context.User.Mention}!";
                                    }
                                    else
                                    {
                                        embed.AddInlineField("Flipped", FirstCharToUpper(coin.ToString()));
                                        embed.AddInlineField("Lost", $"{betAmount} {Preferences.BaseCurrency}");
                                        embed.WithColor(Discord.Color.Red);
                                        message = $"Unlucky {Context.User.Mention}, you lost :(";
                                    }
                                    embed.WithFooter(Preferences.FooterText);
                                    await ReplyAsync(message, false, embed);

                                    using (var context = new FantasyPortfolio_DBEntities()) {
                                        var result = new FlipResults();
                                        result.DateTime   = DateTime.Now;
                                        result.UserId     = Context.User.Id.ToString();
                                        result.FlipResult = (byte)coin;
                                        result.UserFlip   = (byte)coinSide;
                                        result.FlipValue  = betAmount;
                                        context.FlipResults.Add(result);
                                        context.SaveChanges();
                                    }

                                    Console.WriteLine($"{Context.User.Id} ({Context.User.Username}) bet on {side} and flipped {coin}");
                                }
                                catch (Exception e) {
                                    Console.WriteLine(e.Message);
                                    QTCommands.SendTip(DiscordClientNew._client.CurrentUser.Id, Context.User.Id, betAmount);
                                    await ReplyAsync("Sorry something went wrong. You have been refunded your bet.");
                                }
                            }
                            else
                            {
                                await ReplyAsync("Sorry, the bot is too poor to reward you if you won :(");
                            }
                        }
                        else
                        {
                            await ReplyAsync("You do not have enough balance to perform this action");
                        }
                    }
                }
            }
            else
            {
                await ReplyAsync($"Please use the <#{Preferences.TipBotChannel}> channel");
            }
        }