docs: def main(params=None):
      """
      Main function to launch phonefy.
  
      The function is created in this way so as to let other applications make
      use of the full configuration capabilities of the application. The
      parameters received are used as parsed by this modules `getParser()`.
  
      Args:
      -----
          params: A list with the parameters as grabbed by the terminal. It is
              None when this is called by an entry_point. If it is called by osrf
              the data is already parsed.
  
      Results:
      --------
          list: Returns a list with i3visio entities.
      """
      if params == None:
          parser = getParser()
          args = parser.parse_args(params)
      else:
          args = params
  
      results = []
      if not args.quiet:
          print(general.title(banner.text))
  
      sayingHello = """
      Domainfy | Copyright (C) Yaiza Rubio & Félix Brezo (i3visio) 2014-2018
  
  This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you
  are welcome to redistribute it under certain conditions. For additional info,
  visit <{}>.
  """.format(general.LICENSE_URL)
      print(general.info(sayingHello))
  
      if args.license:
          general.showLicense()
      else:
          # Processing the options returned to remove the "all" option
          tlds = []
          if "all" in args.tlds:
              for typeTld in TLD.keys():
                  for tld in TLD[typeTld]:
                      if tld not in args.exclude:
                          tlds.append({ "tld" : tld, "type" : typeTld })
          elif "none" in args.tlds:
              pass
          else:
              for typeTld in TLD.keys():
                  if typeTld in args.tlds:
                      for tld in TLD[typeTld]:
                          if tld not in args.exclude:
                              tlds.append({ "tld" : tld, "type" : typeTld })
  
          for new in args.user_defined:
              if new not in args.exclude:
                  tlds.append({"tld": new, "type": "user_defined"})
  
          if args.nicks:
              domains = createDomains(tlds, nicks=args.nicks)
          else:
              # nicks_file
              domains = createDomains(tlds, nicksFile=args.nicks_file)
  
          # Showing the execution time...
          if not args.quiet:
              startTime= dt.datetime.now()
              print("{}\tTrying to resolve {} domain(s)…\n".format(str(startTime), general.emphasis(str(len(domains)))))
              if len(domains) > 200:
                  print("""        Note that a full '-t all' search may take around 3.5 mins. If that's too 
          long for you, try narrowing the search using '-t cc' or similar arguments. 
          Otherwise, just wait and keep calm!
                  """)
              print(general.emphasis("\tPress <Ctrl + C> to stop...\n"))
  
          # Perform searches, using different Threads
          results = performSearch(domains, args.threads, args.whois)
  
          # Trying to store the information recovered
          if args.output_folder != None:
              if not os.path.exists(args.output_folder):
                  os.makedirs(args.output_folder)
              # Grabbing the results
              fileHeader = os.path.join(args.output_folder, args.file_header)
              for ext in args.extension:
                  # Generating output files
                  general.exportUsufy(results, ext, fileHeader)
  
          # Showing the information gathered if requested
          if not args.quiet:
              now = dt.datetime.now()
              print("\n{}\tResults obtained:\n".format(str(now)))
              try:
                  print(general.success(general.usufyToTextExport(results)))
              except:
                  print(general.warning("\nSomething happened when exporting the results. The Json will be shown instead:\n"))
                  print(general.warning(json.dumps(results, indent=2)))
  
              now = dt.datetime.now()
              print("\n" + str(now) + "\tYou can find all the information collected in the following files:")
              for ext in args.extension:
                  # Showing the output files
                  print("\t" + general.emphasis(fileHeader + "." + ext))
  
          # Showing the execution time...
          if not args.quiet:
              # Showing the execution time...
              endTime= dt.datetime.now()
              print("\n{}\tFinishing execution...\n".format(endTime))
              print("Total time used:\t" + general.emphasis(str(endTime-startTime)))
              print("Average seconds/query:\t" + general.emphasis(str((endTime-startTime).total_seconds()/len(domains))) +" seconds\n")
  
              # Urging users to place an issue on Github...
              print(banner.footer)
  
      if params:
          return results