code: async def download_file(self, file_path: base.String,
                              destination: Optional[base.InputFile] = None,
                              timeout: Optional[base.Integer] = sentinel,
                              chunk_size: Optional[base.Integer] = 65536,
                              seek: Optional[base.Boolean] = True) -> Union[io.BytesIO, io.FileIO]:
          
          if destination is None:
              destination = io.BytesIO()
  
          url = api.Methods.file_url(token=self.__token, path=file_path)
  
          dest = destination if isinstance(destination, io.IOBase) else open(destination, 'wb')
          async with self.session.get(url, timeout=timeout, proxy=self.proxy, proxy_auth=self.proxy_auth) as response:
              while True:
                  chunk = await response.content.read(chunk_size)
                  if not chunk:
                      break
                  dest.write(chunk)
                  dest.flush()
          if seek:
              dest.seek(0)
          return dest
docs: Download file by file_path to destination
  
          if You want to automatically create destination (:class:`io.BytesIO`) use default
          value of destination and handle result of this method.
  
          :param file_path: file path on telegram server (You can get it from :obj:`aiogram.types.File`)
          :type file_path: :obj:`str`
          :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO`
          :param timeout: Integer
          :param chunk_size: Integer
          :param seek: Boolean - go to start of file when downloading is finished.
          :return: destination