|
45 | 45 | ) |
46 | 46 | from ...core.utils import AsyncIter |
47 | 47 |
|
| 48 | +try: |
| 49 | + from red_yt_cipher_solver import SolverServerProcess |
| 50 | +except ModuleNotFoundError: |
| 51 | + _HAS_CIPHER_SOLVER = False |
| 52 | +else: |
| 53 | + _HAS_CIPHER_SOLVER = True |
| 54 | + |
48 | 55 | if TYPE_CHECKING: |
49 | 56 | from . import Audio |
50 | 57 |
|
@@ -146,6 +153,8 @@ def __init__( |
146 | 153 | self._args = [] |
147 | 154 | self._pipe_task = None |
148 | 155 | self.plugins: dict[str, str] = {} |
| 156 | + self.cipher_server: Optional[SolverServerProcess] = None |
| 157 | + self.cipher_server_task: Optional[asyncio.Task] = None |
149 | 158 |
|
150 | 159 | @property |
151 | 160 | def lavalink_download_dir(self) -> pathlib.Path: |
@@ -205,6 +214,17 @@ async def _start(self, java_path: str) -> None: |
205 | 214 | raise ManagedLavalinkPreviouslyShutdownException( |
206 | 215 | "Server manager has already been used - create another one" |
207 | 216 | ) |
| 217 | + |
| 218 | + if _HAS_CIPHER_SOLVER: |
| 219 | + self.cipher_server = SolverServerProcess( |
| 220 | + log_file=self.lavalink_download_dir / "logs" / "solver-server.log" |
| 221 | + ) |
| 222 | + # TODO: monitor the task |
| 223 | + self.cipher_server_task = asyncio.create_task(self.cipher_server.run()) |
| 224 | + if not await self.cipher_server.wait_for_startup(): |
| 225 | + log.warning("Failed to start the cipher server. Will continue without one.") |
| 226 | + self.cipher_server = None |
| 227 | + |
208 | 228 | await self.process_settings() |
209 | 229 | await self.maybe_download_jar() |
210 | 230 | args, msg = await self._get_jar_args() |
@@ -245,6 +265,10 @@ async def _start(self, java_path: str) -> None: |
245 | 265 |
|
246 | 266 | async def process_settings(self): |
247 | 267 | data = managed_node.generate_server_config(await self._config.yaml.all()) |
| 268 | + if self.cipher_server is not None: |
| 269 | + plugin_config = data.setdefault("plugins", {}).setdefault("youtube", {}) |
| 270 | + cipher_config = plugin_config.setdefault("remoteCipher", {}) |
| 271 | + cipher_config["url"] = self.cipher_server.base_url |
248 | 272 |
|
249 | 273 | with open(self.lavalink_app_yml, "w", encoding="utf-8") as f: |
250 | 274 | yaml.safe_dump(data, f) |
@@ -378,6 +402,10 @@ async def shutdown(self) -> None: |
378 | 402 | if self.start_monitor_task is not None: |
379 | 403 | self.start_monitor_task.cancel() |
380 | 404 | await self._partial_shutdown() |
| 405 | + if self.cipher_server: |
| 406 | + await self.cipher_server.close() |
| 407 | + if self.cipher_server_task: |
| 408 | + await self.cipher_server_task |
381 | 409 |
|
382 | 410 | async def _partial_shutdown(self) -> None: |
383 | 411 | self.ready.clear() |
|
0 commit comments