public async Task Attack(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var monster = _monsterRepository.GetMonster(int.Parse(interaction.Value)); var response = await _combatService.AttackMonster(user, monster, interaction.ChannelId); await _slack.SendEphemeralMessage(response.Message, user.Id, interaction.ChannelId); await _slack.UpdateInteractionMessage(new MonsterMenu(monster).Blocks, interaction.ResponseUrl); }
public async Task Buy(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var shopId = interaction.BlockId.Split(":").First(); var shop = _shopRepository.GetShop(shopId); var response = _shopService.Buy(user, interaction.Value); await _slack.SendEphemeralMessage(response.Message, user.Id, interaction.ChannelId); await _slack.UpdateInteractionMessage(new ShopMenu(shop, user, _itemRepository, _governmentService).Blocks, interaction.ResponseUrl); }
public async Task Use(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var command = new Command { ChannelId = interaction.ChannelId, Text = interaction.Value.Split(":").Last(), UserId = interaction.UserId }; var message = _inventoryCommands.Use(command).Message; await _slack.SendEphemeralMessage(message, interaction.UserId, interaction.ChannelId); await _slack.UpdateInteractionMessage(new InventoryMenu(user.InventoryItems).Blocks, interaction.ResponseUrl); }
public async Task AcceptInvite(Interaction interaction) { var party = _partyRepository.GetParty(int.Parse(interaction.Value)); var user = _userRepository.GetUser(interaction.UserId); var response = _partyService.AcceptInvite(party, user); await _slack.SendEphemeralMessage(string.Format(DougMessages.JoinedYourParty, _userService.Mention(user)), party.UserId, interaction.ChannelId); await _slack.SendEphemeralMessage(response.Message, user.Id, interaction.ChannelId); await _slack.DeleteInteractionMessage(interaction.ResponseUrl); }
private DougResponse SendChallenge(Command command) { var amount = int.Parse(command.GetArgumentAt(1)); var targetId = command.GetTargetUserId(); var caller = _userRepository.GetUser(command.UserId); var target = _userRepository.GetUser(targetId); if (amount <= 0 || command.UserId == targetId) { return(new DougResponse(DougMessages.YouIdiot)); } var challenge = _channelRepository.GetGambleChallenge(targetId); if (challenge != null) { return(new DougResponse(DougMessages.AlreadyChallenged)); } _channelRepository.SendGambleChallenge(new GambleChallenge(command.UserId, targetId, amount)); _backgroundJobClient.Schedule(() => ChallengeTimeout(targetId), TimeSpan.FromMinutes(3)); _slack.BroadcastMessage(string.Format(DougMessages.ChallengeSent, _userService.Mention(caller), _userService.Mention(target), amount), command.ChannelId); _slack.SendEphemeralMessage(DougMessages.GambleChallengeTip, targetId, command.ChannelId); return(NoResponse); }
public async Task Attack(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var monster = _spawnedMonsterRepository.GetMonster(int.Parse(interaction.Value)); if (monster == null) { return; } var response = await _combatService.AttackMonster(user, monster, interaction.ChannelId); await _slack.SendEphemeralMessage(response.Message, user.Id, interaction.ChannelId); await UpdateMonsterAttackBlocks(monster, interaction.ResponseUrl); }
public void Buy(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var item = _itemFactory.CreateItem(interaction.Value); if (!user.HasEnoughCreditsForAmount(item.Price)) { var message = user.NotEnoughCreditsForAmountResponse(item.Price); _slack.SendEphemeralMessage(message, user.Id, interaction.ChannelId); return; } _userRepository.RemoveCredits(user.Id, item.Price); _inventoryRepository.AddItem(user, item.Id); }
public override string OnGettingFlamed(Command command, string slur) { var message = string.Format(DougMessages.UserFlamedYou, Utils.UserMention(command.UserId)); _slack.SendEphemeralMessage(message, command.GetTargetUserId(), command.ChannelId); return(base.OnGettingFlamed(command, slur)); }
private async Task BroadcastExperienceGain(User user, int previousLevel, long experience, string channel) { await _slack.SendEphemeralMessage(string.Format(DougMessages.GainedExp, experience), user.Id, channel); if (previousLevel < user.Level) { await _slack.BroadcastMessage(string.Format(DougMessages.LevelUp, Utils.UserMention(user.Id), user.Level), channel); } }
public async Task AddBulkExperience(List <User> users, long experience, string channel) { var levels = users.ToDictionary(user => user.Id, user => user.Level); var userIds = users.Select(user => user.Id).ToList(); _statsRepository.AddExperienceToUsers(userIds, experience); var expGainMessageTasks = users.Select(user => _slack.SendEphemeralMessage(string.Format(DougMessages.GainedExp, experience), user.Id, channel)); var levelUpUsers = users.Where(user => levels.GetValueOrDefault(user.Id) < user.Level).ToList(); LevelUpUsers(levelUpUsers); var levelUpMessageTasks = levelUpUsers.Select(user => _slack.BroadcastMessage(string.Format(DougMessages.LevelUp, Mention(user), user.Level), channel)); await Task.WhenAll(expGainMessageTasks); await Task.WhenAll(levelUpMessageTasks); }
public override int OnCriticalHit(User attacker, ICombatable target, int damage, string channel) { var min = (int)Math.Floor(damage * 0.01); var max = (int)Math.Ceiling(damage * 0.05); var amount = Math.Max(1, new Random().Next(min, max)); var message = string.Format(DougMessages.GainedCredit, amount); _creditsRepository.AddCredits(attacker.Id, amount); _slack.SendEphemeralMessage(message, attacker.Id, channel); return(base.OnCriticalHit(attacker, target, damage, channel)); }
public async Task Craft(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); var items = user.InventoryItems.Where(item => interaction.Values.Contains(item.InventoryPosition.ToString())).ToList(); var response = _craftingService.Craft(items, user); await _slack.SendEphemeralMessage(response.Message, user.Id, interaction.ChannelId); await _slack.UpdateInteractionMessage(new CraftingMenu(user.InventoryItems).Blocks, interaction.ResponseUrl); }
public async Task AttributeStatPoint(Interaction interaction) { var user = _userRepository.GetUser(interaction.UserId); if (user.FreeStatsPoints <= 0) { await _slack.SendEphemeralMessage(DougMessages.NoMoreStatsPoints, user.Id, interaction.ChannelId); return; } _statsRepository.AttributeStatPoint(user.Id, interaction.Value); await _slack.UpdateInteractionMessage(new StatsMenu(user).Blocks, interaction.ResponseUrl); }
public override string Use(int itemPos, User user, string channel) { base.Use(itemPos, user, channel); var items = new List <Item> { _itemFactory.CreateItem(FarmersArmor.ItemId), _itemFactory.CreateItem(FarmersBoots.ItemId), _itemFactory.CreateItem(FarmersGloves.ItemId), _itemFactory.CreateItem(WoodenShield.ItemId), _itemFactory.CreateItem(ShortSword.ItemId), }; _inventoryRepository.AddItems(user, items); user.LoadItems(_itemFactory); user.InventoryItems.Sort((item1, item2) => item1.InventoryPosition.CompareTo(item2.InventoryPosition)); var itemNames = string.Join(", ", items.Select(item => item.Name)); _slack.SendEphemeralMessage(string.Format(DougMessages.YouObtained, $"*{itemNames}*"), user.Id, channel).Wait(); return(string.Empty); }
private void SendEphemeral(object input) { _slack.SendEphemeralMessage(ParseString(input), you, channel); }