Exemple #1
0
        public void RemoveItemFromInventory_GivenCarried()
        {
            // Arrange
            var inventory = new Inventory();

            var fakePlayer = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();
            var fakeFood = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeFood.ItemId).Returns(Item.FoodRation);
            A.CallTo(() => fakeFood.Nouns).Returns(new List <string> {
                "food"
            });
            A.CallTo(() => fakeFood.IsPortable).Returns(true);
            A.CallTo(() => fakeFood.IsMatch("food")).Returns(true);
            inventory.AddItem(fakeFood);

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "drop", "food"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Drop(fakeGame, "drop");

            cmd.Invoke(fakePlayer, args);

            // Assert
            Assert.IsFalse(inventory.Has(Item.FoodRation));
        }
Exemple #2
0
        public void HandleCommand(IChatClient chatClient, ChatCommandEventArgs e)
        {
            if (IsNewPlayer(e))
            {
                JoinGame(chatClient, e);
            }
            else
            {
                var player = GetPlayer(e.UserId);

                if (e.ArgsAsList.Count > 0)
                {
                    var checkForEvents = _commandHandler.ExecutePlayerCommand(player, e);

                    if (checkForEvents)
                    {
                        EventManager.CheckForEvents(player);
                    }
                }
                else
                {
                    player.ChatClient.PostDirectMessage((chatClient.UseUsernameForIM) ? player.UserName : player.Id, "What would you like me to do?");
                }
            }
        }
Exemple #3
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var args = e.ArgsAsList;

            if (args.Count == 1)
            {
                player.ChatClient.PostDirectMessage(player, "What would you like to attack?");
                return;
            }
            else
            {
                var victim = args[1].ToLower();

                if (player.Here(victim))
                {
                    var target = player.CurrentLocation.Items.FirstOrDefault(i => i.IsMatch(victim));

                    if (target == null)
                    {
                        var contents = player.CurrentLocation.Items.SelectMany(i => i.Contents);
                        target = contents.FirstOrDefault(i => i.IsMatch(victim));
                    }

                    if (target != null)
                    {
                        target.Attack(player, target);
                    }
                }
            }
        }
Exemple #4
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var canMove = false;

            if (player.CurrentLocation.LocationId.Equals(Location.Building))
            {
                var moveTo = Location.Debris;
                canMove = _game.Dungeon.TryGetLocation(moveTo, out var place);
                player.CurrentLocation = place;
            }
            else if (player.CurrentLocation.LocationId.Equals(Location.Debris))
            {
                var moveTo = Location.Building;
                canMove = _game.Dungeon.TryGetLocation(moveTo, out var place);
                player.CurrentLocation = place;
            }

            if (canMove)
            {
                player.ChatClient.PostDirectMessage(player, "You suddenly feel dizzy and space seems to warp around you!");
                return;
            }

            player.ChatClient.PostDirectMessage(player, "Nothing happens...");
        }
        private bool CanExecuteNow(IChatClient chatClient, ChatCommandEventArgs e, ICommand cmd)
        {
            if (cmd.Cooldown > TimeSpan.FromMinutes(0))
            {
                if (e.Role != UserRole.Streamer && e.Role != UserRole.Moderator)
                {
                    if (_bot.CommandInvocations.ContainsKey(e.Command))
                    {
                        var timeInvoked = _bot.CommandInvocations[e.Command];
                        var elapsedTime = DateTimeOffset.Now - timeInvoked;

                        if (elapsedTime >= cmd.Cooldown)
                        {
                            _bot.CommandInvocations.Remove(e.Command);
                        }
                        else
                        {
                            var remaining = (cmd.Cooldown - elapsedTime).Seconds;
                            chatClient.PostMessage(e.Channel,
                                                   $"The command \"{e.Command}\" is on cooldown, {remaining} seconds remaining.");
                            return(false);
                        }
                    }
                    else
                    {
                        _bot.CommandInvocations.Add(e.Command, DateTimeOffset.Now);
                    }
                }
            }

            return(true);
        }
        public Task Execute(IChatClient chatClient, ChatCommandEventArgs e)
        {
            if (Status == ItemStatus.Active)
            {
                var text      = string.Empty;
                var webClient = new WebClient();

                var cricXML = webClient.DownloadString("http://static.cricinfo.com/rss/livescores.xml");

                System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
                xmlDoc.LoadXml(cricXML);

                var itemsRemaining = 10;

                foreach (System.Xml.XmlNode xmlNode in xmlDoc.SelectNodes("rss/channel/item"))
                {
                    itemsRemaining--;
                    if (itemsRemaining == 0)
                    {
                        break;
                    }
                    text +=
                        xmlNode.SelectSingleNode("title").InnerText + "\r\n\t" +
                        xmlNode.SelectSingleNode("link").InnerText + "\r\n";
                }

                chatClient.PostMessage(e.Channel, text);
            }

            return(null);
        }
