@ext.command(aliases=['rave', '🦀'])
@commands.cooldown(1, CRAB_COMMAND_COOLDOWN, commands.BucketType.guild)
@ext.long_help('A fun command to generate a crab rave gif with specified text overlay')
@ext.short_help('Generates a crab rave gif')
@ext.chainable_input()
@ext.example('crab hello from crab world')
async def crab(self, ctx, is_rave: t.Optional[bool]=True, *, args='Bottom text\n is dead'):
    '\n        Create your own crab rave.\n        Usage: <prefix>crab [is_rave=True] [text=Bottom text\\n is dead]\n        Aliases: rave, 🦀\n        '
    timestamp = datetime.datetime.utcnow().microsecond
    wait_msg = (await ctx.send('Generating your gif'))
    args = args.replace('\\', '')
    lines_in_text = 1
    while (len(args) > (CRAB_LINE_LENGTH * lines_in_text)):
        newline_loc = (CRAB_LINE_LENGTH * lines_in_text)
        while (not args[newline_loc].isspace()):
            newline_loc -= 1
            if (newline_loc == (CRAB_LINE_LENGTH * (lines_in_text - 1))):
                newline_loc = (CRAB_LINE_LENGTH * lines_in_text)
                break
        args = f'''{args[:newline_loc]} 
{args[newline_loc:]}'''
        lines_in_text += 1
    loop = self.bot.loop
    with concurrent.futures.ProcessPoolExecutor() as pool:
        pil_args = (args, is_rave, lines_in_text, timestamp)
        (await loop.run_in_executor(pool, pillow_process, *pil_args))
    attachment = discord.File(filename=f'out_{timestamp}.gif', fp=f'bot/cogs/memes_cog/assets/out_{timestamp}.gif')
    msg = (await ctx.send(file=attachment))
    (await self.bot.messenger.publish(Events.on_set_deletable, msg=msg, author=ctx.author))
    (await wait_msg.delete())
    os.remove(f'bot/cogs/memes_cog/assets/out_{timestamp}.gif')
Create your own crab rave.
Usage: <prefix>crab [is_rave=True] [text=Bottom text\n is dead]
Aliases: rave, 🦀
@ext.command(aliases=['rave', '🦀'])
@commands.cooldown(1, CRAB_COMMAND_COOLDOWN, commands.BucketType.guild)
@ext.long_help('A fun command to generate a crab rave gif with specified text overlay')
@ext.short_help('Generates a crab rave gif')
@ext.chainable_input()
@ext.example('crab hello from crab world')
async def crab(self, ctx, is_rave: t.Optional[bool]=True, *, args='Bottom text\n is dead'):
    '\n        Create your own crab rave.\n        Usage: <prefix>crab [is_rave=True] [text=Bottom text\\n is dead]\n        Aliases: rave, 🦀\n        '
    timestamp = datetime.datetime.utcnow().microsecond
    wait_msg = (await ctx.send('Generating your gif'))
    args = args.replace('\\', )
    lines_in_text = 1
    while (len(args) > (CRAB_LINE_LENGTH * lines_in_text)):
        newline_loc = (CRAB_LINE_LENGTH * lines_in_text)
        while (not args[newline_loc].isspace()):
            newline_loc -= 1
            if (newline_loc == (CRAB_LINE_LENGTH * (lines_in_text - 1))):
                newline_loc = (CRAB_LINE_LENGTH * lines_in_text)
                break
        args = f'{args[:newline_loc]} 
{args[newline_loc:]}'
        lines_in_text += 1
    loop = self.bot.loop
    with concurrent.futures.ProcessPoolExecutor() as pool:
        pil_args = (args, is_rave, lines_in_text, timestamp)
        (await loop.run_in_executor(pool, pillow_process, *pil_args))
    attachment = discord.File(filename=f'out_{timestamp}.gif', fp=f'bot/cogs/memes_cog/assets/out_{timestamp}.gif')
    msg = (await ctx.send(file=attachment))
    (await self.bot.messenger.publish(Events.on_set_deletable, msg=msg, author=ctx.author))
    (await wait_msg.delete())
    os.remove(f'bot/cogs/memes_cog/assets/out_{timestamp}.gif')