Revert "tipiko, zjednodušení?"

oneplay zpíčenej
This commit is contained in:
Histmy 2026-03-16 15:39:45 +01:00
parent b432857f87
commit 04e9e39e9f
3 changed files with 81 additions and 35 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "denim_3001", "name": "denim_3001",
"version": "3001.62.11", "version": "3001.62.12",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "denim_3001", "name": "denim_3001",
"version": "3001.62.11", "version": "3001.62.12",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@discordjs/voice": "^0.19.0", "@discordjs/voice": "^0.19.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "denim_3001", "name": "denim_3001",
"version": "3001.62.11", "version": "3001.62.12",
"description": "Toto je velmi kvalitní bot.", "description": "Toto je velmi kvalitní bot.",
"repository": { "repository": {
"url": "https://github.com/Histmy/Denim-Bot/" "url": "https://github.com/Histmy/Denim-Bot/"

View File

@ -10,13 +10,22 @@ const logg = (...cokoli: any[]) => log("[OnePlayDownloader]: ", ...cokoli);
const token = process.env.OnePlayToken; const token = process.env.OnePlayToken;
let clientId: string | undefined = undefined;
let sessionId: string | undefined = undefined;
let serverId: string | undefined = undefined;
let canForceNotify = true; let canForceNotify = true;
function createOneplayBody(payload: Record<string, any>, customData: string, clientId: string, sessionId: string, serverId: string) { function createOneplayBody(payload: Record<string, any>, customData: string) {
if (typeof clientId == "undefined" || typeof sessionId == "undefined" || typeof serverId == "undefined") {
throw new Error("není všechnno nastaveno");
}
const vec = { const vec = {
"deviceInfo": { "deviceInfo": {
"deviceType": "web", "deviceType": "web",
"appVersion": "R8.14", "appVersion": "R6.23",
"deviceManufacturer": "Unknown", "deviceManufacturer": "Unknown",
"deviceOs": "Windows" "deviceOs": "Windows"
}, },
@ -42,33 +51,91 @@ async function udelejOneplayRquest(cesta: string, body: string) {
} }
let ok = false; 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", method: "POST",
body, body,
headers: { Authorization: token } headers: { Authorization: token }
}).then(res => { }).then(res => {
ok = res.ok; ok = res.ok;
return res.json(); res.json();
}) })
.catch(e => { throw new Error(`chyba pri udelejoneplayrequest fetch ${e}`); }); .catch(e => { throw new Error(`chyba pri udelejoneplayrequest fetch ${e}`); });
logg(`nejspis ${ok ? "" : "ne"}uspesna odpoved`, res); 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<string>((res, rej) => {
const listener = (m: RawData) => { const listener = (m: RawData) => {
//const mes = m.toString();
//logg("data:", mes);
const json = JSON.parse(m.toString()); const json = JSON.parse(m.toString());
logg("celyjson je", json); logg("celyjson je", json);
// if (mes.includes("\"schema\":\"Ping\"")) {
// logg("pingec, odpovidam");
// socket.send(`{"schema":"Pong"}`);
// }
if (json.result?.schema == "ConnectionInitData") { 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); clearTimeout(timeout);
socket.off("message", listener); socket.off("message", listener);
res(nazev);
res([json.data.serverId, json.data.sessionId]);
} }
}; };
@ -83,9 +150,8 @@ const getServerInfo = (socket: WebSocket) => new Promise<[string, string]>((res,
async function ziskatNazev() { async function ziskatNazev() {
// Tak tohle stojí fakt za hovno oproti voyu :sjeta: // 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); logg("moje Ws id je", clientId);
@ -94,27 +160,7 @@ async function ziskatNazev() {
try { try {
socket = new WebSocket(`wss://ws.cms.jyxo.cz/websocket/${clientId}`); socket = new WebSocket(`wss://ws.cms.jyxo.cz/websocket/${clientId}`);
const [serverId, sessionId] = await getServerInfo(socket); return await handleMessageAndGetNazev(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) { } catch (e) {
logg("nazev ordinace se nepodarilo ziskat", e); logg("nazev ordinace se nepodarilo ziskat", e);
throw new Error("nazev neni"); throw new Error("nazev neni");