Exemple #7
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var moveTo = Location.SecretEastWestCanyon;

            _ = _game.Dungeon.TryGetLocation(moveTo, out var place);

            if (!player.EventRecord.ContainsKey(EventIds.CaveOpen))
            {
                player.EventRecord.Add(EventIds.CaveOpen, 1);
                player.Score += 25;
            }

            if (!player.EventRecord.ContainsKey(EventIds.Dwarves))
            {
                player.EventRecord.Add(EventIds.Dwarves, 1);
                var addItem = new AddToInventory();
                addItem.Do(player, ItemFactory.GetInstance(_game, Item.LittleAxe));

                // Treasures
                addItem.Do(player, ItemFactory.GetInstance(_game, Item.Coins));
                addItem.Do(player, ItemFactory.GetInstance(_game, Item.Diamond));
            }

            player.CurrentLocation = place;
            player.ChatClient.PostDirectMessage(player, "Teleported to *" + player.CurrentLocation.Name + "*");
        }
Exemple #8
0
        public bool ExecutePlayerCommand(AdventurePlayer player, ChatCommandEventArgs e)
        {
            var advCommands = e.ArgsAsList;
            var cmd         = advCommands[0].ToLower();

            var command = _commandRegistry.RegisteredCommands.FirstOrDefault(c => c.IsMatch(cmd)) ??
                          _commandRegistry.RegisteredCommands.FirstOrDefault(c => c.IsMatch("use"));

            if (!command.IsVerbatim)
            {
                var nullWords = new List <string> {
                    "a", "an", "the", "this", "that", "to"
                };
                var argsSent = advCommands.ToArray();

                foreach (var word in argsSent.Where(word => nullWords.Contains(word)).Select(word => word))
                {
                    advCommands.Remove(word);
                }
            }

            command?.Invoke(player, e);

            return(command.CheckEvents);
        }
Exemple #9
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var canMove = false;

            if (player.CurrentLocation.LocationId.Equals(Location.Building))
            {
                var moveTo = Location.Y2;
                canMove = _game.Dungeon.TryGetLocation(moveTo, out var place);
                player.CurrentLocation = place;
            }
            else if (player.CurrentLocation.LocationId.Equals(Location.Y2))
            {
                var moveTo = Location.Building;
                canMove = _game.Dungeon.TryGetLocation(moveTo, out var place);
                player.CurrentLocation = place;
            }

            if (canMove)
            {
                player.ChatClient.PostDirectMessage(player, "From out of thin air, a hollow booming voice says 'Plugh!'");
                return;
            }

            player.ChatClient.PostDirectMessage(player, "Nothing happens...");
        }
Exemple #10
0
        public void NotChangePlayerLocation_GivenInvalidMove()
        {
            // Arrange
            var fakeRoad = A.Fake <IAdventureLocation>();

            A.CallTo(() => fakeRoad.ValidMoves).Returns(new List <IPlayerMove> {
                new PlayerMove("You enter the building.", Location.Building, "east", "e", "enter", "in", "inside", "building"),
            });

            var fakeBuilding = A.Fake <IAdventureLocation>();
            var fakeGame     = A.Fake <IReadonlyAdventureGame>();

            var player = new AdventurePlayer("Player1", "PlayerOne", A.Fake <IChatClient>());

            player.CurrentLocation = fakeRoad;

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "go", "north"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Move(fakeGame, "move", "go");

            cmd.Invoke(player, args);

            // Assert
            Assert.AreSame(fakeRoad, player.CurrentLocation);
        }
