From 1f13ba2afba8e55608bbd0e54534a46dc4c6d117 Mon Sep 17 00:00:00 2001 From: sky Date: Tue, 4 Nov 2025 22:11:04 -0500 Subject: [PATCH] music start --- accounts/music.js | 5 +++-- index.js | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/accounts/music.js b/accounts/music.js index 5492fc1..2ded2e6 100644 --- a/accounts/music.js +++ b/accounts/music.js @@ -9,6 +9,7 @@ async function search(query) { let data = sc.search(query); return data; } + // so um fuck lucida // based on https://github.com/imputnet/cobalt/blob/58ea4aed01383ead74d5e32e75335eddc2f015be/api/src/processing/services/soundcloud.js @@ -72,7 +73,7 @@ const findBestForPreset = (transcodings, preset) => { return inferior; } async function download(obj) { - const clientId = await findClientID(); + const clientId = cachedID.id; if (!clientId) return { error: "fetch.fail" }; let link = obj; @@ -150,4 +151,4 @@ async function download(obj) { } } -export { search, download }; \ No newline at end of file +export { search, download, findClientID }; \ No newline at end of file diff --git a/index.js b/index.js index 7c996d1..a01dc5b 100755 --- a/index.js +++ b/index.js @@ -10,15 +10,21 @@ import compression from "compression"; // import { accs, infdb, polytrack } from "./database.js"; import { accs } from "./database.js"; import { } from "./accounts/friend.js"; -import { search, download } from "./accounts/music.js"; +import { findClientID, search, download } from "./accounts/music.js"; import { banUser, removeAccount, verifyCookie, getUserFromCookie, createAccount, resetPassword, loginAccount, addBadge } from "./accounts/manage.js"; import { } from "./accounts/misc.js"; import { getRawData, generateAccountPage, editProfile, saveData, getUsers, isAdmin, retrieveData } from "./accounts/profile.js"; import { callAI } from "./ai.js"; +import { Readable } from 'stream'; import os from "node:os"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); +await findClientID(); +setInterval(async () => { + await findClientID(); +}, 1000 * 60 * 20); + const port = process.env.PORT || 3000; const app = express(); @@ -160,6 +166,26 @@ app.post("/api/ai/sendMessage", async (req, res) => { // stream back reply }) +// music endpoints +app.get("/api/music/search", async (req, res) => { + res.status(200).send(await search(req.query.q)) +}) + +app.use("/api/music/download", async (req, res, next) => { + // console.log() + let song = req.query.url; + song = song.replaceAll(" ", ""); + const processor = Bun.spawn([ + "yt-dlp", + "bestaudio[abr<=160]", + "-o", `-`, + "https://soundcloud.com/" + req.query.url + ]); + for await (const chunk of processor.stdout) { + res.write(chunk); + } + res.end(); +}); // friends endpoints app.get("/api/friends/list", async (req, res) => {