docs: 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'])