d4rktg 0.3.7__tar.gz → 0.3.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {d4rktg-0.3.7 → d4rktg-0.3.8}/PKG-INFO +1 -1
- d4rktg-0.3.8/VERSION.txt +1 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Handlers/_bot.py +6 -65
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rktg.egg-info/PKG-INFO +1 -1
- d4rktg-0.3.7/VERSION.txt +0 -1
- {d4rktg-0.3.7 → d4rktg-0.3.8}/MANIFEST.in +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/README.rst +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Database/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Database/db.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Handlers/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Handlers/_scheduler.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Logs/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Logs/_logger.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Models/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Models/_commands.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Models/_movie_title.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_decorators.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_delete.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_fonts.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_ip.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_movie_parser.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_ractions.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/Utils/_terminal.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rk/__init__.py +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rktg.egg-info/SOURCES.txt +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rktg.egg-info/dependency_links.txt +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rktg.egg-info/requires.txt +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/d4rktg.egg-info/top_level.txt +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/requirements.txt +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/setup.cfg +0 -0
- {d4rktg-0.3.7 → d4rktg-0.3.8}/setup.py +0 -0
d4rktg-0.3.8/VERSION.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.3.8
|
@@ -21,38 +21,22 @@ class BotManager(Client):
|
|
21
21
|
_is_connected = False
|
22
22
|
_rename = False
|
23
23
|
_flood_data = {}
|
24
|
-
TOKEN_INDEX = 0
|
25
24
|
_loop = None
|
26
25
|
_scheduler_thread = None
|
27
26
|
font = 0
|
28
27
|
sudo_users = []
|
29
28
|
|
30
29
|
|
31
|
-
def create_client(self,
|
30
|
+
def create_client(self,app_name,token):
|
32
31
|
super().__init__(
|
33
|
-
name=
|
32
|
+
name=app_name,
|
34
33
|
api_id=self.api_id,
|
35
34
|
api_hash=self.api_hash,
|
36
|
-
bot_token=
|
35
|
+
bot_token=token,
|
37
36
|
plugins=self.plugins,
|
38
37
|
in_memory=True
|
39
38
|
)
|
40
39
|
|
41
|
-
def load_flood_data(self):
|
42
|
-
if not os.path.exists('flood.txt'):
|
43
|
-
return self._flood_data
|
44
|
-
|
45
|
-
with open('flood.txt', "r") as f:
|
46
|
-
for line in f:
|
47
|
-
if ":" not in line:
|
48
|
-
continue
|
49
|
-
try:
|
50
|
-
token_index, until = map(int, line.strip().split(":"))
|
51
|
-
if token_index not in self._flood_data or until > self._flood_data[token_index]:
|
52
|
-
self._flood_data[token_index] = until
|
53
|
-
except:
|
54
|
-
continue
|
55
|
-
|
56
40
|
async def handle_flood_wait(self, wait_time: int):
|
57
41
|
logger.info(f"FloodWait: Sleeping for {wait_time} seconds.")
|
58
42
|
|
@@ -64,46 +48,7 @@ class BotManager(Client):
|
|
64
48
|
if self._loop:asyncio.run_coroutine_threadsafe(coro_func(), self._loop)
|
65
49
|
else:logger.error("Event loop is not set for _safe_async")
|
66
50
|
|
67
|
-
|
68
|
-
if not os.path.exists("flood.txt"):
|
69
|
-
return random.choice(range(len(self.tokens)))
|
70
|
-
now = int(datetime.now(self.TZ).timestamp())
|
71
|
-
flooded = []
|
72
|
-
non_flooded = []
|
73
|
-
for i in range(len(self.tokens)):
|
74
|
-
until = self._flood_data.get(i, 0)
|
75
|
-
if until <= now:
|
76
|
-
logger.info(f"Token 0{i + 1} is not in flood.")
|
77
|
-
self._flood_data.pop(i, None)
|
78
|
-
self.save_flood_data()
|
79
|
-
non_flooded.append((i))
|
80
|
-
else:
|
81
|
-
flooded.append((i, until))
|
82
|
-
if non_flooded != []:
|
83
|
-
return random.choice(non_flooded)
|
84
|
-
logger.warning("All tokens are in flood. Picking the one with the soonest expiry.")
|
85
|
-
flooded.sort(key=lambda x: x[1])
|
86
|
-
return flooded[0][0]
|
87
|
-
def save_flood_data(self):
|
88
|
-
with open('flood.txt', "w") as f:
|
89
|
-
for token_index, until in self._flood_data.items():
|
90
|
-
f.write(f"{token_index}:{until}\n")
|
91
|
-
|
92
|
-
async def change_token(self, token_index,wait_time):
|
93
|
-
flood_until = datetime.now(self.TZ) + timedelta(seconds=wait_time)
|
94
|
-
self._flood_data[token_index] = int(flood_until.timestamp())
|
95
|
-
self.save_flood_data()
|
96
|
-
try:
|
97
|
-
self.TOKEN_INDEX = token_index + 1
|
98
|
-
self.create_client(self.TOKEN_INDEX)
|
99
|
-
await asyncio.sleep(2)
|
100
|
-
except:
|
101
|
-
self.TOKEN_INDEX = 0
|
102
|
-
self.create_client(self.TOKEN_INDEX)
|
103
|
-
await self.handle_flood_wait(wait_time)
|
104
|
-
|
105
|
-
async def setup_webserver(self):
|
106
|
-
self._web_runner = await self.web_server.setup_web_server(8443)
|
51
|
+
|
107
52
|
|
108
53
|
async def powerup(self):
|
109
54
|
if hasattr(self, "db"):
|
@@ -115,9 +60,7 @@ class BotManager(Client):
|
|
115
60
|
self.db.Settings.set("font", "1")
|
116
61
|
self.font = 1
|
117
62
|
|
118
|
-
self.
|
119
|
-
self.TOKEN_INDEX= self.get_token_index_from_flood_file()
|
120
|
-
self.create_client(self.TOKEN_INDEX)
|
63
|
+
self.create_client(self.token)
|
121
64
|
max_retries = 3
|
122
65
|
for attempt in range(max_retries):
|
123
66
|
try:
|
@@ -141,11 +84,9 @@ class BotManager(Client):
|
|
141
84
|
|
142
85
|
except FloodWait as e:
|
143
86
|
logger.error(f"FloodWait: {e.value} seconds")
|
144
|
-
await self.
|
145
|
-
|
87
|
+
await self.handle_flood_wait(e.value)
|
146
88
|
except AccessTokenExpired:
|
147
89
|
logger.error(f"Access token expired (attempt {attempt + 1})")
|
148
|
-
await self.change_token(self.TOKEN_INDEX, 60)
|
149
90
|
except Exception as e:
|
150
91
|
logger.error(f"Error starting Client (attempt {attempt + 1}): {e}")
|
151
92
|
logger.error(traceback.format_exc())
|
d4rktg-0.3.7/VERSION.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.7
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|