Path: blob/master/bot/core/jdownloader_booter.py
1640 views
from aiofiles.os import path, makedirs, listdir, rename1from aioshutil import rmtree2from json import dump3from random import randint4from re import match56from .. import LOGGER7from ..helper.ext_utils.bot_utils import cmd_exec, new_task8from .telegram_manager import TgClient9from .config_manager import Config10from myjd import MyJdApi111213class JDownloader(MyJdApi):14def __init__(self):15super().__init__()16self._username = ""17self._password = ""18self._device_name = ""19self.is_connected = False20self.error = "JDownloader Credentials not provided!"2122@new_task23async def boot(self):24await cmd_exec(["pkill", "-9", "-f", "java"])25if not Config.JD_EMAIL or not Config.JD_PASS:26self.is_connected = False27self.error = "JDownloader Credentials not provided!"28return29self.error = "Connecting... Try again after couple of seconds"30self._device_name = f"{randint(0, 1000)}@{TgClient.NAME}"31if await path.exists("/JDownloader/logs"):32LOGGER.info(33"Starting JDownloader... This might take up to 10 sec and might restart once if update available!"34)35else:36LOGGER.info(37"Starting JDownloader... This might take up to 8 sec and might restart once after build!"38)39jdata = {40"autoconnectenabledv2": True,41"password": Config.JD_PASS,42"devicename": f"{self._device_name}",43"email": Config.JD_EMAIL,44}45remote_data = {46"localapiserverheaderaccesscontrollalloworigin": "",47"deprecatedapiport": 3128,48"localapiserverheaderxcontenttypeoptions": "nosniff",49"localapiserverheaderxframeoptions": "DENY",50"externinterfaceenabled": True,51"deprecatedapilocalhostonly": True,52"localapiserverheaderreferrerpolicy": "no-referrer",53"deprecatedapienabled": True,54"localapiserverheadercontentsecuritypolicy": "default-src 'self'",55"jdanywhereapienabled": True,56"externinterfacelocalhostonly": False,57"localapiserverheaderxxssprotection": "1; mode=block",58}59await makedirs("/JDownloader/cfg", exist_ok=True)60with open(61"/JDownloader/cfg/org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json",62"w",63) as sf:64sf.truncate(0)65dump(jdata, sf)66with open(67"/JDownloader/cfg/org.jdownloader.api.RemoteAPIConfig.json",68"w",69) as rf:70rf.truncate(0)71dump(remote_data, rf)72if not await path.exists("/JDownloader/JDownloader.jar"):73pattern = r"JDownloader\.jar\.backup.\d$"74for filename in await listdir("/JDownloader"):75if match(pattern, filename):76await rename(77f"/JDownloader/{filename}", "/JDownloader/JDownloader.jar"78)79break80await rmtree("/JDownloader/update")81await rmtree("/JDownloader/tmp")82cmd = "java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -Djava.awt.headless=true -jar /JDownloader/JDownloader.jar"83self.is_connected = True84_, __, code = await cmd_exec(cmd, shell=True)85self.is_connected = False86if code != -9:87await self.boot()888990jdownloader = JDownloader()919293