Exemple #11
0
        public void IncrementPlayerMoveCount()
        {
            // Arrange
            var fakeRoad = A.Fake <IAdventureLocation>();

            A.CallTo(() => fakeRoad.ValidMoves).Returns(new List <IPlayerMove> {
                new PlayerMove("You enter the building.", Location.Building, "east", "e", "enter", "in", "inside", "building"),
            });

            var fakeBuilding = A.Fake <IAdventureLocation>();

            var fakeGame = A.Fake <IReadonlyAdventureGame>();

            A.CallTo(() => fakeGame.Dungeon.TryGetLocation(A <Location> .Ignored, out fakeBuilding)).Returns(true)
            .AssignsOutAndRefParameters(fakeBuilding);

            var player = new AdventurePlayer("Player1", "PlayerOne", A.Fake <IChatClient>());

            player.CurrentLocation = fakeRoad;

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "go", "east"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Move(fakeGame, "move", "go");

            cmd.Invoke(player, args);

            // Assert
            Assert.AreEqual(1, player.Moves);
        }
Exemple #12
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var canMove = false;

            if (e.ArgsAsList.Count == 2)
            {
                var direction = e.ArgsAsList[1].ToLower();

                if (player.CurrentLocation.IsDark)
                {
                    if (!player.Statuses.Contains(PlayerStatus.HasLight))
                    {
                        player.ChatClient.PostDirectMessage(player, "It is pitch black! If you move around, you'll probably fall into a chasm or something...");
                    }
                }

                if (player.CurrentLocation.ValidMoves.Any(d => d.IsMatch(direction)))
                {
                    var move     = player.CurrentLocation.ValidMoves.First(d => d.IsMatch(direction));
                    var moveTo   = move.Destination;
                    var moveText = move.MoveText;

                    canMove = _game.Dungeon.TryGetLocation(moveTo, out var place);

                    if (canMove)
                    {
                        if (MoveAffectedByEncumberedStatus(player, move))
                        {
                            return;
                        }

                        player.PriorLocation   = player.CurrentLocation;
                        player.CurrentLocation = place;
                        player.Moves++;

                        if (player.Clocks != null && player.Clocks.Count > 0)
                        {
                            foreach (var key in player.Clocks.Keys)
                            {
                                player.Clocks[key]++;
                            }
                        }

                        if (!string.IsNullOrWhiteSpace(moveText))
                        {
                            player.ChatClient.PostDirectMessage(player, moveText);
                        }

                        player.ChatClient.PostDirectMessage(player, "*" + player.CurrentLocation.Name + "*");

                        return;
                    }
                }
            }

            player.ChatClient.PostDirectMessage(player, "You cannot go in that direction! Try *look* so see where you might go.");
            player.ChatClient.PostDirectMessage(player, "*" + player.CurrentLocation.Name + "*");
        }
Exemple #13
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var canSee      = true;
            var description = new StringBuilder("*" + player.CurrentLocation.Name + "*");

            if (player.CurrentLocation.IsDark)
            {
                if (!player.Statuses.Contains(PlayerStatus.HasLight))
                {
                    canSee = false;
                }
            }

            if (canSee)
            {
                description.AppendLine();
                description.AppendLine($"You are {player.CurrentLocation.LongDescription}");

                var otherPlayersHere = _game.Players.Where(p => p.CurrentLocation.Name == player.CurrentLocation.Name &&
                                                           p.Id != player.Id).ToList();

                if (otherPlayersHere.Any())
                {
                    description.AppendLine();
                    foreach (var otherPlayer in otherPlayersHere)
                    {
                        description.AppendLine($"\t{otherPlayer.UserName} is also here.");
                    }
                }

                description.AppendLine();

                foreach (var item in player.CurrentLocation.Items)
                {
                    description.AppendLine(item.IsEndlessSupply
                        ? $"There are several {item.PluralName} here."
                        : $"There is a {item.Name} here.");

                    if (item.Contents.Any() && (item.IsOpen || item.IsTransparent))
                    {
                        description.AppendLine($"The {item.Name} contains:");

                        foreach (var content in item.Contents)
                        {
                            description.AppendLine($"\tA {content.Name}");
                        }
                    }
                }
            }
            else
            {
                description.AppendLine();
                description.AppendLine("It is pitch black, you cannot see a thing!");
            }

            player.ChatClient.PostDirectMessage(player, description.ToString());
        }
