async def inv(self, ctx, member: discord.Member = None):
        if member == None:
            member = ctx.author

        tip = tips.get_random_tip(0.5)
        if tip:
            await ctx.send(tip)

        sc = get_data(member.id, "sc", default_val=0)

        inv = get_data(member.id, "inv", default_val={})

        inv_disp = discord.Embed(title="{}'s inventory".format(member.name),
                                 description="Current balance: {}`{}`".format(
                                     SC_EMOJI, sc),
                                 colour=discord.Color.dark_teal())
        inv_desc = ''
        for item, amt in inv.items():
            if amt > 0:
                inv_desc += ('{} **{}** - {}'.format(
                    items.get_by_name(item).emoji, item, amt) + '\n')

        if inv_desc == '':
            inv_desc = "{} doesn't own anything! ".format(member.name)

        inv_disp.add_field(name='Owned Items',
                           value=inv_desc[0:len(inv_desc) - 1],
                           inline=False)
        await ctx.send('', embed=inv_disp)
    def __init__(self, bot):
        self.bot = bot

        self.stock = None
        stock_names = get_data("shop", "items", default_val=None)
        if stock_names:
            self.stock = [items.get_by_name(name) for name in stock_names]
        else:
            self.change_stock()

        bot.loop.create_task(self.updateloop())
    async def buy(self, ctx, *, in_string=None):

        if in_string == None:
            await ctx.send("What do you wanna buy kiddo?")

        name, amt = get_name_and_amount(in_string)

        i = items.get_by_name(name)
        await self.buy_item(ctx, i, amt)
        tip = tips.get_random_tip(0.5)
        if tip:
            await ctx.send(tip)
    async def shop(self, ctx, *args):
        if len(args) == 0:
            pages = []

            # Getting the items that are in the shop
            shop_items = []
            shop_items = self.stock

            shop_items = sorted(shop_items, key=lambda x: x.name)

            # Putting descriptions together
            n = 5
            strings = []
            string = ''
            page_items = []
            current_page_items = []
            for i, item in enumerate(shop_items):
                current_page_items.append(item)
                string = string + item.get_shop_string()
                if i % n == n - 1:
                    strings.append(string)
                    string = ""
                    page_items.append(current_page_items)
                    current_page_items = []

            if string:
                strings.append(string)
                page_items.append(current_page_items)

            for s in strings:
                if pages == []:
                    h, m, _ = get_time_to_shop_refresh()
                    reset_message = f"*The store will change its stock in {h:02}h {m:02}m*"
                    pages.append(
                        discord.Embed(
                            title='Dyson Centre Store',
                            description=
                            "Yo, welcome kiddos! Come spend your {} **Standard Credits**!\n`dad buy <item> <amount>` to buy items.\n`dad shop <item>` for more info on an item.\n\n"
                            .format(SC_EMOJI) + reset_message,
                            colour=discord.Color.gold()))
                else:
                    pages.append(discord.Embed(colour=discord.Color.gold()))
                pages[-1].add_field(name='Items', value=s, inline=False)

            menu = Paginator(self.bot,
                             ctx,
                             pages,
                             page_items,
                             self,
                             timeout=60)
            await menu.run()

        else:
            item = " ".join(args)
            i = items.get_by_name(item)
            if i is not None:
                if i.can_be_in_shop():  # If has shop_item in data
                    desc = '**COST: {} {}**'.format(SC_EMOJI, i.cost)
                    if not i in self.stock:
                        desc = desc + "\n*Currently not in stock*"
                else:
                    desc = "*Can't be bought in the shop*"
                    if i.has_value():  # If has cost in its data
                        desc = "**Value: {} {}**\n*Can't be bought in the shop*".format(
                            SC_EMOJI, i.cost)
                item_disp = discord.Embed(title=i.emoji + " " + i.name,
                                          description=desc,
                                          colour=discord.Colour.gold())
                item_disp.add_field(name='Description',
                                    value=i.description,
                                    inline=False)
                if i.is_booster():
                    text = "_Each gives a_ {:.1f}%  _bonus to_ **{}**_, up to a maximum of_ {}%.".format(
                        i.boost_bonus * 100, i.boost_category.title(),
                        i.boost_max_bonus * 100)
                    item_disp.add_field(name='Booster',
                                        value=text,
                                        inline=False)

                await ctx.send('', embed=item_disp)
            else:
                await ctx.send(
                    "That item doesn't exist... have you been smoking the devil's lettuce again son?!"
                )
    async def give(self,
                   ctx,
                   member: discord.Member = None,
                   *,
                   in_string=None):

        inv = get_data(ctx.author.id, "inv", default_val={})

        if member == None:
            await ctx.send(
                "Kid, it goes like this:\n`dad give <@user> <amount> <item name>`"
            )

        elif member == ctx.author:
            await ctx.send(
                "Lmao when you try to give yourself a present because you have no friends..."
            )

        elif in_string.isdigit():  # Giving sc...
            amt = int(in_string)
            if get_data(ctx.author.id, "sc", default_val=0) < amt:
                await ctx.send(
                    "You don't have enough {} **Standard Credits** to give away!"
                    .format(SC_EMOJI))
            else:
                giver_after = get_data(ctx.author.id, "sc",
                                       default_val=0) - amt
                add_data(ctx.author.id, "sc", giver_after)
                reciever_after = get_data(member.id, "sc", default_val=0) + amt
                add_data(member.id, "sc", reciever_after)

                await ctx.send(
                    "You gave {} {} {}**Standard Credit(s)**, now you have {} and they've got {}."
                    .format(member.display_name, amt, SC_EMOJI, giver_after,
                            reciever_after))

        else:
            name, amt = get_name_and_amount(in_string)

            i = items.get_by_name(name)

            if i is not None:
                giver_before = inv.get(i.name, 0)
                if giver_before > 0:
                    if giver_before >= amt:
                        giver_after = get_data(
                            ctx.author.id, "inv", i.name, default_val=0) - amt
                        add_data(ctx.author.id, "inv", i.name, giver_after)
                        reciever_after = get_data(
                            member.id, "inv", i.name, default_val=0) + amt
                        add_data(member.id, "inv", i.name, reciever_after)
                        await ctx.send(
                            "You gave {} {} {}**{}**(s), now you have {} and they've got {}."
                            .format(member.display_name, amt, i.emoji, i.name,
                                    giver_after, reciever_after))

                    else:
                        await ctx.send(
                            "You don't have enough {}**{}**(s)!".format(
                                i.emoji, i.name))

                else:
                    await ctx.send("Son, you don't own this item!")

            else:
                await ctx.send("The heck... that item doesn't exist!")
 async def use(self, ctx, *, item_name):
     item = items.get_by_name(item_name)
     if item is not None:
         if item.name in self.item_use_func:
             await self.item_use_func[item.name](ctx)