Ejemplo n.º 1
0
        public async Task <Message> GetWorkReward(ulong userId)
        {
            var user = await _usersConnector.GetUser(userId);

            var currentJob = Work.GetCurrentJob(user.Level);

            if (user.LastWorkReward.HasValue)
            {
                var timeSpan = DateTime.Now - user.LastWorkReward;
                if (timeSpan >= TimeSpan.FromHours(currentJob.Cooldown))
                {
                    user.Credits       += currentJob.Reward;
                    user.LastWorkReward = DateTime.Now;
                    await _usersConnector.UpdateUser(user);

                    return(_messagesHelper.CreditsGain(currentJob.Reward, "WorkReward"));
                }

                return(_messagesHelper.CommandCalledTooEarly(TimeSpan.FromHours(currentJob.Cooldown) - timeSpan,
                                                             "!work", "WorkReward"));
            }

            user.Credits       += currentJob.Reward;
            user.LastWorkReward = DateTime.Now;
            await _usersConnector.UpdateUser(user);

            return(_messagesHelper.CreditsGain(currentJob.Reward, "WorkReward"));
        }
Ejemplo n.º 2
0
        public async Task <Message> GetHourlyReward(ulong userId)
        {
            var user = await _usersConnector.GetUser(userId);

            if (user.LastHourlyReward.HasValue)
            {
                var timeSpan = DateTime.Now - user.LastHourlyReward.Value;
                if (timeSpan >= TimeSpan.FromDays(1))
                {
                    user.LastHourlyReward = DateTime.Now;
                    user.Credits         += Reward;
                    await _usersConnector.UpdateUser(user);

                    return(_messagesHelper.CreditsGain(Reward, "HourlyReward"));
                }

                return(_messagesHelper.CommandCalledTooEarly(TimeSpan.FromDays(1) - timeSpan, "!hourly",
                                                             "HourlyReward"));
            }

            user.Credits         += Reward;
            user.LastHourlyReward = DateTime.Now;
            await _usersConnector.UpdateUser(user);

            return(_messagesHelper.CreditsGain(Reward, "HourlyReward"));
        }
Ejemplo n.º 3
0
        //TODO Clean it up!!!
        //TODO Test it up!!!
        public async Task <Message> GetCooldowns(ulong userId)
        {
            var user = await _usersConnector.GetUser(userId);

            var curLhr          = user.LastHourlyReward;
            var curLdr          = user.LastDailyReward;
            var curLwr          = user.LastWorkReward;;
            var curLvr          = user.LastVoteReward;;
            var cooldownObjects = new List <CooldownObject>();

            if (curLhr.HasValue)
            {
                var timeSpan = DateTime.Now - curLhr.Value;
                cooldownObjects.Add(timeSpan >= TimeSpan.FromHours(1)
                        ? new CooldownObject("Hourly")
                        : new CooldownObject("Hourly", TimeSpan.FromHours(1) - timeSpan));
            }
            else
            {
                cooldownObjects.Add(new CooldownObject("Hourly"));
            }

            if (curLdr.HasValue)
            {
                var timeSpan = DateTime.Now - curLdr.Value;
                cooldownObjects.Add(timeSpan >= TimeSpan.FromDays(1)
                        ? new CooldownObject("Daily")
                        : new CooldownObject("Daily", TimeSpan.FromDays(1) - timeSpan));
            }
            else
            {
                cooldownObjects.Add(new CooldownObject("Daily"));
            }

            if (curLwr.HasValue)
            {
                var timeSpan = DateTime.Now - curLwr.Value;
                cooldownObjects.Add(timeSpan >= TimeSpan.FromHours(6)
                        ? new CooldownObject("Work")
                        : new CooldownObject("Work", TimeSpan.FromHours(6) - timeSpan));
            }
            else
            {
                cooldownObjects.Add(new CooldownObject("Work"));
            }

            if (curLvr.HasValue)
            {
                var timeSpan = DateTime.Now - curLvr.Value;
                cooldownObjects.Add(timeSpan >= TimeSpan.FromHours(12)
                        ? new CooldownObject("Vote")
                        : new CooldownObject("Vote", TimeSpan.FromHours(12) - timeSpan));
            }
            else
            {
                cooldownObjects.Add(new CooldownObject("Vote"));
            }

            return(_messagesHelper.ListCurrentCooldowns(cooldownObjects, "Cooldowns"));
        }