Exemple #14
0
        public Task Execute(IChatClient chatClient, ChatCommandEventArgs e)
        {
            if (Status == ItemStatus.Active && _quotes != null)
            {
                chatClient.PostMessage(e.Channel, _quotes[_random.Next(_quotes.Count)]);
            }

            return(null);
        }
Exemple #15
0
        public void ExecutePlayerCommand(AdventurePlayer player, ChatCommandEventArgs e)
        {
            var advCommands = e.ArgsAsList;
            var cmd         = advCommands[0].ToLower();

            var command = _commandRegistry.RegisteredCommands.FirstOrDefault(c => c.IsMatch(cmd)) ??
                          _commandRegistry.RegisteredCommands.FirstOrDefault(c => c.IsMatch("use"));

            command?.Invoke(player, e);
        }
        public void AddItemToInventory_GivenItRequiresContainerThatIsCarried()
        {
            // Arrange
            var inventory = new Inventory();

            var fakeLocation = A.Fake <IAdventureLocation>();
            var fakePlayer   = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);
            A.CallTo(() => fakePlayer.CurrentLocation).Returns(fakeLocation);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();

            var fakeCage = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeCage.ItemId).Returns(Item.Cage);
            A.CallTo(() => fakeCage.Nouns).Returns(new List <string> {
                "cage"
            });
            A.CallTo(() => fakeCage.IsPortable).Returns(true);
            A.CallTo(() => fakeCage.IsMatch("cage")).Returns(true);
            A.CallTo(() => fakeCage.IsContainer).Returns(true);
            A.CallTo(() => fakeCage.Contents).Returns(new List <IAdventureItem>());

            var fakeBird = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeBird.ItemId).Returns(Item.Bird);
            A.CallTo(() => fakeBird.Nouns).Returns(new List <string> {
                "bird"
            });
            A.CallTo(() => fakeBird.IsPortable).Returns(true);
            A.CallTo(() => fakeBird.IsMatch("bird")).Returns(true);
            A.CallTo(() => fakeBird.ContainerRequired()).Returns(true);
            A.CallTo(() => fakeBird.MustBeContainedIn).Returns(Item.Cage);

            A.CallTo(() => fakeLocation.Items).Returns(new List <IAdventureItem> {
                fakeBird
            });
            inventory.AddItem(fakeCage);

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "take", "bird"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Take(fakeGame, "take", "get");

            cmd.Invoke(fakePlayer, args);

            // Assert
            Assert.IsTrue(inventory.HasRequiredContainer(fakeBird));
            Assert.IsTrue(inventory.Has(Item.Cage));
            Assert.IsTrue(inventory.Has(Item.Bird));
            Assert.IsTrue(inventory.GetItems().Single(i => i.IsMatch("cage")).Contents.Contains(fakeBird));
        }
