Generate a license.

        This function is a coroutine.

        Parameters:
            title: str - title of the license
            avatar: str - http/s url pointing to an image, has to have proper headers and be a direct link to an image
            badges: list - list of 1-3 direct image urls. Same requirements as avatar (optional)
            widgets: list - list of 1-3 strings to fill the three boxes with (optional)

        Return Type: image data

async def generate_license(self, title, avatar, badges=None, widgets=None):
        """Generate a license.

        This function is a coroutine.

        Parameters:
            title: str - title of the license
            avatar: str - http/s url pointing to an image, has to have proper headers and be a direct link to an image
            badges: list - list of 1-3 direct image urls. Same requirements as avatar (optional)
            widgets: list - list of 1-3 strings to fill the three boxes with (optional)

        Return Type: image data"""
        if not isinstance(title, str):
            raise TypeError("type of 'title' must be str.")
        if not isinstance(avatar, str):
            raise TypeError("type of 'avatar' must be str.")
        if badges and not isinstance(badges, list):
            raise TypeError("type of 'badges' must be list.")
        if widgets and not isinstance(widgets, list):
            raise TypeError("type of 'widgets' must be list.")
        data = {"title": title, "avatar": avatar}
        if badges and len(badges) <= 3:
            data['badges'] = badges
        if widgets and len(widgets) <= 3:
            data['widgets'] = widgets
        async with aiohttp.ClientSession() as session:
            async with session.post("https://api.weeb.sh/auto-image/license", headers=self.__headers, data=data) as resp:
                if resp.status == 200:
                    return await resp.read()
                else:
                    raise Exception((await resp.json())['message'])