Ejemplo n.º 4
0
        public async Task <Message> Vote(ulong userId)
        {
            if (_config.BotSettings.TopGgToken == null)
            {
                return(_messagesHelper.Information(
                           "Top GG Token functionality is disabled on this server :disappointed:. Contact bots admin to turn it on :slight_smile:.",
                           "TopGGVote"));
            }

            var user = await _usersConnector.GetUser(userId);

            var httpRequestMessage = new HttpRequestMessage
            {
                Method     = HttpMethod.Get,
                RequestUri = new Uri($"https://top.gg/api/bots/688160933574475800/check?userId={userId}"),
                Headers    =
                {
                    { HttpRequestHeader.Authorization.ToString(), _config.BotSettings.TopGgToken }
                }
            };

            var response = await _client.SendAsync(httpRequestMessage);

            if (!response.IsSuccessStatusCode)
            {
                _logger.LogWarning("Error during http request! Verify the top gg token!!!", response);
                return(_messagesHelper.Error(
                           "Invalid Top GG Token Provided by the bot administrator! Please contact him!"));
            }

            var didUserVote = JsonConvert.DeserializeObject <Vote>(await response.Content.ReadAsStringAsync());

            if (didUserVote.Voted)
            {
                if (user.LastVoteReward.HasValue)
                {
                    var timeSpan = DateTime.Now - user.LastVoteReward.Value;
                    if (timeSpan >= TimeSpan.FromHours(12))
                    {
                        user.Credits       += Reward;
                        user.LastVoteReward = DateTime.Now;
                        await _usersConnector.UpdateUser(user);

                        return(_messagesHelper.CreditsGain(Reward, "TopGGVote"));
                    }

                    return(_messagesHelper.CommandCalledTooEarly(TimeSpan.FromHours(12) - timeSpan, "!vote",
                                                                 "TopGGVote"));
                }

                user.Credits       += Reward;
                user.LastVoteReward = DateTime.Now;
                await _usersConnector.UpdateUser(user);

                return(_messagesHelper.CreditsGain(Reward, "TopGGVote"));
            }

            return(_messagesHelper.NotVotedYet());
        }
Ejemplo n.º 5
0
        public async Task <Message> ShowProfile(ulong userId, string username)
        {
            var user = await _usersConnector.GetUser(userId);

            var currentJob = Work.GetCurrentJob(user.Level);

            return(_messagesHelper.GetProfile(user, currentJob, username));
        }
