Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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));
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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));
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
 private void SendEphemeral(object input)
 {
     _slack.SendEphemeralMessage(ParseString(input), you, channel);
 }