Contributing
Server
This section explains how to add the ability to download an episode from another unsupported server.
 | 
Server | 
 | 
| ✔️ AnimeWorld_Server | 
❌ StreamHide | 
❌ Doodstream | 
| ✔️ Streamtape | 
❌ FileMoon | 
❌ StreamSB | 
| ✔️ YouTube | 
❌ Streamtape | 
❌ Streamlare | 
To add a new server, follow these steps:
- 
Create a .py file with the server's name and place it in the servers folder (e.g., NewServer.py).
 
- 
Use this template for the class of the new server:
| NewServer.py | 
|---|
 | from .Server import *
class NewServer(Server):
    def fileLink(self):  # Mandatory
        """
        Retrieves the direct link for downloading the episode file.
        Returns:
          Direct link.
        Example:
          ```py
          return str  # File link
          ```
        """
        pass  # TODO: to be completed
    def fileInfo(self) -> Dict[str, str]:  # Optional
        """
        Retrieves information about the episode file.
        Returns:
          Episode file information.
        Example:
          ```py
          return {
            "content_type": str,  # File type, e.g., video/mp4
            "total_bytes": int,  # Total file bytes
            "last_modified": datetime,  # Date and time of the last update to the episode on the server
            "server_name": str,  # Server name
            "server_id": int,  # Server ID
            "url": str  # Episode URL
          }
          ```
        """
        pass  # TODO: to be completed
    def download(self, title: Optional[str] = None, folder: str = '', *, hook: Callable[[Dict], None] = lambda *args: None, opt: List[str] = []) -> Optional[str]:  # Mandatory
        """
        Downloads the episode.
        Args:
          title: Name to be given to the downloaded file.
          folder: Location where the downloaded file will be moved.
        Other parameters:
          hook: Function called multiple times during the download; the function receives a dictionary with the following keys:\n
            - `total_bytes`: Total bytes to download.
            - `downloaded_bytes`: Currently downloaded bytes.
            - `percentage`: Download progress percentage.
            - `speed`: Download speed (bytes/s).
            - `elapsed`: Time elapsed since the start of the download.
            - `eta`: Estimated remaining time for the download to finish.
            - `status`: 'downloading' | 'finished' | 'aborted'
            - `filename`: Downloaded file name.
          opt: List for additional options.\n
            - `'abort'`: Forcefully stops the download.
        Returns:
          Downloaded file name.
        Raises:
          HardStoppedDownload: The downloading file has been forcibly interrupted.
        Example:
          ```py
          return str  # Downloaded file
          ```
        """
        if title is None:
            title = self._defTitle
        else:
            title = self._sanitize(title)
        pass
        # TODO: to be completed, select one of the 2 methods:
        # #NOTE: to be used if the file can be downloaded simply with httpx:
        # return self._downloadIn(title,folder,hook=hook,opt=opt)
        #
        # #NOTE: to be used if the file must be downloaded using the youtube_dl library
        # return self._dowloadEx(title,folder,hook=hook,opt=opt)
  | 
 
 
- 
Complete the various functions (those marked as Optional can also be left incomplete), also taking inspiration from the various servers loaded in the folder.
 
- 
Add the line from .NewServer import NewServer to the file servers/init.py.
 
- 
Modify the file episodio.py by adding the server's name among the imports (Line 12) and modifying the function __setServer.
 
If everything works correctly, open a pull request.