Ejemplo n.º 6
0
        public async Task <Message> PlayRoulette(ulong userId, string arguments)
        {
            var argument = arguments != null
                ? arguments.ToUpper().TrimStart().Split(' ')
                : new string[0];

            var isNumber = false;
            var nmbBet   = -1;
            var nmbGuess = 0;

            if (argument.Length >= 2)
            {
                isNumber = int.TryParse(argument[0], out nmbGuess);
                if (argument[1].Trim() == "ALL")
                {
                    nmbBet = await _usersConnector.GetCredits(userId);
                }
                else if (argument[1].Trim() == "HALF")
                {
                    nmbBet = await _usersConnector.GetCredits(userId) / 2;
                }
                else
                {
                    nmbBet = _betSizeParser.Parse(argument[1]);
                }
            }

            var selectedOption = argument[0].ToUpper();

            var credWon = 0;

            if (nmbBet != -1)
            {
                var curCred = await _usersConnector.GetCredits(userId);

                if (curCred < nmbBet)
                {
                    return(_messagesHelper.NotEnoughCredits("Roulette"));
                }
                await _usersConnector.TakeCredits(userId, nmbBet);

                var rewardMulti = 0;
                var hasWon      = false;
                var random      = new Random();
                var number      = random.Next(0, 37);
                var exp         = ExpHelpers.CalculateBet((await _usersConnector.GetUser(userId)).Level, nmbBet);
                var expResult   = await _usersConnector.CommandGiveUserExp(userId, exp);

                var result = Roulette.GetResult(number);

                if (isNumber)
                {
                    if (nmbGuess == result.Number)
                    {
                        hasWon      = true;
                        rewardMulti = 36;
                    }
                }
                else
                {
                    switch (selectedOption)
                    {
                    case "RED":
                        if (result.Color.ToUpper() == "RED")
                        {
                            hasWon      = true;
                            rewardMulti = 2;
                        }

                        break;

                    case "BLACK":
                        if (result.Color.ToUpper() == "BLACK")
                        {
                            hasWon      = true;
                            rewardMulti = 2;
                        }

                        break;

                    case "ODD":
                        if (result.OddOrEven.ToUpper() == "ODD")
                        {
                            hasWon      = true;
                            rewardMulti = 2;
                        }

                        break;

                    case "EVEN":
                        if (result.OddOrEven.ToUpper() == "EVEN")
                        {
                            hasWon      = true;
                            rewardMulti = 2;
                        }

                        break;

                    default:
                        return(_messagesHelper.InvalidArguments(new[] { "<Red|Black|Odd|Even|Number> <Bet>" },
                                                                "!roulette", "Roulette"));
                    }
                }

                await _gameHistoryConnector.AddGameHistory(new GameHistory
                {
                    GameName        = "roulette",
                    HasWon          = hasWon,
                    CoinsDifference = credWon,
                    UserId          = userId
                });

                Message responseBuilder;
                if (hasWon)
                {
                    credWon = nmbBet * rewardMulti;
                    await _usersConnector.GiveCredits(userId, credWon);

                    responseBuilder = _messagesHelper.WinInformation(credWon, $"Result: {result.OddOrEven} {result.Color} {result.Number} | Your bet: {selectedOption}", "Roulette");
                }
                else
                {
                    responseBuilder = _messagesHelper.LoseInformation(nmbBet, $"Result: {result.OddOrEven} {result.Color} {result.Number} | Your bet: {selectedOption}", "Roulette");
                }

                return(_messagesHelper.AddCoinsBalanceAndExpInformation(responseBuilder, expResult,
                                                                        await _usersConnector.GetCredits(userId)));
            }

            return(_messagesHelper.InvalidArguments(new[] { "<Red|Black|Odd|Even|Number> <Bet>" }, "!roulette",
                                                    "Roulette"));
        }
