StreamingCommunity 2.5.7__py3-none-any.whl → 2.5.8__py3-none-any.whl
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.
Potentially problematic release.
This version of StreamingCommunity might be problematic. Click here for more details.
- StreamingCommunity/Api/Player/ddl.py +2 -3
- StreamingCommunity/Api/Site/1337xx/__init__.py +5 -6
- StreamingCommunity/Api/Site/1337xx/site.py +7 -14
- StreamingCommunity/Api/Site/1337xx/title.py +3 -5
- StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +7 -6
- StreamingCommunity/Api/Site/altadefinizionegratis/film.py +14 -19
- StreamingCommunity/Api/Site/altadefinizionegratis/site.py +6 -14
- StreamingCommunity/Api/Site/animeunity/__init__.py +7 -7
- StreamingCommunity/Api/Site/animeunity/film_serie.py +29 -31
- StreamingCommunity/Api/Site/animeunity/site.py +14 -22
- StreamingCommunity/Api/Site/cb01new/__init__.py +5 -4
- StreamingCommunity/Api/Site/cb01new/film.py +2 -5
- StreamingCommunity/Api/Site/cb01new/site.py +5 -13
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +5 -4
- StreamingCommunity/Api/Site/ddlstreamitaly/series.py +12 -49
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py +6 -16
- StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +2 -3
- StreamingCommunity/Api/Site/guardaserie/__init__.py +5 -4
- StreamingCommunity/Api/Site/guardaserie/series.py +11 -46
- StreamingCommunity/Api/Site/guardaserie/site.py +5 -13
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +10 -14
- StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +5 -4
- StreamingCommunity/Api/Site/ilcorsaronero/site.py +5 -13
- StreamingCommunity/Api/Site/ilcorsaronero/title.py +3 -5
- StreamingCommunity/Api/Site/mostraguarda/__init__.py +2 -2
- StreamingCommunity/Api/Site/mostraguarda/film.py +4 -8
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +8 -7
- StreamingCommunity/Api/Site/streamingcommunity/film.py +14 -18
- StreamingCommunity/Api/Site/streamingcommunity/series.py +25 -76
- StreamingCommunity/Api/Site/streamingcommunity/site.py +11 -23
- StreamingCommunity/Api/Template/Util/__init__.py +8 -1
- StreamingCommunity/Api/Template/Util/manage_ep.py +46 -2
- StreamingCommunity/Api/Template/config_loader.py +71 -0
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +60 -59
- StreamingCommunity/Lib/Downloader/HLS/segments.py +40 -14
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +47 -40
- StreamingCommunity/Lib/FFmpeg/command.py +59 -3
- StreamingCommunity/Lib/M3U8/estimator.py +5 -5
- StreamingCommunity/Lib/M3U8/parser.py +12 -51
- StreamingCommunity/Lib/TMBD/tmdb.py +66 -99
- StreamingCommunity/TelegramHelp/telegram_bot.py +222 -68
- StreamingCommunity/Util/_jsonConfig.py +14 -13
- StreamingCommunity/Util/ffmpeg_installer.py +70 -64
- StreamingCommunity/Util/headers.py +11 -122
- StreamingCommunity/Util/os.py +64 -55
- StreamingCommunity/Util/table.py +62 -108
- StreamingCommunity/run.py +15 -10
- {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/METADATA +56 -22
- StreamingCommunity-2.5.8.dist-info/RECORD +86 -0
- StreamingCommunity/Api/Site/1337xx/costant.py +0 -15
- StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +0 -21
- StreamingCommunity/Api/Site/animeunity/costant.py +0 -21
- StreamingCommunity/Api/Site/cb01new/costant.py +0 -19
- StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +0 -20
- StreamingCommunity/Api/Site/guardaserie/costant.py +0 -19
- StreamingCommunity/Api/Site/ilcorsaronero/costant.py +0 -19
- StreamingCommunity/Api/Site/mostraguarda/costant.py +0 -19
- StreamingCommunity/Api/Site/streamingcommunity/costant.py +0 -21
- StreamingCommunity/TelegramHelp/request_manager.py +0 -82
- StreamingCommunity/TelegramHelp/session.py +0 -56
- StreamingCommunity-2.5.7.dist-info/RECORD +0 -96
- {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/LICENSE +0 -0
- {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/WHEEL +0 -0
- {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/entry_points.txt +0 -0
- {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/top_level.txt +0 -0
StreamingCommunity/Util/table.py
CHANGED
|
@@ -4,6 +4,8 @@ import os
|
|
|
4
4
|
import sys
|
|
5
5
|
import logging
|
|
6
6
|
import importlib
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Dict, List, Any
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
# External library
|
|
@@ -11,7 +13,6 @@ from rich.console import Console
|
|
|
11
13
|
from rich.table import Table
|
|
12
14
|
from rich.prompt import Prompt
|
|
13
15
|
from rich.style import Style
|
|
14
|
-
from typing import Dict, List, Any
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
# Internal utilities
|
|
@@ -24,13 +25,12 @@ from StreamingCommunity.Util._jsonConfig import config_manager
|
|
|
24
25
|
TELEGRAM_BOT = config_manager.get_bool('DEFAULT', 'telegram_bot')
|
|
25
26
|
|
|
26
27
|
|
|
28
|
+
|
|
27
29
|
class TVShowManager:
|
|
28
30
|
def __init__(self):
|
|
29
|
-
"""
|
|
30
|
-
Initialize TVShowManager with provided column information.
|
|
31
|
-
"""
|
|
31
|
+
"""Initialize TVShowManager with default values."""
|
|
32
32
|
self.console = Console()
|
|
33
|
-
self.tv_shows: List[Dict[str, Any]] = []
|
|
33
|
+
self.tv_shows: List[Dict[str, Any]] = []
|
|
34
34
|
self.slice_start: int = 0
|
|
35
35
|
self.slice_end: int = 5
|
|
36
36
|
self.step: int = self.slice_end
|
|
@@ -55,7 +55,7 @@ class TVShowManager:
|
|
|
55
55
|
"""
|
|
56
56
|
self.column_info = column_info
|
|
57
57
|
|
|
58
|
-
def add_tv_show(self, tv_show: Dict[str, Any]):
|
|
58
|
+
def add_tv_show(self, tv_show: Dict[str, Any]) -> None:
|
|
59
59
|
"""
|
|
60
60
|
Add a TV show to the list of TV shows.
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@ class TVShowManager:
|
|
|
64
64
|
"""
|
|
65
65
|
self.tv_shows.append(tv_show)
|
|
66
66
|
|
|
67
|
-
def display_data(self, data_slice: List[Dict[str, Any]]):
|
|
67
|
+
def display_data(self, data_slice: List[Dict[str, Any]]) -> None:
|
|
68
68
|
"""
|
|
69
69
|
Display TV show data in a tabular format.
|
|
70
70
|
|
|
@@ -76,21 +76,17 @@ class TVShowManager:
|
|
|
76
76
|
# Add columns dynamically based on provided column information
|
|
77
77
|
for col_name, col_style in self.column_info.items():
|
|
78
78
|
color = col_style.get("color", None)
|
|
79
|
-
if color
|
|
80
|
-
style = Style(color=color)
|
|
81
|
-
else:
|
|
82
|
-
style = None
|
|
79
|
+
style = Style(color=color) if color else None
|
|
83
80
|
table.add_column(col_name, style=style, justify='center')
|
|
84
81
|
|
|
85
82
|
# Add rows dynamically based on available TV show data
|
|
86
83
|
for entry in data_slice:
|
|
87
|
-
|
|
88
|
-
row_data = [entry.get(col_name, '') for col_name in self.column_info.keys()]
|
|
84
|
+
row_data = [str(entry.get(col_name, '')) for col_name in self.column_info.keys()]
|
|
89
85
|
table.add_row(*row_data)
|
|
90
86
|
|
|
91
87
|
self.console.print(table)
|
|
92
88
|
|
|
93
|
-
def run_back_command(self, research_func: dict):
|
|
89
|
+
def run_back_command(self, research_func: dict) -> None:
|
|
94
90
|
"""
|
|
95
91
|
Executes a back-end search command by dynamically importing a module and invoking its search function.
|
|
96
92
|
|
|
@@ -99,46 +95,33 @@ class TVShowManager:
|
|
|
99
95
|
- 'folder' (str): The absolute path to the directory containing the module to be executed.
|
|
100
96
|
"""
|
|
101
97
|
try:
|
|
102
|
-
|
|
103
98
|
# Get site name from folder
|
|
104
|
-
site_name = (
|
|
99
|
+
site_name = Path(research_func['folder']).name
|
|
105
100
|
|
|
106
101
|
# Find the project root directory
|
|
107
102
|
current_path = research_func['folder']
|
|
108
103
|
while not os.path.exists(os.path.join(current_path, 'StreamingCommunity')):
|
|
109
104
|
current_path = os.path.dirname(current_path)
|
|
110
105
|
|
|
111
|
-
# Add project root to Python path
|
|
112
106
|
project_root = current_path
|
|
113
|
-
#print(f"[DEBUG] Project Root: {project_root}")
|
|
114
|
-
|
|
115
107
|
if project_root not in sys.path:
|
|
116
108
|
sys.path.insert(0, project_root)
|
|
117
109
|
|
|
118
110
|
# Import using full absolute import
|
|
119
111
|
module_path = f'StreamingCommunity.Api.Site.{site_name}'
|
|
120
|
-
#print(f"[DEBUG] Importing module: {module_path}")
|
|
121
|
-
|
|
122
|
-
# Import the module
|
|
123
112
|
module = importlib.import_module(module_path)
|
|
124
113
|
|
|
125
|
-
# Get the search function
|
|
114
|
+
# Get and call the search function
|
|
126
115
|
search_func = getattr(module, 'search')
|
|
127
|
-
|
|
128
|
-
# Call the search function with the search string
|
|
129
116
|
search_func(None)
|
|
130
117
|
|
|
131
118
|
except Exception as e:
|
|
132
119
|
self.console.print(f"[red]Error during search: {e}")
|
|
120
|
+
logging.exception("Error during search execution")
|
|
133
121
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
# Optionally remove the path if you want to clean up
|
|
139
|
-
if project_root in sys.path:
|
|
140
|
-
sys.path.remove(project_root)
|
|
141
|
-
|
|
122
|
+
finally:
|
|
123
|
+
if project_root in sys.path:
|
|
124
|
+
sys.path.remove(project_root)
|
|
142
125
|
|
|
143
126
|
def run(self, force_int_input: bool = False, max_int_input: int = 0) -> str:
|
|
144
127
|
"""
|
|
@@ -152,121 +135,92 @@ class TVShowManager:
|
|
|
152
135
|
str: Last command executed before breaking out of the loop.
|
|
153
136
|
"""
|
|
154
137
|
total_items = len(self.tv_shows)
|
|
155
|
-
last_command = ""
|
|
138
|
+
last_command = ""
|
|
139
|
+
is_telegram = config_manager.get_bool('DEFAULT', 'telegram_bot')
|
|
140
|
+
bot = get_bot_instance() if is_telegram else None
|
|
156
141
|
|
|
157
|
-
if TELEGRAM_BOT:
|
|
158
|
-
bot = get_bot_instance()
|
|
159
|
-
|
|
160
142
|
while True:
|
|
161
143
|
start_message()
|
|
162
|
-
|
|
163
|
-
# Display table
|
|
164
144
|
self.display_data(self.tv_shows[self.slice_start:self.slice_end])
|
|
165
145
|
|
|
166
146
|
# Find research function from call stack
|
|
167
|
-
research_func =
|
|
168
|
-
|
|
169
|
-
if
|
|
170
|
-
|
|
171
|
-
logging.info(f"Found research_func: {research_func}")
|
|
147
|
+
research_func = next((
|
|
148
|
+
f for f in get_call_stack()
|
|
149
|
+
if f['function'] == 'search' and f['script'] == '__init__.py'
|
|
150
|
+
), None)
|
|
172
151
|
|
|
173
|
-
#
|
|
152
|
+
# Handle pagination and user input
|
|
174
153
|
if self.slice_end < total_items:
|
|
175
154
|
self.console.print(f"\n[green]Press [red]Enter [green]for next page, [red]'q' [green]to quit, or [red]'back' [green]to search.")
|
|
176
155
|
|
|
177
156
|
if not force_int_input:
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end")
|
|
181
|
-
key = bot.ask(
|
|
182
|
-
"select_title_episode",
|
|
183
|
-
f"Inserisci l'indice dei media (ad esempio, 1), * per scaricare tutti i media, (ad esempio, 1-2) per un intervallo di media, o (ad esempio, 3-*) per scaricare dal un indice specifico fino alla fine.",
|
|
184
|
-
None
|
|
185
|
-
)
|
|
186
|
-
else:
|
|
187
|
-
key = Prompt.ask(
|
|
188
|
-
"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
189
|
-
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end"
|
|
190
|
-
)
|
|
157
|
+
prompt_msg = ("\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
158
|
+
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end")
|
|
191
159
|
|
|
160
|
+
if is_telegram:
|
|
161
|
+
key = bot.ask("select_title_episode", prompt_msg, None)
|
|
162
|
+
else:
|
|
163
|
+
key = Prompt.ask(prompt_msg)
|
|
192
164
|
else:
|
|
193
|
-
choices = [str(i) for i in range(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
"select_title",
|
|
199
|
-
f"Scegli il contenuto da scaricare:\n📺 Serie TV - 🎞️ Film - 🌀 Anime\noppure `back` per tornare indietro",
|
|
200
|
-
None
|
|
201
|
-
)
|
|
165
|
+
choices = [str(i) for i in range(max_int_input + 1)] + ["q", "quit", "b", "back"]
|
|
166
|
+
prompt_msg = "[cyan]Insert media [red]index"
|
|
167
|
+
telegram_msg = "Scegli il contenuto da scaricare:\n📺 Serie TV - 🎞️ Film - 🌀 Anime\noppure `back` per tornare indietro"
|
|
168
|
+
|
|
169
|
+
if is_telegram:
|
|
170
|
+
key = bot.ask("select_title", telegram_msg, None)
|
|
202
171
|
else:
|
|
203
|
-
|
|
204
|
-
|
|
172
|
+
key = Prompt.ask(prompt_msg, choices=choices, show_choices=False)
|
|
173
|
+
|
|
205
174
|
last_command = key
|
|
206
175
|
|
|
207
|
-
if key.lower()
|
|
176
|
+
if key.lower() in ["q", "quit"]:
|
|
208
177
|
break
|
|
209
|
-
|
|
210
178
|
elif key == "":
|
|
211
179
|
self.slice_start += self.step
|
|
212
180
|
self.slice_end += self.step
|
|
213
181
|
if self.slice_end > total_items:
|
|
214
182
|
self.slice_end = total_items
|
|
215
|
-
|
|
216
|
-
elif (key.lower() == "b" or key.lower() == "back") and research_func:
|
|
183
|
+
elif (key.lower() in ["b", "back"]) and research_func:
|
|
217
184
|
self.run_back_command(research_func)
|
|
218
|
-
|
|
219
185
|
else:
|
|
220
186
|
break
|
|
221
187
|
|
|
222
188
|
else:
|
|
223
|
-
# Last
|
|
224
|
-
self.console.print(f"\n
|
|
189
|
+
# Last page handling
|
|
190
|
+
self.console.print(f"\n[green]You've reached the end. [red]Enter [green]for first page, [red]'q' [green]to quit, or [red]'back' [green]to search.")
|
|
191
|
+
|
|
225
192
|
if not force_int_input:
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
f"Inserisci l'indice dei media (ad esempio, 1), * per scaricare tutti i media, (ad esempio, 1-2) per un intervallo di media, o (ad esempio, 3-*) per scaricare dal un indice specifico fino alla fine.",
|
|
232
|
-
None
|
|
233
|
-
)
|
|
193
|
+
prompt_msg = ("\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
194
|
+
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end")
|
|
195
|
+
|
|
196
|
+
if is_telegram:
|
|
197
|
+
key = bot.ask("select_title_episode", prompt_msg, None)
|
|
234
198
|
else:
|
|
235
|
-
|
|
236
|
-
"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
237
|
-
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end"
|
|
238
|
-
)
|
|
239
|
-
|
|
199
|
+
key = Prompt.ask(prompt_msg)
|
|
240
200
|
else:
|
|
241
|
-
choices = [str(i) for i in range(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
"select_title",
|
|
248
|
-
f"Scegli il contenuto da scaricare:\n📺 Serie TV - 🎞️ Film - 🌀 Anime\n oppure `back` per tornare indietro",
|
|
249
|
-
None
|
|
250
|
-
)
|
|
201
|
+
choices = [str(i) for i in range(max_int_input + 1)] + ["q", "quit", "b", "back"]
|
|
202
|
+
prompt_msg = "[cyan]Insert media [red]index"
|
|
203
|
+
telegram_msg = "Scegli il contenuto da scaricare:\n📺 Serie TV - 🎞️ Film - 🌀 Anime\noppure `back` per tornare indietro"
|
|
204
|
+
|
|
205
|
+
if is_telegram:
|
|
206
|
+
key = bot.ask("select_title", telegram_msg, None)
|
|
251
207
|
else:
|
|
252
|
-
|
|
253
|
-
|
|
208
|
+
key = Prompt.ask(prompt_msg, choices=choices, show_choices=False)
|
|
209
|
+
|
|
254
210
|
last_command = key
|
|
255
211
|
|
|
256
|
-
if key.lower()
|
|
212
|
+
if key.lower() in ["q", "quit"]:
|
|
257
213
|
break
|
|
258
|
-
|
|
259
214
|
elif key == "":
|
|
260
215
|
self.slice_start = 0
|
|
261
216
|
self.slice_end = self.step
|
|
262
|
-
|
|
263
|
-
elif (key.lower() == "b" or key.lower() == "back") and research_func:
|
|
217
|
+
elif (key.lower() in ["b", "back"]) and research_func:
|
|
264
218
|
self.run_back_command(research_func)
|
|
265
|
-
|
|
266
219
|
else:
|
|
267
220
|
break
|
|
268
|
-
|
|
221
|
+
|
|
269
222
|
return last_command
|
|
270
223
|
|
|
271
|
-
def clear(self):
|
|
224
|
+
def clear(self) -> None:
|
|
225
|
+
"""Clear all TV shows data."""
|
|
272
226
|
self.tv_shows = []
|
StreamingCommunity/run.py
CHANGED
|
@@ -16,14 +16,14 @@ from typing import Callable
|
|
|
16
16
|
from StreamingCommunity.Util.message import start_message
|
|
17
17
|
from StreamingCommunity.Util.console import console, msg
|
|
18
18
|
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
19
|
-
from StreamingCommunity.Upload.update import update as git_update
|
|
20
19
|
from StreamingCommunity.Util.os import os_summary
|
|
21
20
|
from StreamingCommunity.Util.logger import Logger
|
|
21
|
+
from StreamingCommunity.Upload.update import update as git_update
|
|
22
|
+
from StreamingCommunity.Lib.TMBD import tmdb
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
# Telegram util
|
|
25
|
-
from StreamingCommunity.TelegramHelp.
|
|
26
|
-
from StreamingCommunity.TelegramHelp.telegram_bot import get_bot_instance
|
|
26
|
+
from StreamingCommunity.TelegramHelp.telegram_bot import get_bot_instance, TelegramSession
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
# Config
|
|
@@ -62,7 +62,7 @@ def load_search_functions():
|
|
|
62
62
|
|
|
63
63
|
api_dir = os.path.join(base_path, 'Api', 'Site')
|
|
64
64
|
init_files = glob.glob(os.path.join(api_dir, '*', '__init__.py'))
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
# Retrieve modules and their indices
|
|
67
67
|
for init_file in init_files:
|
|
68
68
|
|
|
@@ -72,7 +72,7 @@ def load_search_functions():
|
|
|
72
72
|
# Se il modulo è nella lista da escludere, saltalo
|
|
73
73
|
if module_name in excluded_sites:
|
|
74
74
|
continue
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
logging.info(f"Load module name: {module_name}")
|
|
77
77
|
|
|
78
78
|
try:
|
|
@@ -133,13 +133,18 @@ def initialize():
|
|
|
133
133
|
console.log("[red]Install python version > 3.7.16")
|
|
134
134
|
sys.exit(0)
|
|
135
135
|
|
|
136
|
+
# Trending tmbd
|
|
137
|
+
print()
|
|
138
|
+
tmdb.display_trending_films()
|
|
139
|
+
tmdb.display_trending_tv_shows()
|
|
140
|
+
|
|
141
|
+
|
|
136
142
|
# Attempting GitHub update
|
|
137
143
|
try:
|
|
138
144
|
git_update()
|
|
139
145
|
except:
|
|
140
146
|
console.log("[red]Error with loading github.")
|
|
141
147
|
|
|
142
|
-
|
|
143
148
|
def restart_script():
|
|
144
149
|
"""Riavvia lo script con gli stessi argomenti della riga di comando."""
|
|
145
150
|
print("\n🔄 Riavvio dello script...\n")
|
|
@@ -176,7 +181,7 @@ def force_exit():
|
|
|
176
181
|
|
|
177
182
|
print("🚨 Uscita forzata con os._exit(0)")
|
|
178
183
|
os._exit(0)
|
|
179
|
-
|
|
184
|
+
|
|
180
185
|
|
|
181
186
|
def main(script_id = 0):
|
|
182
187
|
|
|
@@ -332,7 +337,7 @@ def main(script_id = 0):
|
|
|
332
337
|
if category in input_to_function:
|
|
333
338
|
run_function(input_to_function[category])
|
|
334
339
|
else:
|
|
335
|
-
|
|
340
|
+
|
|
336
341
|
if TELEGRAM_BOT:
|
|
337
342
|
bot.send_message(f"Categoria non valida", None)
|
|
338
343
|
|
|
@@ -347,6 +352,6 @@ def main(script_id = 0):
|
|
|
347
352
|
bot.send_message(f"Chiusura in corso", None)
|
|
348
353
|
|
|
349
354
|
# Delete script_id
|
|
350
|
-
script_id = get_session()
|
|
355
|
+
script_id = TelegramSession.get_session()
|
|
351
356
|
if script_id != "unknown":
|
|
352
|
-
deleteScriptId(script_id)
|
|
357
|
+
TelegramSession.deleteScriptId(script_id)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: StreamingCommunity
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.8
|
|
4
4
|
Home-page: https://github.com/Lovi-0/StreamingCommunity
|
|
5
5
|
Author: Lovi-0
|
|
6
6
|
Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
|
|
@@ -20,7 +20,7 @@ Requires-Dist: jsbeautifier
|
|
|
20
20
|
Requires-Dist: pathvalidate
|
|
21
21
|
Requires-Dist: pycryptodomex
|
|
22
22
|
Requires-Dist: googlesearch-python
|
|
23
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: ua-generator
|
|
24
24
|
Requires-Dist: qbittorrent-api
|
|
25
25
|
Requires-Dist: python-qbittorrent
|
|
26
26
|
Requires-Dist: Pillow
|
|
@@ -81,16 +81,19 @@ Requires-Dist: pyTelegramBotAPI
|
|
|
81
81
|
- 💬 [Support](#support)
|
|
82
82
|
- 🤝 [Contribute](#contributing)
|
|
83
83
|
- ⚠️ [Disclaimer](#disclaimer)
|
|
84
|
-
- ⚡ [Contributors](#contributors)
|
|
84
|
+
- ⚡ [Contributors](#contributors)
|
|
85
85
|
|
|
86
86
|
# Installation
|
|
87
87
|
|
|
88
88
|
<p align="center">
|
|
89
|
-
<a href="https://github.com/Arrowar/StreamingCommunity/releases/latest/download/
|
|
90
|
-
<img src="https://img.shields.io/badge/-
|
|
89
|
+
<a href="https://github.com/Arrowar/StreamingCommunity/releases/latest/download/StreamingCommunity_win.exe">
|
|
90
|
+
<img src="https://img.shields.io/badge/-Windows-blue.svg?style=for-the-badge&logo=windows" alt="Windows">
|
|
91
91
|
</a>
|
|
92
|
-
<a href="https://github.com/Arrowar/StreamingCommunity/releases/latest/download/
|
|
93
|
-
<img src="https://img.shields.io/badge/-
|
|
92
|
+
<a href="https://github.com/Arrowar/StreamingCommunity/releases/latest/download/StreamingCommunity_mac">
|
|
93
|
+
<img src="https://img.shields.io/badge/-macOS-black.svg?style=for-the-badge&logo=apple" alt="macOS">
|
|
94
|
+
</a>
|
|
95
|
+
<a href="https://github.com/Arrowar/StreamingCommunity/releases/latest/download/StreamingCommunity_linux">
|
|
96
|
+
<img src="https://img.shields.io/badge/-Linux-orange.svg?style=for-the-badge&logo=linux" alt="Linux">
|
|
94
97
|
</a>
|
|
95
98
|
<a href="https://github.com/Arrowar/StreamingCommunity/releases">
|
|
96
99
|
<img src="https://img.shields.io/badge/-All_Versions-lightgrey.svg?style=for-the-badge" alt="All Versions">
|
|
@@ -205,7 +208,7 @@ For detailed Windows PATH instructions, see the [Windows PATH guide](https://www
|
|
|
205
208
|
```bash
|
|
206
209
|
# For bash (edit ~/.bash_profile)
|
|
207
210
|
export PATH="/your/custom/path:$PATH"
|
|
208
|
-
|
|
211
|
+
|
|
209
212
|
# For zsh (edit ~/.zshrc)
|
|
210
213
|
export PATH="/your/custom/path:$PATH"
|
|
211
214
|
```
|
|
@@ -213,7 +216,7 @@ For detailed Windows PATH instructions, see the [Windows PATH guide](https://www
|
|
|
213
216
|
```bash
|
|
214
217
|
# For bash
|
|
215
218
|
source ~/.bash_profile
|
|
216
|
-
|
|
219
|
+
|
|
217
220
|
# For zsh
|
|
218
221
|
source ~/.zshrc
|
|
219
222
|
```
|
|
@@ -224,7 +227,7 @@ For detailed Windows PATH instructions, see the [Windows PATH guide](https://www
|
|
|
224
227
|
```bash
|
|
225
228
|
# For bash (edit ~/.bashrc)
|
|
226
229
|
export PATH="/your/custom/path:$PATH"
|
|
227
|
-
|
|
230
|
+
|
|
228
231
|
# For zsh (edit ~/.zshrc)
|
|
229
232
|
export PATH="/your/custom/path:$PATH"
|
|
230
233
|
```
|
|
@@ -307,7 +310,7 @@ The configuration file is divided into several main sections:
|
|
|
307
310
|
```
|
|
308
311
|
|
|
309
312
|
- `root_path`: Directory where all videos will be saved
|
|
310
|
-
|
|
313
|
+
|
|
311
314
|
### Path examples:
|
|
312
315
|
* Windows: `C:\\MyLibrary\\Folder` or `\\\\MyServer\\MyLibrary` (if you want to use a network folder)
|
|
313
316
|
* Linux/MacOS: `Desktop/MyLibrary/Folder`
|
|
@@ -333,7 +336,7 @@ The configuration file is divided into several main sections:
|
|
|
333
336
|
`<br/><br/>`
|
|
334
337
|
* Can be changed from terminal with `--map_episode_name`
|
|
335
338
|
<br/><br/>
|
|
336
|
-
|
|
339
|
+
|
|
337
340
|
- `add_siteName`: If set to true, appends the site_name to the root path before the movie and serie folders.
|
|
338
341
|
* Can be changed from terminal with `--add_siteName true/false`
|
|
339
342
|
<br/><br/>
|
|
@@ -453,12 +456,25 @@ You can download VLC Media Player from the [official website](https://www.videol
|
|
|
453
456
|
|
|
454
457
|
```json
|
|
455
458
|
{
|
|
456
|
-
"force_resolution":
|
|
459
|
+
"force_resolution": "1080p",
|
|
457
460
|
"get_only_link": false
|
|
458
461
|
}
|
|
459
462
|
```
|
|
460
463
|
|
|
461
|
-
- `force_resolution`:
|
|
464
|
+
- `force_resolution`: Choose the video resolution for downloading:
|
|
465
|
+
* `"Best"`: Highest available resolution
|
|
466
|
+
* `"Worst"`: Lowest available resolution
|
|
467
|
+
* `"720p"`: Force 720p resolution
|
|
468
|
+
* Or specify one of these resolutions:
|
|
469
|
+
- 1080p (1920x1080)
|
|
470
|
+
- 720p (1280x720)
|
|
471
|
+
- 480p (640x480)
|
|
472
|
+
- 360p (640x360)
|
|
473
|
+
- 320p (480x320)
|
|
474
|
+
- 240p (426x240)
|
|
475
|
+
- 240p (320x240)
|
|
476
|
+
- 144p (256x144)
|
|
477
|
+
|
|
462
478
|
- `get_only_link`: Return M3U8 playlist/index URL instead of downloading
|
|
463
479
|
|
|
464
480
|
|
|
@@ -529,15 +545,31 @@ The `run-container` command mounts also the `config.json` file, so any change to
|
|
|
529
545
|
|
|
530
546
|
## Configuration
|
|
531
547
|
|
|
532
|
-
|
|
548
|
+
The bot was created to replace terminal commands and allow interaction via Telegram. Each download runs within a screen session, enabling multiple downloads to run simultaneously.
|
|
549
|
+
|
|
550
|
+
To run the bot in the background, simply start it inside a screen session and then press Ctrl + A, followed by D, to detach from the session without stopping the bot.
|
|
533
551
|
|
|
534
|
-
|
|
552
|
+
Command Functions:
|
|
553
|
+
|
|
554
|
+
🔹 /start – Starts a new search for a download. This command performs the same operations as manually running the script in the terminal with test_run.py.
|
|
555
|
+
|
|
556
|
+
🔹 /list – Displays the status of active downloads, with options to:
|
|
557
|
+
|
|
558
|
+
Stop an incorrect download using /stop <ID>.
|
|
559
|
+
|
|
560
|
+
View the real-time output of a download using /screen <ID>.
|
|
561
|
+
|
|
562
|
+
⚠ Warning: If a download is interrupted, incomplete files may remain in the folder specified in config.json. These files must be deleted manually to avoid storage or management issues.
|
|
563
|
+
|
|
564
|
+
🛠 Configuration: Currently, the bot's settings are stored in the config.json file, which is located in the same directory as the telegram_bot.py script.
|
|
535
565
|
|
|
536
566
|
## .env Example:
|
|
537
567
|
|
|
568
|
+
You need to create an .env file and enter your Telegram token and user ID to authorize only one user to use it
|
|
569
|
+
|
|
538
570
|
```
|
|
539
571
|
TOKEN_TELEGRAM=IlTuo2131TOKEN$12D3Telegram
|
|
540
|
-
AUTHORIZED_USER_ID=12345678
|
|
572
|
+
AUTHORIZED_USER_ID=12345678
|
|
541
573
|
DEBUG=False
|
|
542
574
|
```
|
|
543
575
|
|
|
@@ -549,11 +581,13 @@ pip install -r requirements.txt
|
|
|
549
581
|
|
|
550
582
|
## On Linux/MacOS:
|
|
551
583
|
|
|
584
|
+
Start the bot from the folder /StreamingCommunity/TelegramHelp
|
|
585
|
+
|
|
552
586
|
```bash
|
|
553
587
|
python3 telegram_bot.py
|
|
554
588
|
```
|
|
555
589
|
|
|
556
|
-
# Website Status
|
|
590
|
+
# Website Status
|
|
557
591
|
|
|
558
592
|
| Website | Status | Command |
|
|
559
593
|
|:-------------------|:------:|:--------:|
|
|
@@ -561,21 +595,21 @@ python3 telegram_bot.py
|
|
|
561
595
|
| [AltadefinizioneGratis](https://altadefinizionegratis.pro/) | ✅ | -ALT |
|
|
562
596
|
| [AnimeUnity](https://animeunity.so/) | ✅ | -ANI |
|
|
563
597
|
| [Ilcorsaronero](https://ilcorsaronero.link/) | ✅ | `-ILC` |
|
|
564
|
-
| [CB01New](https://cb01new.
|
|
598
|
+
| [CB01New](https://cb01new.gold/) | ✅ | -CB0 |
|
|
565
599
|
| [DDLStreamItaly](https://ddlstreamitaly.co/) | ✅ | -DDL |
|
|
566
|
-
| [GuardaSerie](https://guardaserie.
|
|
600
|
+
| [GuardaSerie](https://guardaserie.now/) | ✅ | -GUA |
|
|
567
601
|
| [MostraGuarda](https://mostraguarda.stream/) | ✅ | -MOS |
|
|
568
602
|
| [StreamingCommunity](https://streamingcommunity.paris/) | ✅ | -STR |
|
|
569
603
|
|
|
570
604
|
|
|
571
|
-
# Tutorials
|
|
605
|
+
# Tutorials
|
|
572
606
|
|
|
573
607
|
- [Windows Tutorial](https://www.youtube.com/watch?v=mZGqK4wdN-k)
|
|
574
608
|
- [Linux Tutorial](https://www.youtube.com/watch?v=0qUNXPE_mTg)
|
|
575
609
|
- [Pypy Tutorial](https://www.youtube.com/watch?v=C6m9ZKOK0p4)
|
|
576
610
|
- [Compiled .exe Tutorial](https://www.youtube.com/watch?v=pm4lqsxkTVo)
|
|
577
611
|
|
|
578
|
-
# To Do
|
|
612
|
+
# To Do
|
|
579
613
|
|
|
580
614
|
- To Finish [website API](https://github.com/Arrowar/StreamingCommunity/tree/test_gui_1)
|
|
581
615
|
- To finish [website API 2](https://github.com/hydrosh/StreamingCommunity/tree/test_gui_1)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
StreamingCommunity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
StreamingCommunity/run.py,sha256=iEI6TghwB5kJtpYRrnk4y-fVoElIGELnZFxaeqO93L8,12261
|
|
3
|
+
StreamingCommunity/Api/Player/ddl.py,sha256=KNTrM6UzoyapfuLNWJvi16A6MJCa6h29JIs9oYasonc,2258
|
|
4
|
+
StreamingCommunity/Api/Player/maxstream.py,sha256=Q9td9lOxC_-8YwgB3bQ-H2686uMqjd23lptnsdAglYk,5153
|
|
5
|
+
StreamingCommunity/Api/Player/supervideo.py,sha256=udPbBUvlvHVUCZasOJvFmcQfSFmB0KquoSOWOiGur4M,5925
|
|
6
|
+
StreamingCommunity/Api/Player/vixcloud.py,sha256=n9SEx2G6-7OsvTMHcSbpO_XmU2U8IDQAwQ6C-qioBUE,9226
|
|
7
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py,sha256=U-8QlD5kGzIk3-4t4D6QyYmiDe8UBrSuVi1YHRQb7AU,4295
|
|
8
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/util.py,sha256=KqTtHJzfhtKHmMTdA7OWMgdpTHTe6LyXCphBLTMYLYs,4727
|
|
9
|
+
StreamingCommunity/Api/Site/1337xx/__init__.py,sha256=AmvsV_jANao_agPGOrV8WFbGEjNlTCTk86Jec5RdRbs,1314
|
|
10
|
+
StreamingCommunity/Api/Site/1337xx/site.py,sha256=OyS4FQ_IOSfbNcXHs0cJgnuG3407GfsN4v8P7uGZnrw,2639
|
|
11
|
+
StreamingCommunity/Api/Site/1337xx/title.py,sha256=1_a8zMtjKX7E64U4jNq373KnGgKpdC1yNsenlclBJMo,1893
|
|
12
|
+
StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py,sha256=-d6ajulRxJathFxAveXmzpzOFbkbMtoWpViAThR6arM,2201
|
|
13
|
+
StreamingCommunity/Api/Site/altadefinizionegratis/film.py,sha256=IIj7gZ1almed1aLsROd9-jek_q_wikf7CkPXowIEeW8,2274
|
|
14
|
+
StreamingCommunity/Api/Site/altadefinizionegratis/site.py,sha256=Uc9dsamGvzWTTHkEiC8ekPwU3U5u_CK8gmu_M9yCVDc,3498
|
|
15
|
+
StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=2dul294DW-VnYGQeo5-WYlRZj1LjPbpL-bhlyuUl6WI,2219
|
|
16
|
+
StreamingCommunity/Api/Site/animeunity/film_serie.py,sha256=xftUA9RZf8bsyfzoXEmlhGS8ua-XfB3qcLYtPGpSh1I,5704
|
|
17
|
+
StreamingCommunity/Api/Site/animeunity/site.py,sha256=RoKRA28IObeGFgjINeXMziuGmAALv8-zGVb3O4KUwFg,5900
|
|
18
|
+
StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=92PDY4CJSSmeHsVowqBuCzYmLa1pcXR8hCBXcuvlmvk,2886
|
|
19
|
+
StreamingCommunity/Api/Site/cb01new/__init__.py,sha256=-243pVwMjuAAPk7j7BjLL1SXIAK5ZHVHrsZ8hGhDIic,1329
|
|
20
|
+
StreamingCommunity/Api/Site/cb01new/film.py,sha256=KtFPGQSc9hbmasBiz8dDfILC41iu-AlWiYVVHTVqUWg,1615
|
|
21
|
+
StreamingCommunity/Api/Site/cb01new/site.py,sha256=gZeITd30ym_YK1GpTZu8QtpDMhhXvkSv5zonPh_f_4k,2218
|
|
22
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py,sha256=kyYJErCiMmlI549SFkcjjhVXcInwgDAyKxJJsNEI88A,1469
|
|
23
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/series.py,sha256=cLKRb1cq7LHveDFIpdbhgpSIJFeIhgsbvPeerVQh-LM,3335
|
|
24
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/site.py,sha256=QCTouEGUqhhnigDfx66L0Sz4sXOhML4JfAjsN_Bogpw,2853
|
|
25
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py,sha256=akHjQg4mFNdS39DyCyu2eE30ty_471YWJZ1NnTQT104,2549
|
|
26
|
+
StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=xCuKD72yOjazCF3GsIWLSeTzFpwr-8W33AgVKT5PFUU,1321
|
|
27
|
+
StreamingCommunity/Api/Site/guardaserie/series.py,sha256=f5-5Fy-Bh1QF9zA4zr-DJRgoQCO8sQ0Af0v5VEleHFg,5619
|
|
28
|
+
StreamingCommunity/Api/Site/guardaserie/site.py,sha256=HqwMAFDMouA9C0DWqSV1ziKxcNh6Kb8vO_PiowaVWhs,2643
|
|
29
|
+
StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py,sha256=cm1LcEUTIiccCgJpXwbe6EOnKmzsEFXOaEGm2i5P1JA,3263
|
|
30
|
+
StreamingCommunity/Api/Site/ilcorsaronero/__init__.py,sha256=P4raHiMhz-8UtCm4P1S065poMztTKzT9BovsfRXVuUs,1347
|
|
31
|
+
StreamingCommunity/Api/Site/ilcorsaronero/site.py,sha256=B5LwR0vLLDaXMfwFHF3hnTaP1X3Z28t7fV3-le4T3Mg,2022
|
|
32
|
+
StreamingCommunity/Api/Site/ilcorsaronero/title.py,sha256=aVkLZU5NsY40S_yrLYf2eAk3ZyEE_T9FlHZz9ZPCknM,1305
|
|
33
|
+
StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py,sha256=BJgmv2UO3XM0gNkSsAt1REJoIUXjD_1nxT6Tpp5HGQg,5114
|
|
34
|
+
StreamingCommunity/Api/Site/mostraguarda/__init__.py,sha256=Z4SpSr4OpNJYfhqxkNENZehk09jh72_D1cXTuoXNnVI,1184
|
|
35
|
+
StreamingCommunity/Api/Site/mostraguarda/film.py,sha256=VlODqQkwhJsIZBkVXScQbmtmDE-VBxI4J8R4mIa2yu0,2476
|
|
36
|
+
StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=xg6HC1U3bRExbH2Z-eDL5qr80Ol8lfyytiOZV1ygCi4,2453
|
|
37
|
+
StreamingCommunity/Api/Site/streamingcommunity/film.py,sha256=92BjTgSsQPRK_t5gocN9JNs_SviErjYBJq1DJ_hvuV8,2517
|
|
38
|
+
StreamingCommunity/Api/Site/streamingcommunity/series.py,sha256=YoR0X2w6wK3mYSjyS58mOLEmQLjhLbJ61t3EEXOkzeA,7791
|
|
39
|
+
StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=kkf6jnBP3MLtT3OHaEkv6aFJoElonCQUxIErkl_Bb_E,4453
|
|
40
|
+
StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py,sha256=t-Of4McSpJv8uZGP8hqBj1cuh57U8A5hhvMM18rHSaQ,4260
|
|
41
|
+
StreamingCommunity/Api/Template/__init__.py,sha256=oyfd_4_g5p5q6mxb_rKwSsudZnTM3W3kg1tLwxg-v-Q,46
|
|
42
|
+
StreamingCommunity/Api/Template/config_loader.py,sha256=FtVXEt7xqfNpTURZl7a0effYfns7Nb-OomJlfX2u4a0,2034
|
|
43
|
+
StreamingCommunity/Api/Template/site.py,sha256=BNff60a8TWhg8yRnpGQPXtR8UKAVI2Kn3M-Wf1XIeE8,2934
|
|
44
|
+
StreamingCommunity/Api/Template/Class/SearchType.py,sha256=FtO8xDUGEeJgMWsK2Ab7ZzAFsncalTYL2oEYi8uCnuk,2531
|
|
45
|
+
StreamingCommunity/Api/Template/Util/__init__.py,sha256=lIP-Of79FzENknlgllwHloFAnuNbozjKCDIFk5L5KRw,276
|
|
46
|
+
StreamingCommunity/Api/Template/Util/get_domain.py,sha256=OPgjNN3UgrMHPmy457_DbF5xSZ2fhvZCtRJHhqnYshY,7126
|
|
47
|
+
StreamingCommunity/Api/Template/Util/manage_ep.py,sha256=vti7Pj2MEDmOtoi0yYpZXOdyczqcS8AJ2sWlrrn0NaE,7852
|
|
48
|
+
StreamingCommunity/Api/Template/Util/recall_search.py,sha256=QSKDI4fyQfKF8C2eZXW6lBrAp1HTuhWQeA6g8ybDQYQ,1147
|
|
49
|
+
StreamingCommunity/Lib/Downloader/__init__.py,sha256=JhbBh5hOnSM7VmtkxJ7zZ_FtWEC1JdnKThsSBjLV5FY,140
|
|
50
|
+
StreamingCommunity/Lib/Downloader/HLS/downloader.py,sha256=POmu_pSQXuRK5ksYwMHzXG86D81u_q_2CG6dw2ZnDzw,21045
|
|
51
|
+
StreamingCommunity/Lib/Downloader/HLS/proxyes.py,sha256=H92gBhiwsomtURyBx__SQrML0nSx_0rAb2VWFd2rMAk,3275
|
|
52
|
+
StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=qydWmQIfz0d-jIVDRO9I5vcMlqgsOZc6qsIGimQmMIU,18797
|
|
53
|
+
StreamingCommunity/Lib/Downloader/MP4/downloader.py,sha256=5EjInbqDUFxPGBts4ExczD-uNycnLFcxMdxjIYZA1cA,7569
|
|
54
|
+
StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=n8-56EoGpe3-FO72zL66ovLGTAZRJwzmNqeRGe8VSO8,11212
|
|
55
|
+
StreamingCommunity/Lib/FFmpeg/__init__.py,sha256=pFt6A1gD2tZ8REEXa8QgM7_CsenrmBLQXDh_I1bwZvM,131
|
|
56
|
+
StreamingCommunity/Lib/FFmpeg/capture.py,sha256=GjzT2BNtGL75A9scJNX1RqiRn4cy39dFeHnz2b_Ocw8,5431
|
|
57
|
+
StreamingCommunity/Lib/FFmpeg/command.py,sha256=dRAgpn3sLDNfq6FJ5AD9eAmClVJh0eIna0xyJIGcpfI,10663
|
|
58
|
+
StreamingCommunity/Lib/FFmpeg/util.py,sha256=lTWA9KuK8KWYymuNL_-YMW1WB6Y4aLTsItk9ezPD0NU,8093
|
|
59
|
+
StreamingCommunity/Lib/M3U8/__init__.py,sha256=H_KS2eDd3kVXMziFJnD0FCPvPHEizaqfoA36ElTv_r8,170
|
|
60
|
+
StreamingCommunity/Lib/M3U8/decryptor.py,sha256=yD94xUhGHx4-RcrHguarpmfTeSxtpkfsH1id6sUrOw0,6365
|
|
61
|
+
StreamingCommunity/Lib/M3U8/estimator.py,sha256=3JTo9dRzukSgxAyhnBfqdEa5lyL_jqYFurHcmuJ2rNw,6124
|
|
62
|
+
StreamingCommunity/Lib/M3U8/parser.py,sha256=5cwrIdG5xpNh8UKKi3Qmr6r0vALUa9gP-Utz1eZeFHE,21410
|
|
63
|
+
StreamingCommunity/Lib/M3U8/url_fixer.py,sha256=VKc9j6rXHQ9wEdn6IN5Sn_Gi-fGhCZOMv7SGOq-2a3E,1789
|
|
64
|
+
StreamingCommunity/Lib/TMBD/__init__.py,sha256=jSNsLuW4fBf1tGtIdz6fcRv1d5A-NiNnM_O0G6Hj30s,54
|
|
65
|
+
StreamingCommunity/Lib/TMBD/obj_tmbd.py,sha256=SsvxM4z0xU1IsSrB9o2dpRfuRDUYQk3uRs7AseftPPI,1929
|
|
66
|
+
StreamingCommunity/Lib/TMBD/tmdb.py,sha256=Nq06TDLpBgShd1mzOxujGfeiRHldiqtCh70w5poK484,10822
|
|
67
|
+
StreamingCommunity/TelegramHelp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
+
StreamingCommunity/TelegramHelp/telegram_bot.py,sha256=jqyo_1cc8ZPGaurHcTZPvrMDnbCLD7I4WhGPXNCt7Fo,26544
|
|
69
|
+
StreamingCommunity/Upload/update.py,sha256=ayuUzXEQcvc62SBC2NxJwvSvk4aoHZITHpmOuW5fT5w,2541
|
|
70
|
+
StreamingCommunity/Upload/version.py,sha256=lvrpaH0cNQ7HPCueUfroXVcjfZ3DlWUtnFoHkv8IZE8,171
|
|
71
|
+
StreamingCommunity/Util/_jsonConfig.py,sha256=p4VkL5tGXIhrTY-Ay9Iad9lyYyC2grSx4A9jMELv-3g,7574
|
|
72
|
+
StreamingCommunity/Util/call_stack.py,sha256=bVYEjwLJnRNJ1tgfwClpyVcLKCTeTMHM2S6-HM2Ibfo,1375
|
|
73
|
+
StreamingCommunity/Util/color.py,sha256=TWvoellnYd-oCTeU3bnXqkMf864KgF9YXwzjtI6rd4g,459
|
|
74
|
+
StreamingCommunity/Util/console.py,sha256=xdGMbH38By9d4ugYMVJFaUrcMJW2krKZh0zbptA3SVQ,218
|
|
75
|
+
StreamingCommunity/Util/ffmpeg_installer.py,sha256=q5yb_ZXKe9PhcG7JbKLfo1AZa8DNukgHqymPbudDuAY,13585
|
|
76
|
+
StreamingCommunity/Util/headers.py,sha256=RNM583pJIO0ytlf9HKJMQ2PFFwJaQZ1eeyMD5E1Uxew,1205
|
|
77
|
+
StreamingCommunity/Util/logger.py,sha256=ekHO3tryCwo5zqSe2RoI6s3qZsZx9ghinTchipMEovg,2112
|
|
78
|
+
StreamingCommunity/Util/message.py,sha256=F2QKjkcCBl6TjsaM5G6iDck0IhxBnDkKV3itwUebr5c,1403
|
|
79
|
+
StreamingCommunity/Util/os.py,sha256=xF8wfjI8aLfIN6DwKYc0g2CMkj6PNtJUd4LCNJVCZY4,17426
|
|
80
|
+
StreamingCommunity/Util/table.py,sha256=R3UbEJPXT0nIQf3huIYZUWKKwHC8aIAUHHuuS1N0r8E,8937
|
|
81
|
+
StreamingCommunity-2.5.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
82
|
+
StreamingCommunity-2.5.8.dist-info/METADATA,sha256=wwPwa-Hhf_tzNPo_osEzLrxBIykSnf2LSf-asH6zTBc,19650
|
|
83
|
+
StreamingCommunity-2.5.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
84
|
+
StreamingCommunity-2.5.8.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
|
|
85
|
+
StreamingCommunity-2.5.8.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
|
|
86
|
+
StreamingCommunity-2.5.8.dist-info/RECORD,,
|