docs: def _generate_index(root, folder, paths,
                      bots_index=False, bots_index_paths=()):
      """Generates the index file for the specified folder"""
      # Determine the namespaces listed here (as sub folders)
      # and the files (.html files) that we should link to
      namespaces = []
      files = []
      INDEX = 'index.html'
      BOT_INDEX = 'botindex.html'
  
      for item in (bots_index_paths or folder.iterdir()):
          if item.is_dir():
              namespaces.append(item)
          elif item.name not in (INDEX, BOT_INDEX):
              files.append(item)
  
      # Now that everything is setup, write the index.html file
      filename = folder / (BOT_INDEX if bots_index else INDEX)
      with DocsWriter(root, filename, _get_path_for_type) as docs:
          # Title should be the current folder name
          docs.write_head(str(folder).replace(os.path.sep, '/').title(),
                          css_path=paths['css'],
                          default_css=paths['default_css'])
  
          docs.set_menu_separator(paths['arrow'])
          _build_menu(docs)
          docs.write_title(str(filename.parent.relative_to(root))
                           .replace(os.path.sep, '/').title())
  
          if bots_index:
              docs.write_text('These are the methods that you may be able to '
                              'use as a bot. Click <a href="{}">here</a> to '
                              'view them all.'.format(INDEX))
          else:
              docs.write_text('Click <a href="{}">here</a> to view the methods '
                              'that you can use as a bot.'.format(BOT_INDEX))
          if namespaces:
              docs.write_title('Namespaces', level=3)
              docs.begin_table(4)
              namespaces.sort()
              for namespace in namespaces:
                  # For every namespace, also write the index of it
                  namespace_paths = []
                  if bots_index:
                      for item in bots_index_paths:
                          if item.parent == namespace:
                              namespace_paths.append(item)
  
                  _generate_index(root, namespace, paths,
                                  bots_index, namespace_paths)
  
                  docs.add_row(
                      namespace.stem.title(),
                      link=namespace / (BOT_INDEX if bots_index else INDEX))
  
              docs.end_table()
  
          docs.write_title('Available items')
          docs.begin_table(2)
  
          files = [(f, _find_title(f)) for f in files]
          files.sort(key=lambda t: t[1])
  
          for file, title in files:
              docs.add_row(title, link=file)
  
          docs.end_table()
          docs.end_body()