Beispiel #1
0
        public async Task <DougResponse> Clean(Command command)
        {
            if (!await _adminValidator.IsUserSlackAdmin(command.UserId))
            {
                return(new DougResponse(DougMessages.NotAnAdmin));
            }

            var slursToRemove = await FilterSlursToRemove(command.ChannelId);

            if (slursToRemove.Count == 0)
            {
                return(new DougResponse(DougMessages.SlursAreClean));
            }

            var slurs      = slursToRemove.Select(slur => _slurRepository.GetSlur(slur)).ToList();
            var attachment = Attachment.DeletedSlursAttachment(slurs);

            await _slack.SendAttachments(new List <Attachment> {
                attachment
            }, command.ChannelId);

            slursToRemove.ForEach(slur => _slurRepository.RemoveSlur(slur));

            _slurRepository.ClearRecentSlurs();

            slurs.ForEach(slur => _creditsRepository.RemoveCredits(slur.CreatedBy, AddSlurCredit));

            return(NoResponse);
        }
Beispiel #2
0
        public DougResponse Give(Command command)
        {
            var amount = int.Parse(command.GetArgumentAt(1));

            if (amount <= 0)
            {
                return(new DougResponse(DougMessages.InvalidAmount));
            }

            if (!command.IsUserArgument())
            {
                return(new DougResponse(DougMessages.InvalidUserArgument));
            }

            var user   = _userRepository.GetUser(command.UserId);
            var target = _userRepository.GetUser(command.GetTargetUserId());

            if (!user.HasEnoughCreditsForAmount(amount))
            {
                return(new DougResponse(user.NotEnoughCreditsForAmountResponse(amount)));
            }

            _creditsRepository.RemoveCredits(user.Id, amount);
            _creditsRepository.AddCredits(target.Id, amount);

            var message = string.Format(DougMessages.UserGaveCredits, _userService.Mention(user), amount, _userService.Mention(target));

            _slack.BroadcastMessage(message, command.ChannelId);

            return(NoResponse);
        }
Beispiel #3
0
        public DougResponse Gamble(Command command)
        {
            var user   = _userRepository.GetUser(command.UserId);
            var amount = int.Parse(command.GetArgumentAt(0));

            if (amount < 0)
            {
                return(new DougResponse(DougMessages.InvalidAmount));
            }

            if (!user.HasEnoughCreditsForAmount(amount))
            {
                return(new DougResponse(user.NotEnoughCreditsForAmountResponse(amount)));
            }

            var cost   = (int)Math.Ceiling(amount / 10.0);
            var energy = user.Energy - cost;

            if (energy < 0)
            {
                return(new DougResponse(DougMessages.NotEnoughEnergy));
            }

            _statsRepository.UpdateEnergy(command.UserId, energy);

            string baseMessage;

            if (UserCoinFlipWin(user))
            {
                baseMessage = DougMessages.WonGamble;
                _creditsRepository.AddCredits(command.UserId, amount);
            }
            else
            {
                baseMessage = DougMessages.LostGamble;
                _creditsRepository.RemoveCredits(command.UserId, amount);
            }

            var message = string.Format(baseMessage, _userService.Mention(user), amount);

            _slack.BroadcastMessage(message, command.ChannelId);

            return(NoResponse);
        }
Beispiel #4
0
        public DougResponse BuyTicket(Interaction interaction)
        {
            var user = _userRepository.GetUser(interaction.UserId);

            if (!user.HasEnoughCreditsForAmount(TicketPrice))
            {
                return(new DougResponse(user.NotEnoughCreditsForAmountResponse(TicketPrice)));
            }

            _creditsRepository.RemoveCredits(user.Id, TicketPrice);

            _userRepository.AddSingleTicket(user.Id);

            return(new DougResponse());
        }
Beispiel #5
0
        public DougResponse Buy(User user, string itemId)
        {
            var item = _itemRepository.GetItem(itemId);

            var price = _governmentService.GetPriceWithTaxes(item);

            if (!user.HasEnoughCreditsForAmount(price))
            {
                return(new DougResponse(user.NotEnoughCreditsForAmountResponse(price)));
            }

            _creditsRepository.RemoveCredits(user.Id, price);

            _inventoryRepository.AddItem(user, item);

            _governmentService.CollectSalesTaxes(item);

            return(new DougResponse());
        }
Beispiel #6
0
        private async Task <DougResponse> StealFromUser(User user, User target, string channel)
        {
            _statsRepository.SetSkillCooldown(user.Id, TimeSpan.FromSeconds(Cooldown));

            var userChance   = _eventDispatcher.OnStealingChance(user, user.BaseStealSuccessRate());
            var targetChance = _eventDispatcher.OnGettingStolenChance(target, target.BaseOpponentStealSuccessRate());

            var rollSuccessful = _randomService.RollAgainstOpponent(userChance, targetChance);
            var detected       = !_randomService.RollAgainstOpponent(user.BaseDetectionAvoidance(), target.BaseDetectionChance());

            var amount = _eventDispatcher.OnStealingAmount(user, user.BaseStealAmount());

            if (target.Credits - amount < 0)
            {
                amount = target.Credits;
            }

            string       message;
            DougResponse sneakResponse;

            if (rollSuccessful)
            {
                _creditsRepository.RemoveCredits(target.Id, amount);
                _creditsRepository.AddCredits(user.Id, amount);

                message       = string.Format(DougMessages.StealCreditsCaught, _userService.Mention(user), amount, _userService.Mention(target));
                sneakResponse = new DougResponse(string.Format(DougMessages.StealCredits, amount, _userService.Mention(target)));
            }
            else
            {
                message       = string.Format(DougMessages.StealFailCaught, _userService.Mention(user), _userService.Mention(target));
                sneakResponse = new DougResponse(string.Format(DougMessages.StealFail, _userService.Mention(target)));
            }

            if (detected)
            {
                await _slack.BroadcastMessage(message, channel);
            }

            return(sneakResponse);
        }