Exemple #17
0
 private async void OnChatCommandReceived(object sender, ChatCommandEventArgs args)
 {
     if (string.Compare(args.CommandName, "pinghost", StringComparison.OrdinalIgnoreCase) == 0)
     {
         await HandlePingHost(args).ConfigureAwait(false);
     }
     else if (string.Compare(args.CommandName, "minecraft", StringComparison.OrdinalIgnoreCase) == 0)
     {
         await HandleMinecraft(args).ConfigureAwait(false);
     }
 }
        public void DoSomething_GivenItemAtLocation()
        {
            // Arrange
            var inventory = new Inventory();

            var fakeLocation = A.Fake <IAdventureLocation>();
            var fakePlayer   = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);
            A.CallTo(() => fakePlayer.CurrentLocation).Returns(fakeLocation);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();
            var fakeLamp = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeLamp.ItemId).Returns(Item.Lamp);
            A.CallTo(() => fakeLamp.Nouns).Returns(new List <string> {
                "lamp"
            });
            A.CallTo(() => fakeLamp.IsEndlessSupply).Returns(false);
            A.CallTo(() => fakeLamp.IsPortable).Returns(true);
            A.CallTo(() => fakeLamp.IsMatch("lamp")).Returns(true);

            var interactions    = new List <IInteraction>();
            var actions         = new List <IAction>();
            var fakeInteraction = A.Fake <IInteraction>();
            var fakeAction      = A.Fake <IAction>();

            A.CallTo(() => fakeAction.Do(A <IAdventurePlayer> .Ignored, fakeLamp)).Returns(true);

            actions.Add(fakeAction);
            interactions.Add(fakeInteraction);

            A.CallTo(() => fakeLamp.Interactions).Returns(interactions);
            A.CallTo(() => fakeInteraction.ShouldExecute()).Returns(true);
            A.CallTo(() => fakeInteraction.RegisteredInteractions).Returns(actions);
            A.CallTo(() => fakeLamp.Interact("light", fakePlayer)).Returns(true);

            A.CallTo(() => fakeLocation.Items).Returns(new List <IAdventureItem> {
                fakeLamp
            });

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "light", "lamp"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Interact(fakeGame, "light");

            cmd.Invoke(fakePlayer, args);

            // Assert
            A.CallTo(() => fakeLamp.Interact("light", fakePlayer)).MustHaveHappenedOnceExactly();
        }
        public void NotTakeItem_GivenItIsPreventedByItemCarried()
        {
            // Example: Cannot take the bord if player is carrying the rod ...

            // Arrange
            var inventory = new Inventory();

            var fakeLocation = A.Fake <IAdventureLocation>();
            var fakePlayer   = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);
            A.CallTo(() => fakePlayer.CurrentLocation).Returns(fakeLocation);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();
            var fakeBird = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeBird.ItemId).Returns(Item.Bird);
            A.CallTo(() => fakeBird.Nouns).Returns(new List <string> {
                "bird"
            });
            A.CallTo(() => fakeBird.IsPortable).Returns(true);
            A.CallTo(() => fakeBird.IsMatch("bird")).Returns(true);
            A.CallTo(() => fakeBird.ContainerRequired()).Returns(true);
            A.CallTo(() => fakeBird.MustBeContainedIn).Returns(Item.Cage);

            A.CallTo(() => fakeLocation.Items).Returns(new List <IAdventureItem> {
                fakeBird
            });

            var fakeRod = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeRod.ItemId).Returns(Item.Rod);
            A.CallTo(() => fakeRod.Nouns).Returns(new List <string> {
                "rod"
            });
            A.CallTo(() => fakeRod.IsPortable).Returns(true);
            A.CallTo(() => fakeRod.IsMatch("rod")).Returns(true);

            inventory.AddItem(fakeRod);

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "take", "bird"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Take(fakeGame, "take", "get");

            cmd.Invoke(fakePlayer, args);

            // Assert
            Assert.IsFalse(inventory.Has(Item.Bird));
        }
Exemple #20
0
        public Task Execute(IChatClient chatClient, ChatCommandEventArgs e)
        {
            if (Status == ItemStatus.Active)
            {
                if (e.ClientType.ToLower().Contains(RestrictToClientType))
                {
                    Sfx.PlaySound(Sfx.HeyEssenbee);
                }

                chatClient.PostMessage(e.Channel, "**Hey, Essenbee!**");
            }

            return(null);
        }
Exemple #21
0
        public void RemoveItemFromInventory_GivenContainedItem()
        {
            // Arrange
            var inventory = new Inventory();

            var fakePlayer = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();
            var fakeCage = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeCage.ItemId).Returns(Item.Cage);
            A.CallTo(() => fakeCage.Nouns).Returns(new List <string> {
                "cage"
            });
            A.CallTo(() => fakeCage.IsPortable).Returns(true);
            A.CallTo(() => fakeCage.IsMatch("cage")).Returns(true);
            A.CallTo(() => fakeCage.IsContainer).Returns(true);
            A.CallTo(() => fakeCage.Contents).Returns(new List <IAdventureItem>());

            var fakeBird = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeBird.ItemId).Returns(Item.Bird);
            A.CallTo(() => fakeBird.Nouns).Returns(new List <string> {
                "bird"
            });
            A.CallTo(() => fakeBird.IsPortable).Returns(true);
            A.CallTo(() => fakeBird.IsMatch("bird")).Returns(true);
            A.CallTo(() => fakeBird.ContainerRequired()).Returns(true);
            A.CallTo(() => fakeBird.MustBeContainedIn).Returns(Item.Cage);

            inventory.AddItem(fakeCage);

            fakeCage.Contents.Add(fakeBird);
            inventory.AddItem(fakeCage);

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "drop", "bird"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Drop(fakeGame, "drop");

            cmd.Invoke(fakePlayer, args);

            // Assert
            Assert.IsFalse(inventory.Has(Item.Bird));
            Assert.IsTrue(inventory.Has(Item.Cage));
        }