Ejemplo n.º 7
0
        public async Task <Message> PlaySlots(ulong userId, string arguments)
        {
            var argument = arguments.ToUpper().TrimStart().Split(' ');

            if (argument.Length == 1)
            {
                var bet = argument[0].Trim() switch
                {
                    "ALL" => await _usersConnector.GetCredits(userId),
                    "HALF" => await _usersConnector.GetCredits(userId) / 2,
                    _ => _betSizeParser.Parse(argument[0])
                };
                if (bet == -1)
                {
                    return(_messagesHelper.InvalidArguments(new[] { "slots <Bet>" }, "!slots", "Slots"));
                }
                if (await _usersConnector.TakeCredits(userId, bet))
                {
                    var hasWon = false;

                    var result = Slots.GetResult();

                    var pointsResult = Slots.GetPointsFromResult(result, bet);

                    var message = "";

                    if (pointsResult > 0)
                    {
                        hasWon = true;
                        if (Slots.IsJackpot(result))
                        {
                            message = "\n" + "JACKPOT!!! You won " + pointsResult + " points!";
                        }
                        else if (Slots.IsDouble(result))
                        {
                            message = "\n" + "DOUBLE! You won " + pointsResult + " points!";
                        }
                        await _usersConnector.GiveCredits(userId, pointsResult + bet);
                    }

                    var exp       = ExpHelpers.CalculateBet((await _usersConnector.GetUser(userId)).Level, bet);
                    var expResult = await _usersConnector.CommandGiveUserExp(userId, exp);

                    await _gameHistoryConnector.AddGameHistory(new GameHistory
                    {
                        GameName        = "slots",
                        HasWon          = hasWon,
                        CoinsDifference = hasWon ? pointsResult : bet * -1,
                        UserId          = userId
                    });

                    return(_messagesHelper.AddCoinsBalanceAndExpInformation(hasWon
                            ? _messagesHelper.Success(
                                                                                "You've won!\nResult: " + result.EmojiOne + " " + result.EmojiTwo + " " +
                                                                                result.EmojiThree
                                                                                + message, "Slots")
                            : _messagesHelper.LoseInformation(bet, "Slots"), expResult,
                                                                            await _usersConnector.GetCredits(userId)));
                }

                return(_messagesHelper.NotEnoughCredits("Slots"));
            }

            return(_messagesHelper.InvalidArguments(new[] { "slots <Bet>" }, "!slots", "Slots"));
        }
    }
Ejemplo n.º 8
0
        public async Task <Message> PlayCoinflip(string argument, ulong userId)
        {
            var arguments = argument.ToUpper().TrimStart().Split(' ');

            if (arguments.Length != 2)
            {
                return(_messagesHelper.InvalidArguments(new[] { "<Head|Tail>", "<Bet>" }, "CoinFlip"));
            }

            var option = arguments[0] == "HEAD" || arguments[0] == "TAIL" ? arguments[0] : "";
            var amount = arguments[1].Trim();

            if (string.IsNullOrWhiteSpace(option) || string.IsNullOrWhiteSpace(amount))
            {
                return(_messagesHelper.InvalidArguments(new[] { "<Head|Tail>", "<Bet>" }, "CoinFlip"));
            }

            var bet = amount switch
            {
                "ALL" => await _usersConnector.GetCredits(userId),
                "HALF" => await _usersConnector.GetCredits(userId) / 2,
                _ => _betSizeParser.Parse(arguments[1])
            };

            if (bet == -1)
            {
                return(_messagesHelper.Error("Check your arguments (whether bet size does not equal 0 for example)!"));
            }

            if (await _usersConnector.TakeCredits(userId, bet))
            {
                var rnd    = new Random();
                var hasWon = (Convert.ToBoolean(rnd.Next(0, 2)) ? "HEAD" : "TAIL") == option;

                var exp       = ExpHelpers.CalculateBet((await _usersConnector.GetUser(userId)).Level, bet);
                var expResult = await _usersConnector.CommandGiveUserExp(userId, exp);

                if (hasWon)
                {
                    await _usersConnector.GiveCredits(userId, bet * 2);
                }

                var embed = hasWon
                    ? _messagesHelper.WinInformation(bet, title: "CoinFlip")
                    : _messagesHelper.LoseInformation(bet, title: "CoinFlip");

                _messagesHelper.AddCoinsBalanceInformation(embed, await _usersConnector.GetCredits(userId));
                if (expResult.DidUserLevelUp)
                {
                    embed = _messagesHelper.AddLevelUpMessage(embed);
                }

                await _gameHistoryConnector.AddGameHistory(new GameHistory
                {
                    GameName        = "coinflip",
                    HasWon          = hasWon,
                    CoinsDifference = hasWon ? bet : bet * -1,
                    UserId          = userId
                });

                return(embed);
            }

            return(_messagesHelper.NotEnoughCredits("CoinFlip"));
        }
    }