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.

Files changed (65) hide show
  1. StreamingCommunity/Api/Player/ddl.py +2 -3
  2. StreamingCommunity/Api/Site/1337xx/__init__.py +5 -6
  3. StreamingCommunity/Api/Site/1337xx/site.py +7 -14
  4. StreamingCommunity/Api/Site/1337xx/title.py +3 -5
  5. StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +7 -6
  6. StreamingCommunity/Api/Site/altadefinizionegratis/film.py +14 -19
  7. StreamingCommunity/Api/Site/altadefinizionegratis/site.py +6 -14
  8. StreamingCommunity/Api/Site/animeunity/__init__.py +7 -7
  9. StreamingCommunity/Api/Site/animeunity/film_serie.py +29 -31
  10. StreamingCommunity/Api/Site/animeunity/site.py +14 -22
  11. StreamingCommunity/Api/Site/cb01new/__init__.py +5 -4
  12. StreamingCommunity/Api/Site/cb01new/film.py +2 -5
  13. StreamingCommunity/Api/Site/cb01new/site.py +5 -13
  14. StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +5 -4
  15. StreamingCommunity/Api/Site/ddlstreamitaly/series.py +12 -49
  16. StreamingCommunity/Api/Site/ddlstreamitaly/site.py +6 -16
  17. StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +2 -3
  18. StreamingCommunity/Api/Site/guardaserie/__init__.py +5 -4
  19. StreamingCommunity/Api/Site/guardaserie/series.py +11 -46
  20. StreamingCommunity/Api/Site/guardaserie/site.py +5 -13
  21. StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +10 -14
  22. StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +5 -4
  23. StreamingCommunity/Api/Site/ilcorsaronero/site.py +5 -13
  24. StreamingCommunity/Api/Site/ilcorsaronero/title.py +3 -5
  25. StreamingCommunity/Api/Site/mostraguarda/__init__.py +2 -2
  26. StreamingCommunity/Api/Site/mostraguarda/film.py +4 -8
  27. StreamingCommunity/Api/Site/streamingcommunity/__init__.py +8 -7
  28. StreamingCommunity/Api/Site/streamingcommunity/film.py +14 -18
  29. StreamingCommunity/Api/Site/streamingcommunity/series.py +25 -76
  30. StreamingCommunity/Api/Site/streamingcommunity/site.py +11 -23
  31. StreamingCommunity/Api/Template/Util/__init__.py +8 -1
  32. StreamingCommunity/Api/Template/Util/manage_ep.py +46 -2
  33. StreamingCommunity/Api/Template/config_loader.py +71 -0
  34. StreamingCommunity/Lib/Downloader/HLS/downloader.py +60 -59
  35. StreamingCommunity/Lib/Downloader/HLS/segments.py +40 -14
  36. StreamingCommunity/Lib/Downloader/MP4/downloader.py +47 -40
  37. StreamingCommunity/Lib/FFmpeg/command.py +59 -3
  38. StreamingCommunity/Lib/M3U8/estimator.py +5 -5
  39. StreamingCommunity/Lib/M3U8/parser.py +12 -51
  40. StreamingCommunity/Lib/TMBD/tmdb.py +66 -99
  41. StreamingCommunity/TelegramHelp/telegram_bot.py +222 -68
  42. StreamingCommunity/Util/_jsonConfig.py +14 -13
  43. StreamingCommunity/Util/ffmpeg_installer.py +70 -64
  44. StreamingCommunity/Util/headers.py +11 -122
  45. StreamingCommunity/Util/os.py +64 -55
  46. StreamingCommunity/Util/table.py +62 -108
  47. StreamingCommunity/run.py +15 -10
  48. {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/METADATA +56 -22
  49. StreamingCommunity-2.5.8.dist-info/RECORD +86 -0
  50. StreamingCommunity/Api/Site/1337xx/costant.py +0 -15
  51. StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +0 -21
  52. StreamingCommunity/Api/Site/animeunity/costant.py +0 -21
  53. StreamingCommunity/Api/Site/cb01new/costant.py +0 -19
  54. StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +0 -20
  55. StreamingCommunity/Api/Site/guardaserie/costant.py +0 -19
  56. StreamingCommunity/Api/Site/ilcorsaronero/costant.py +0 -19
  57. StreamingCommunity/Api/Site/mostraguarda/costant.py +0 -19
  58. StreamingCommunity/Api/Site/streamingcommunity/costant.py +0 -21
  59. StreamingCommunity/TelegramHelp/request_manager.py +0 -82
  60. StreamingCommunity/TelegramHelp/session.py +0 -56
  61. StreamingCommunity-2.5.7.dist-info/RECORD +0 -96
  62. {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/LICENSE +0 -0
  63. {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/WHEEL +0 -0
  64. {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/entry_points.txt +0 -0
  65. {StreamingCommunity-2.5.7.dist-info → StreamingCommunity-2.5.8.dist-info}/top_level.txt +0 -0
@@ -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]] = [] # List to store TV show data as dictionaries
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
- # Create row data while handling missing keys
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 = (os.path.basename(research_func['folder']))
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
- # Print detailed traceback
135
- import traceback
136
- traceback.print_exc()
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 = "" # Variable to store the last command executed
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 = None
168
- for reverse_fun in get_call_stack():
169
- if reverse_fun['function'] == 'search' and reverse_fun['script'] == '__init__.py':
170
- research_func = reverse_fun
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
- # Handling user input for loading more items or quitting
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
- if TELEGRAM_BOT:
179
- self.console.print(f"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
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(0, max_int_input)]
194
- choices.extend(["q", "quit", "b", "back"])
195
- if TELEGRAM_BOT:
196
- self.console.print(f"[cyan]Insert media [red]index")
197
- key = bot.ask(
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
- key = Prompt.ask("[cyan]Insert media [red]index", choices=choices, show_choices=False)
204
-
172
+ key = Prompt.ask(prompt_msg, choices=choices, show_choices=False)
173
+
205
174
  last_command = key
206
175
 
207
- if key.lower() == "q" or key.lower() == "quit":
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 slice, ensure all remaining items are shown
224
- 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.")
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
- if TELEGRAM_BOT:
227
- self.console.print(f"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
228
- "[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")
229
- key = bot.ask(
230
- "select_title_episode",
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
- key = Prompt.ask(
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(0, max_int_input)]
242
- choices.extend(["q", "quit", "b", "back"])
243
-
244
- if TELEGRAM_BOT:
245
- self.console.print(f"[cyan]Insert media [red]index")
246
- key = bot.ask(
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
- key = Prompt.ask("[cyan]Insert media [red]index", choices=choices, show_choices=False)
253
-
208
+ key = Prompt.ask(prompt_msg, choices=choices, show_choices=False)
209
+
254
210
  last_command = key
255
211
 
256
- if key.lower() == "q" or key.lower() == "quit":
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.session import get_session, deleteScriptId
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.7
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: fake-useragent<2.0.0
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/StreamingCommunity.exe">
90
- <img src="https://img.shields.io/badge/-Windows_x64-blue.svg?style=for-the-badge&logo=windows" alt="Windows">
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/StreamingCommunity.zip">
93
- <img src="https://img.shields.io/badge/-Source_tar-green.svg?style=for-the-badge" alt="Source Tarball">
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": -1,
459
+ "force_resolution": "1080p",
457
460
  "get_only_link": false
458
461
  }
459
462
  ```
460
463
 
461
- - `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
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
- You need to create an .env file and enter your Telegram token
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
- and user ID to authorize only one user to use it
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.media/) | ✅ | -CB0 |
598
+ | [CB01New](https://cb01new.gold/) | ✅ | -CB0 |
565
599
  | [DDLStreamItaly](https://ddlstreamitaly.co/) | ✅ | -DDL |
566
- | [GuardaSerie](https://guardaserie.meme/) | ✅ | -GUA |
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,,