Exemple #22
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var helpText = new StringBuilder("I know several commands to aid you in your exploration, including:");

            helpText.AppendLine();
            helpText.AppendLine("\t`!adv look`");
            helpText.AppendLine("\t`!adv go`");
            helpText.AppendLine("\t`!adv take`");
            helpText.AppendLine("\t`!adv use`");
            helpText.AppendLine("\t`!adv inventory`");
            helpText.AppendLine();
            helpText.AppendLine("Some of the places you will visit have items lying around. If such an item is shown in *bold* text, you can take it and carry it with you; it may or may not be of any use.");
            helpText.AppendLine("Note that, if you find several of the same item, you can only carry one of them at a time!");
            player.ChatClient.PostDirectMessage(player, helpText.ToString());
        }
Exemple #23
0
        public async Task Execute(IChatClient chatClient, ChatCommandEventArgs e)
        {
            var projectTextModel = await _bot.BotDataClient.GetProjectText();

            var projectText = projectTextModel.Text;

            if (!string.IsNullOrWhiteSpace(projectText))
            {
                chatClient.PostMessage(e.Channel, projectText);
            }
            else
            {
                chatClient.PostMessage(e.Channel, "Whoops! Looks like essenbee forgot to set the Project text!");
            }
        }
        public void ExecuteCommand(IChatClient chatClient, ChatCommandEventArgs e)
        {
            if (Bot.IsRunning)
            {
                // Check command name against available commands ...
                if (CommandRegistry.TryGetValue(e.Command, out ICommand cmd))
                {
                    if (!CanExecuteNow(chatClient, e, cmd))
                    {
                        return;
                    }

                    cmd.Execute(chatClient, e);
                }
            }
        }
Exemple #25
0
        public Task Execute(IChatClient chatClient, ChatCommandEventArgs e)
        {
            lock (_mutex)
            {
                if (chatClient.GetType().ToString() == e.ClientType)
                {
                    if (_adventureGame is null)
                    {
                        _adventureGame = new AdventureGame();
                    }

                    _adventureGame.HandleCommand(chatClient, e);
                }
            }

            return(null);
        }
        public void AddPlayer_GivenNotAlredayPlayer()
        {
            // Arrange
            var fakeRoad    = A.Fake <IAdventureLocation>();
            var fakeDungeon = A.Fake <IDungeon>();

            A.CallTo(() => fakeDungeon.GetStartingLocation()).Returns(fakeRoad);

            var fakeChatClient = A.Fake <IChatClient>();
            var eventArgs      = new ChatCommandEventArgs("!adv", new List <string>(), string.Empty, "PlayerOne", "Player1", string.Empty);
            var sut            = new AdventureGame(fakeDungeon);

            // Act
            sut.HandleCommand(fakeChatClient, eventArgs);

            // Assert
            Assert.AreEqual(1, sut.Players.Count);
        }
Exemple #27
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var args = e.ArgsAsList;

            if (args.Count == 1)
            {
                player.ChatClient.PostDirectMessage(player, "What would you like to drop? Try using: !adv drop _item_");
                return;
            }

            var itemToDrop = args[1];

            if (!player.Inventory.Has(itemToDrop))
            {
                player.ChatClient.PostDirectMessage(player, $"You don't have a {itemToDrop} to drop!");
            }
            else
            {
                var itemInInventory = player.Inventory.GetItems().FirstOrDefault(i => i.IsMatch(itemToDrop));

                if (itemInInventory != null)
                {
                    player.Inventory.RemoveItem(itemInInventory);
                    player.CurrentLocation.Items.Add(itemInInventory);
                    player.ChatClient.PostDirectMessage(player, $"You dropped a {itemToDrop}");
                    itemInInventory.RemovePlayerStatusCondition(player, itemInInventory.GivesPlayerStatus);
                    return;
                }

                itemInInventory = player.Inventory.GetContainedItem(itemToDrop);

                if (itemInInventory != null)
                {
                    player.Inventory.RemoveItemContainer(itemInInventory);
                    player.CurrentLocation.Items.Add(itemInInventory);
                    player.ChatClient.PostDirectMessage(player, $"You dropped a {itemToDrop}");
                    itemInInventory.RemovePlayerStatusCondition(player, itemInInventory.GivesPlayerStatus);
                    return;
                }

                // Just in case ...
                player.ChatClient.PostDirectMessage(player, $"You don't have a {itemToDrop} to drop!");
            }
        }
