Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
anasty17
GitHub Repository: anasty17/mirror-leech-telegram-bot
Path: blob/master/bot/core/jdownloader_booter.py
1640 views
1
from aiofiles.os import path, makedirs, listdir, rename
2
from aioshutil import rmtree
3
from json import dump
4
from random import randint
5
from re import match
6
7
from .. import LOGGER
8
from ..helper.ext_utils.bot_utils import cmd_exec, new_task
9
from .telegram_manager import TgClient
10
from .config_manager import Config
11
from myjd import MyJdApi
12
13
14
class JDownloader(MyJdApi):
15
def __init__(self):
16
super().__init__()
17
self._username = ""
18
self._password = ""
19
self._device_name = ""
20
self.is_connected = False
21
self.error = "JDownloader Credentials not provided!"
22
23
@new_task
24
async def boot(self):
25
await cmd_exec(["pkill", "-9", "-f", "java"])
26
if not Config.JD_EMAIL or not Config.JD_PASS:
27
self.is_connected = False
28
self.error = "JDownloader Credentials not provided!"
29
return
30
self.error = "Connecting... Try again after couple of seconds"
31
self._device_name = f"{randint(0, 1000)}@{TgClient.NAME}"
32
if await path.exists("/JDownloader/logs"):
33
LOGGER.info(
34
"Starting JDownloader... This might take up to 10 sec and might restart once if update available!"
35
)
36
else:
37
LOGGER.info(
38
"Starting JDownloader... This might take up to 8 sec and might restart once after build!"
39
)
40
jdata = {
41
"autoconnectenabledv2": True,
42
"password": Config.JD_PASS,
43
"devicename": f"{self._device_name}",
44
"email": Config.JD_EMAIL,
45
}
46
remote_data = {
47
"localapiserverheaderaccesscontrollalloworigin": "",
48
"deprecatedapiport": 3128,
49
"localapiserverheaderxcontenttypeoptions": "nosniff",
50
"localapiserverheaderxframeoptions": "DENY",
51
"externinterfaceenabled": True,
52
"deprecatedapilocalhostonly": True,
53
"localapiserverheaderreferrerpolicy": "no-referrer",
54
"deprecatedapienabled": True,
55
"localapiserverheadercontentsecuritypolicy": "default-src 'self'",
56
"jdanywhereapienabled": True,
57
"externinterfacelocalhostonly": False,
58
"localapiserverheaderxxssprotection": "1; mode=block",
59
}
60
await makedirs("/JDownloader/cfg", exist_ok=True)
61
with open(
62
"/JDownloader/cfg/org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json",
63
"w",
64
) as sf:
65
sf.truncate(0)
66
dump(jdata, sf)
67
with open(
68
"/JDownloader/cfg/org.jdownloader.api.RemoteAPIConfig.json",
69
"w",
70
) as rf:
71
rf.truncate(0)
72
dump(remote_data, rf)
73
if not await path.exists("/JDownloader/JDownloader.jar"):
74
pattern = r"JDownloader\.jar\.backup.\d$"
75
for filename in await listdir("/JDownloader"):
76
if match(pattern, filename):
77
await rename(
78
f"/JDownloader/{filename}", "/JDownloader/JDownloader.jar"
79
)
80
break
81
await rmtree("/JDownloader/update")
82
await rmtree("/JDownloader/tmp")
83
cmd = "java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -Djava.awt.headless=true -jar /JDownloader/JDownloader.jar"
84
self.is_connected = True
85
_, __, code = await cmd_exec(cmd, shell=True)
86
self.is_connected = False
87
if code != -9:
88
await self.boot()
89
90
91
jdownloader = JDownloader()
92
93