diff --git a/package-lock.json b/package-lock.json index 8f53c91..a3c7af0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "denim_3001", - "version": "3001.62.11", + "version": "3001.62.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "denim_3001", - "version": "3001.62.11", + "version": "3001.62.12", "license": "ISC", "dependencies": { "@discordjs/voice": "^0.19.0", diff --git a/package.json b/package.json index c25e9e2..881d2fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "denim_3001", - "version": "3001.62.11", + "version": "3001.62.12", "description": "Toto je velmi kvalitní bot.", "repository": { "url": "https://github.com/Histmy/Denim-Bot/" diff --git a/src/modules/vordinace.ts b/src/modules/vordinace.ts index 912d24e..18e9351 100644 --- a/src/modules/vordinace.ts +++ b/src/modules/vordinace.ts @@ -10,13 +10,22 @@ const logg = (...cokoli: any[]) => log("[OnePlayDownloader]: ", ...cokoli); const token = process.env.OnePlayToken; +let clientId: string | undefined = undefined; +let sessionId: string | undefined = undefined; +let serverId: string | undefined = undefined; + let canForceNotify = true; -function createOneplayBody(payload: Record, customData: string, clientId: string, sessionId: string, serverId: string) { +function createOneplayBody(payload: Record, customData: string) { + + if (typeof clientId == "undefined" || typeof sessionId == "undefined" || typeof serverId == "undefined") { + throw new Error("není všechnno nastaveno"); + } + const vec = { "deviceInfo": { "deviceType": "web", - "appVersion": "R8.14", + "appVersion": "R6.23", "deviceManufacturer": "Unknown", "deviceOs": "Windows" }, @@ -42,33 +51,91 @@ async function udelejOneplayRquest(cesta: string, body: string) { } let ok = false; - const res = await betterFetch(`https://http.cms.jyxo.cz/api/v1.8/${cesta}`, { + const res = await betterFetch(`https://http.cms.jyxo.cz/api/v1.6/${cesta}`, { method: "POST", body, headers: { Authorization: token } }).then(res => { ok = res.ok; - return res.json(); + res.json(); }) .catch(e => { throw new Error(`chyba pri udelejoneplayrequest fetch ${e}`); }); logg(`nejspis ${ok ? "" : "ne"}uspesna odpoved`, res); - - return res; } -const getServerInfo = (socket: WebSocket) => new Promise<[string, string]>((res, rej) => { +const sleep = (time: number) => new Promise(res => setTimeout(res, time)); + +async function executeOrdinaceFlow() { + + // Inicializace + await udelejOneplayRquest("app.init", createOneplayBody({ + "reason": "start", + "route": { + "url": "https://www.oneplay.cz/porad/1-ordinace-v-ruzove-zahrade-2" + } + }, `{"requireStartAction":true}`)); + + await sleep(500); + + // Navigace na stránku Ordinace + await udelejOneplayRquest("page.content.display", createOneplayBody({ + contentId: "show.1" + }, `{"shouldBeInModal":true}`)); + + await sleep(500); + + // Otevření 26. řady + await udelejOneplayRquest("carousel.display", createOneplayBody({ + carouselId: "show:1;tab:65;parent:64;carousel:65", + criteria: { + filterCriterias: "season:80864", + sortOption: "DESC" + } + }, `{"blockId":"show:1;tab:65;parent:64;block:65"}`)); + +} + +const handleMessageAndGetNazev = (socket: WebSocket) => new Promise((res, rej) => { const listener = (m: RawData) => { + //const mes = m.toString(); + //logg("data:", mes); const json = JSON.parse(m.toString()); logg("celyjson je", json); + // if (mes.includes("\"schema\":\"Ping\"")) { + // logg("pingec, odpovidam"); + + // socket.send(`{"schema":"Pong"}`); + // } + if (json.result?.schema == "ConnectionInitData") { + logg("jojo,slysim a jdu na to"); + serverId = json.data.serverId; + sessionId = json.data.sessionId; + logg("serverid", serverId, "sessionid", sessionId); + executeOrdinaceFlow().catch(rej); + } + else if (json?.schema == "ApiCall" && json?.command == "carousel.display") { + logg("máme tady názvy epizod zvolené série"); + + const nazev = json?.response?.data?.carousel?.tiles?.[0]?.title; + + //logg(typeof json, typeof json?.response, typeof json?.response?.data, typeof json?.response?.data?.carousel, typeof json?.response?.data?.carousel?.titles); + + if (!nazev) { + return rej("nazev neexistuje"); + } + + if (typeof nazev != "string") { + return rej("nazev neni string"); + } + clearTimeout(timeout); socket.off("message", listener); - - res([json.data.serverId, json.data.sessionId]); + res(nazev); } }; @@ -83,9 +150,8 @@ const getServerInfo = (socket: WebSocket) => new Promise<[string, string]>((res, async function ziskatNazev() { // Tak tohle stojí fakt za hovno oproti voyu :sjeta: - // Ale bejvalo to mnohem horší :sjeta: - const clientId = crypto.randomUUID(); + clientId = crypto.randomUUID(); logg("moje Ws id je", clientId); @@ -94,27 +160,7 @@ async function ziskatNazev() { try { socket = new WebSocket(`wss://ws.cms.jyxo.cz/websocket/${clientId}`); - const [serverId, sessionId] = await getServerInfo(socket); - - const output = await udelejOneplayRquest("carousel.display", createOneplayBody({ - carouselId: "show:1;tab:65;parent:64;carousel:65", - criteria: { - filterCriterias: "season:80864", - sortOption: "DESC" - } - }, `{"blockId":"show:1;tab:65;parent:64;block:65"}`, clientId, sessionId, serverId)); - - const nazev = output?.data?.carousel?.tiles?.[0]?.title; - - if (!nazev) { - throw new Error("nazev neexistuje"); - } - - if (typeof nazev != "string") { - throw new Error("nazev neni string"); - } - - return nazev; + return await handleMessageAndGetNazev(socket); } catch (e) { logg("nazev ordinace se nepodarilo ziskat", e); throw new Error("nazev neni");