Exemple #28
0
        public override void Invoke(IAdventurePlayer player, ChatCommandEventArgs e)
        {
            var args = e.ArgsAsList;

            if (args.Count == 1)
            {
                player.ChatClient.PostDirectMessage(player, Verbs.Contains(args[0])
                        ? $"I don't know how to just `{args[0]}`. Can you be a little more explicit?"
                        : $"Sorry, I don't understand the verb `{args[0]}`.");

                return;
            }

            var itemToInteractWith = args[1];
            var itemInInventory    = player.Inventory.GetItems().FirstOrDefault(i => i.IsMatch(itemToInteractWith));

            if (itemInInventory is null)
            {
                var containedItems = player.Inventory.GetContainedItems();
                itemInInventory = containedItems.FirstOrDefault(i => i.IsMatch(itemToInteractWith));
            }

            var itemAtLocation = player.CurrentLocation.Items.FirstOrDefault(i => i.IsMatch(itemToInteractWith));

            if (itemInInventory is null && itemAtLocation is null)
            {
                player.ChatClient.PostDirectMessage(player, $"Which `{itemToInteractWith}` are you referring to?");
                player.ChatClient.PostDirectMessage(player, "Tip: Don't use words like 'the' or 'at', try just <verb> <noun> instead.");
                return;
            }

            bool actionWasMatched;

            // Interact with inventory items as a preference ...
            actionWasMatched = itemInInventory?.Interact(args[0], player) ?? itemAtLocation.Interact(args[0], player);

            if (!actionWasMatched)
            {
                player.ChatClient.PostDirectMessage(player, $"I don't know how to `{args[0]}` a `{itemToInteractWith}`. " +
                                                    "Can you be clearer?");
            }
        }
Exemple #29
0
        private void JoinGame(IChatClient chatClient, ChatCommandEventArgs e)
        {
            var player = new AdventurePlayer(e.UserId, e.UserName, chatClient)
            {
                CurrentLocation = Dungeon.GetStartingLocation()
            };


            _players.Add(player);
            chatClient.PostMessage(e.Channel, $"{e.UserName} has joined the Adventure!");

            var welcome = new StringBuilder("Welcome to Adventure!");

            welcome.AppendLine("Use `!adv help` to get some help.");
            player.ChatClient.PostDirectMessage(player.Id, welcome.ToString());

            var look = _commandHandler.GetCommand("look");

            look?.Invoke(player, e);
        }
        public void DoesNotDuplicateItem_GivenAlreadyCarried()
        {
            // Arrange
            var inventory = new Inventory();

            var fakeLocation = A.Fake <IAdventureLocation>();
            var fakePlayer   = A.Fake <IAdventurePlayer>();

            A.CallTo(() => fakePlayer.Inventory).Returns(inventory);
            A.CallTo(() => fakePlayer.CurrentLocation).Returns(fakeLocation);

            var fakeGame = A.Fake <IReadonlyAdventureGame>();

            var fakeFood = A.Fake <IAdventureItem>();

            A.CallTo(() => fakeFood.ItemId).Returns(Item.FoodRation);
            A.CallTo(() => fakeFood.Nouns).Returns(new List <string> {
                "food"
            });
            A.CallTo(() => fakeFood.IsPortable).Returns(true);
            A.CallTo(() => fakeFood.IsMatch("food")).Returns(true);
            inventory.AddItem(fakeFood);

            A.CallTo(() => fakeLocation.Items).Returns(new List <IAdventureItem> {
                fakeFood
            });

            var args = new ChatCommandEventArgs("!adv", new List <string> {
                "take", "food"
            }, string.Empty, "Bill", "Player1", string.Empty);

            // Act
            var cmd = new Take(fakeGame, "take", "get");

            cmd.Invoke(fakePlayer, args);

            // Assert
            Assert.IsTrue(inventory.Has(Item.FoodRation));
            Assert.AreEqual(1, inventory.GetItems().Count(i => i.ItemId == Item.FoodRation));
        }