diff --git a/package-lock.json b/package-lock.json index ed0c66d..8f53c91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "denim_3001", - "version": "3001.62.10", + "version": "3001.62.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "denim_3001", - "version": "3001.62.10", + "version": "3001.62.11", "license": "ISC", "dependencies": { "@discordjs/voice": "^0.19.0", diff --git a/package.json b/package.json index 0ab0adc..c25e9e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "denim_3001", - "version": "3001.62.10", + "version": "3001.62.11", "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 18e9351..912d24e 100644 --- a/src/modules/vordinace.ts +++ b/src/modules/vordinace.ts @@ -10,22 +10,13 @@ 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) { - - if (typeof clientId == "undefined" || typeof sessionId == "undefined" || typeof serverId == "undefined") { - throw new Error("není všechnno nastaveno"); - } - +function createOneplayBody(payload: Record, customData: string, clientId: string, sessionId: string, serverId: string) { const vec = { "deviceInfo": { "deviceType": "web", - "appVersion": "R6.23", + "appVersion": "R8.14", "deviceManufacturer": "Unknown", "deviceOs": "Windows" }, @@ -51,91 +42,33 @@ async function udelejOneplayRquest(cesta: string, body: string) { } let ok = false; - const res = await betterFetch(`https://http.cms.jyxo.cz/api/v1.6/${cesta}`, { + const res = await betterFetch(`https://http.cms.jyxo.cz/api/v1.8/${cesta}`, { method: "POST", body, headers: { Authorization: token } }).then(res => { ok = res.ok; - res.json(); + return res.json(); }) .catch(e => { throw new Error(`chyba pri udelejoneplayrequest fetch ${e}`); }); logg(`nejspis ${ok ? "" : "ne"}uspesna odpoved`, res); + + return res; } -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 getServerInfo = (socket: WebSocket) => new Promise<[string, string]>((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(nazev); + + res([json.data.serverId, json.data.sessionId]); } }; @@ -150,8 +83,9 @@ const handleMessageAndGetNazev = (socket: WebSocket) => new Promise((res async function ziskatNazev() { // Tak tohle stojí fakt za hovno oproti voyu :sjeta: + // Ale bejvalo to mnohem horší :sjeta: - clientId = crypto.randomUUID(); + const clientId = crypto.randomUUID(); logg("moje Ws id je", clientId); @@ -160,7 +94,27 @@ async function ziskatNazev() { try { socket = new WebSocket(`wss://ws.cms.jyxo.cz/websocket/${clientId}`); - return await handleMessageAndGetNazev(socket); + 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; } catch (e) { logg("nazev ordinace se nepodarilo ziskat", e); throw new Error("nazev neni");