public override async Task PerformAction(SocketReaction option)
        {
            switch (option.Emote.ToString())
            {
            case ReactionHandler.UP_STR:
                await CursorUp();

                break;

            case ReactionHandler.DOWN_STR:
                await CursorDown();

                break;

            case ReactionHandler.SELECT_STR:
                if (Page == HOME_PAGE)
                {
                    Page = CRAFT_PAGE;
                    await UpdateEmbed();
                }
                else
                {
                    // item page
                    if (ItemCount == 0)
                    {
                        ZeroItemCountWarn = true;      // if the number to craft is 0, notify the user that they can only craft one or more of an item.
                        await UpdateEmbed();
                    }
                    else
                    {
                        if (Inventory.CanCraft(GetItemAtCursor().Id, ItemCount) && !ConfirmOut)
                        {
                            // User can craft X items
                            ConfirmOut = true;
                            ConfirmEmbed ce = new ConfirmEmbed(Context, $"Are you sure you want to craft {ItemCount} item{(ItemCount == 1 ? "" : "s")}?", DoCraft);
                            await ce.Display();
                        }
                        else
                        {
                            // user can't craft
                            CantCraftWarn = true;
                            await UpdateEmbed();
                        }
                    }
                }
                break;

            case ReactionHandler.BACK_STR:
                if (Page != HOME_PAGE)
                {
                    Page = HOME_PAGE;
                    await UpdateEmbed();
                }
                break;
            }
        }
        public override async Task PerformAction(SocketReaction option)
        {
            switch (option.Emote.ToString())
            {
            case ReactionHandler.SELECT_STR:
                if (Page == HOME_PAGE)
                {
                    List <uint> Items = Inventory.Items.Keys.ToList();
                    Items.Sort();

                    Page = ITEM_PAGE;

                    SelectedItem = Items[Cursor];
                    await UpdateEmbed();
                }
                else if (Page == ITEM_PAGE)
                {
                    if (ItCursor == 0)
                    {
                        if (GetItemAtCursor() is IUsable)
                        {
                            // if the item can be used, the cursor is on the use option
                            // so use the item
                            ConfirmEmbed ce = new ConfirmEmbed(Context, "Are you sure you want to use the item?", UseItem);
                            await ce.Display();
                        }
                        else
                        {
                            await SwitchToSellPage();
                        }
                    }
                    else
                    {
                        await SwitchToSellPage();
                    }
                }
                else
                {
                    // on sell page, so process sell.
                    if (SellCount <= Inventory.ItemCount(GetItemAtCursor()) && SellCount > 0)
                    {
                        // if the user has enough items to sell
                        ConfirmEmbed ce = new ConfirmEmbed(Context, $"Are you sure you want to sell {SellCount} {GetItemAtCursor().Name}{(SellCount == 1 ? "":"s")} for {SellCount * GetItemAtCursor().GetSellPrice()} Kamtrokens?", SellItem);
                        await ce.Display();
                    }
                    else
                    {
                        // if the user has somehow selected more items than they have, correct the number and do nothing.
                        SellCount        = 0;
                        InvalidSellCount = true;
                        await UpdateEmbed();
                    }
                }
                break;

            case ReactionHandler.BACK_STR:
                if (Page > HOME_PAGE)
                {
                    Page--;
                    ItCursor = 0;

                    if (Cursor >= Inventory.Items.Count)
                    {
                        Cursor = Inventory.Items.Count;
                    }

                    if (Page == -1)
                    {
                        List <uint> Items = Inventory.Items.Keys.ToList();
                        Items.Sort();
                        SelectedItem = Items[Cursor];
                    }

                    await UpdateEmbed();
                }
                else
                {
                    Page = HOME_PAGE;
                    await UpdateEmbed();
                }
                break;

            case ReactionHandler.UP_STR:
                await CursorUp();

                break;

            case ReactionHandler.DOWN_STR:
                await CursorDown();

                break;
            }
        }