protected internal override IEnumerator RespondToCommandInternal(string inputCommand)
    {
        inputCommand = inputCommand.ToLowerInvariant().Trim();
        var buttons = new Dictionary <MonoBehaviour, string>();
        var wireSeq = (WireSequenceComponent)Module.BombComponent;

        if (inputCommand.Equals("cycle", StringComparison.InvariantCultureIgnoreCase))
        {
            yield return(null);

            int page = (int)CurrentPageField.GetValue(Module.BombComponent);
            for (int i = page - 1; i >= 0; i--)
            {
                IEnumerator changePage = wireSeq.ChangePage(i + 1, i);
                while (changePage.MoveNext())
                {
                    yield return(changePage.Current);
                }
            }
            for (int i = 0; i < page; i++)
            {
                yield return(new WaitForSecondsWithCancel(3.0f, false));

                IEnumerator changePage = wireSeq.ChangePage(i, i + 1);
                while (changePage.MoveNext())
                {
                    yield return(changePage.Current);
                }
            }
            yield return("trycancel The cycle command of Wire Sequences was cancelled");

            yield break;
        }

        if (inputCommand.EqualsAny("up", "u"))
        {
            yield return("up");

            yield return(DoInteractionClick(_upButton));
        }
        else if (inputCommand.EqualsAny("down", "d"))
        {
            yield return("down");

            yield return(DoInteractionClick(_downButton, "attempting to move down."));
        }
        else
        {
            if (!inputCommand.StartsWith("cut ", StringComparison.InvariantCultureIgnoreCase) &&
                !inputCommand.StartsWith("c ", StringComparison.InvariantCultureIgnoreCase))
            {
                yield break;
            }
            string[] sequence = inputCommand.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string wireIndexString in sequence.Skip(1))
            {
                if (wireIndexString.EqualsAny("up", "u"))
                {
                    buttons.Add(_upButton, "This will never cause a strike Kappa");
                    break;
                }

                if (wireIndexString.EqualsAny("down", "d"))
                {
                    buttons.Add(_downButton, "attempting to move down.");
                    break;
                }

                if (!int.TryParse(wireIndexString, out int wireIndex))
                {
                    yield break;
                }

                wireIndex--;
                if (!CanInteractWithWire(wireIndex))
                {
                    yield break;
                }

                WireSequenceWire wire = GetWire(wireIndex);
                if (wire == null)
                {
                    yield break;
                }
                if (wire.Snipped || buttons.ContainsKey(wire))
                {
                    continue;
                }
                buttons.Add(wire, $"cutting Wire {wireIndex + 1}.");
            }

            yield return("wire sequence");

            foreach (KeyValuePair <MonoBehaviour, string> button in buttons)
            {
                yield return("trycancel");

                yield return(DoInteractionClick(button.Key, button.Value));
            }
        }
    }
    private bool CanInteractWithWire(int wireIndex)
    {
        int wirePageIndex = wireIndex / 3;

        return(wirePageIndex == (int)CurrentPageField.GetValue(Module.BombComponent));
    }