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); }
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); }
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); }
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()); }
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()); }
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); }