DashX-API / plugins /sunov2.js
HerzaJ's picture
Update plugins/sunov2.js
40cbabf verified
const axios = require('axios');
class YesChatMusicGenerator {
constructor() {
this.userAgent = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36";
}
async getBypassToken() {
try {
const response = await axios.get('https://anabot.my.id/api/tools/bypass', {
params: {
url: 'https://www.yeschat.ai/',
siteKey: '0x4AAAAAAATOXAtQtziH-Rwq',
type: 'turnstile-min',
apikey: 'freeApikey'
},
headers: {
'accept': '*/*'
}
});
if (response.data.success && response.data.data?.result?.token) {
return response.data.data.result.token;
}
throw new Error('Failed to get token from response');
} catch (error) {
throw new Error(`Failed to get bypass token: ${error.message}`);
}
}
async generateSongLyrics({
prompt,
title = "Tanpa Judul",
style = "Happy",
instrumental = false,
customMode = true,
}) {
const token = await this.getBypassToken();
if (!token || typeof token !== "string") {
throw new Error("Failed to get bypass token.");
}
const res = await axios.post(
"https://aiarticle.erweima.ai/api/v1/secondary-page/api/create",
{
prompt,
channel: "MUSIC",
id: 1018,
type: "features",
source: "yeschat.ai",
style,
title,
customMode,
instrumental,
},
{
headers: {
authority: "aiarticle.erweima.ai",
accept: "application/json, text/plain, */*",
"accept-language": "ms-MY,ms;q=0.9,en-US;q=0.8,en;q=0.7,id;q=0.6",
origin: "https://www.yeschat.ai",
referer: "https://www.yeschat.ai/",
"sec-ch-ua": '"Not A(Brand";v="8", "Chromium";v="132"',
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": '"Android"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"user-agent": this.userAgent,
uniqueid: Date.now(),
verify: token,
},
}
);
if (res.data.code !== 200) {
throw new Error(res.data.msg || "Failed to generate lyrics");
}
const recordId = res.data?.data?.recordId;
return this.pollGeneratedResult(recordId);
}
pollGeneratedResult(recordId, interval = 5000) {
return new Promise((resolve, reject) => {
const url = `https://aiarticle.erweima.ai/api/v1/secondary-page/api/${recordId}`;
const timer = setInterval(async () => {
try {
const { data } = await axios.get(url, {
headers: {
authority: "aiarticle.erweima.ai",
accept: "application/json, text/plain, */*",
"accept-language": "ms-MY,ms;q=0.9,en-US;q=0.8,en;q=0.7,id;q=0.6",
origin: "https://www.yeschat.ai",
referer: "https://www.yeschat.ai/",
"sec-ch-ua": '"Not A(Brand";v="8", "Chromium";v="132"',
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": '"Android"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"user-agent": this.userAgent,
},
});
if (data.code !== 200) {
clearInterval(timer);
return reject(new Error(data.msg || "Unexpected error"));
}
if (data.data?.failCode && data.data?.failMsg) {
clearInterval(timer);
return reject(new Error(data.data.failMsg));
}
if (data.data?.state && data.data.completeData) {
clearInterval(timer);
return resolve(JSON.parse(data.data.completeData));
}
} catch (err) {
clearInterval(timer);
return reject(err);
}
}, interval);
});
}
}
const handler = async (req, res) => {
try {
const { mode, prompt, lyrics, title, style, instrumental } = req.query;
if (!mode) {
return res.status(400).json({
success: false,
error: 'Missing required parameter: mode (custom/ai)'
});
}
const modeNormalized = mode.toLowerCase();
if (modeNormalized !== 'custom' && modeNormalized !== 'ai') {
return res.status(400).json({
success: false,
error: 'Invalid mode. Use "custom" for Custom Lyrics or "ai" for AI Lyrics'
});
}
let finalPrompt;
let customMode;
if (modeNormalized === 'custom') {
if (!lyrics) {
return res.status(400).json({
success: false,
error: 'Missing required parameter: lyrics (required for Custom Lyrics mode)'
});
}
finalPrompt = lyrics;
customMode = true;
} else {
if (!prompt) {
return res.status(400).json({
success: false,
error: 'Missing required parameter: prompt (required for AI Lyrics mode)'
});
}
finalPrompt = prompt;
customMode = false;
}
const generator = new YesChatMusicGenerator();
const result = await generator.generateSongLyrics({
prompt: finalPrompt,
title: title || "Tanpa Judul",
style: style || "Happy",
instrumental: instrumental === 'true',
customMode: customMode
});
res.json({
author: "Herza",
success: true,
mode: modeNormalized === 'custom' ? 'Custom Lyrics' : 'AI Lyrics',
result: result
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message
});
}
};
module.exports = {
name: 'SunoV2 Music Generator',
type: 'GET',
routes: ['api/AI/sunov2'],
tags: ['ai', 'music', 'generator'],
main: ['AI'],
limit: 12,
parameters: ['mode', 'prompt', 'lyrics', 'title', 'style', 'instrumental', 'key'],
enabled: true,
handler
};