const axios = require("axios"); const path = require("path"); const fs = require("fs"); const API_CONFIG_URL = "https://raw.githubusercontent.com/cyber-ullash/cyber-ullash/refs/heads/main/UllashApi.json"; const getApiUrl = async () => { try { const response = await axios.get(API_CONFIG_URL); const albumUrl = response.data.album; if (!albumUrl) { throw new Error("Album API URL not found in the JSON data."); } return albumUrl; } catch (error) { console.error("API URL :", error); throw new Error("API URL"); } }; module.exports.config = { name: "album", version: "1.0.1", role: 0, author: "š“†©š‘…š‘œš’·š’¾š“ƒš“†Ŗ š’œš“š’¾", description: "Manage and view video/photo albums", usePrefix: true, prefix: true, category: "Media", category: "media", usages: "Empty to see list, or album [category] to get media.", countDown: 5, }; module.exports.onStart = async function ({ api, event, args }) { const { threadID, messageID, senderID } = event; const albumOptionsPage1 = [ "funny", "islamic", "sad", "anime", "cartoon", "love", "horny", "couple", "flower", "marvel", ]; const albumOptionsPage2 = [ "aesthetic", "sigma", "lyrics", "cat", "18plus", "freefire", "football", "girl", "friends", "cricket", ]; const toBold = (text) => text.replace(/[a-z]/g, (c) => String.fromCodePoint(0x1d41a + c.charCodeAt(0) - 97) ); const toBoldNumber = (num) => String(num).replace(/[0-9]/g, (c) => String.fromCodePoint(0x1d7ec + parseInt(c)) ); const formatOptions = (options, startIndex = 1) => options .map((opt, i) => `✨ | ${toBoldNumber(i + startIndex)}. ${toBold(opt)}`) .join("\n"); if (args[0] === "2") { const message2 = "šŸ’« š‚š”šØšØš¬šž ššš§ ššš„š›š®š¦ šœššš­šžš šØš«š² šššš›š² šŸ’«\n" + "āœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ\n" + formatOptions(albumOptionsPage2, 11) + "\nāœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ\nšŸŽÆ | šššš šž [šŸ/šŸ]\nāœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ"; await api.sendMessage( { body: message2 }, threadID, (error, info) => { if (!error && info && info.messageID) { if (global.GoatBot?.onReply) { global.GoatBot.onReply.set(info.messageID, { name: this.config.name, type: "reply", messageID: info.messageID, author: senderID, link: albumOptionsPage2, }); } } }, messageID ); return; } if (!args[0] || args[0].toLowerCase() === "list") { api.setMessageReaction("ā˜¢ļø", messageID, () => {}, true); const message = "šŸ’« š‚š”šØšØš¬šž ššš§ ššš„š›š®š¦ šœššš­šžš šØš«š² šššš›š² šŸ’«\n" + "āœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ\n" + formatOptions(albumOptionsPage1) + `\nāœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ\nšŸŽÆ | šššš šž [šŸ/šŸ]\nℹ | š“š²š©šž: ${global.config.PREFIX}album 2 - š§šžš±š­ š©ššš šž\nāœŗā”ā”ā”ā”ā”ā”ā”ā—ˆā—‰ā—ˆā”ā”ā”ā”ā”ā”ā”āœŗ`; await api.sendMessage( { body: message }, threadID, (error, info) => { if (!error && info && info.messageID) { if (global.GoatBot?.onReply) { global.GoatBot.onReply.set(info.messageID, { name: this.config.name, type: "reply", messageID: info.messageID, author: senderID, link: albumOptionsPage1, }); } } }, messageID ); return; } const validCategories = [ "cartoon", "marvel", "lofi", "sad", "islamic", "funny", "horny", "anime", "love", "baby", "lyrics", "sigma", "aesthetic", "cat", "flower", "freefire", "sex", "girl", "football", "friend", "cricket", "couple", "18plus", "freefire", ]; const command = args[0].toLowerCase(); if (!validCategories.includes(command)) { return api.sendMessage( "āŒ šˆš§šÆššš„š¢š šœššš­šžš šØš«š²! š“š²š©šž '/album' š­šØ š¬šžšž š„š¢š¬š­.", threadID, messageID ); } return api.sendMessage( `šŸ“ š‹šØšššš¢š§š  šœššš­šžš šØš«š²: ššš„š›š®š¦ - ${command}...`, threadID, messageID ); }; module.exports.onReply = async function ({ api, event, handleReply: _origReply }) { const handleReply = Reply || _origReply || {}; api.unsendMessage(handleReply.messageID); const adminID = "100091520325159"; const replyNum = parseInt(event.body); if (isNaN(replyNum)) { return api.sendMessage( "āŒ šš„šžššš¬šž š«šžš©š„š² š°š¢š­š” šš šÆššš„š¢š š§š®š¦š›šžš«.", event.threadID, event.messageID ); } const categories = [ "funny", "islamic", "sad", "anime", "cartoon", "love", "horny", "couple", "flower", "marvel", "aesthetic", "sigma", "lyrics", "cat", "18plus", "freefire", "football", "girl", "friend", "cricket", ]; if (replyNum < 1 || replyNum > categories.length) { return api.sendMessage( "āŒ šˆš§šÆššš„š¢š š¬šžš„šžšœš­š¢šØš§.", event.threadID, event.messageID ); } const selectedCategory = categories[replyNum - 1]; if ( (selectedCategory === "horny" || selectedCategory === "18plus") && event.senderID !== adminID ) { return api.sendMessage( "🚫 š˜šØš® ššš«šž š§šØš­ ššš®š­š”šØš«š¢š³šžš šŸšØš« š­š”š¢š¬ šœššš­šžš šØš«š².", event.threadID, event.messageID ); } const captions = { funny: "🤣 > šššš° šššš›š² š…š®š§š§š² šÆš¢ššžšØ", islamic: "šŸ˜‡ > šššš° šššš›š² šˆš¬š„ššš¦š¢šœ šÆš¢ššžšØ", sad: "🄺 > šššš° šššš›š² š’ššš šÆš¢ššžšØ", anime: "😘 > šššš° šššš›š² š€š§š¢š¦šž šÆš¢ššžšØ", cartoon: "šŸ˜‡ > šššš° šššš›š² š‚ššš«š­šØšØš§ šÆš¢ššžšØ", love: "šŸ˜‡ > šššš° šššš›š² š‹šØšÆšž šÆš¢ššžšØ", horny: "🄵 > šššš° šššš›š² š‡šØš«š§š² šÆš¢ššžšØ", couple: "ā¤ļø > šššš° šššš›š² š‚šØš®š©š„šž šÆš¢ššžšØ", flower: "🌸 > šššš° šššš›š² š…š„šØš°šžš« šÆš¢ššžšØ", marvel: "šŸŽÆ > šššš° šššš›š² šŒššš«šÆšžš„ šÆš¢ššžšØ", aesthetic: "šŸŽ€ > šššš° šššš›š² š€šžš¬š­š”šžš­š¢šœ šÆš¢ššžšØ", sigma: "🐤 > šššš° šššš›š² š’š¢š š¦šš šÆš¢ššžšØ", lyrics: "🄰 > šššš° šššš›š² š‹š²š«š¢šœš¬ šÆš¢ššžšØ", cat: "🐱 > šššš° šššš›š² š‚ššš­ šÆš¢ššžšØ", "18plus": "šŸ”ž > šššš° šššš›š² šŸšŸ–+ šÆš¢ššžšØ", freefire: "šŸŽ® > šššš° šššš›š² š…š«šžšžšŸš¢š«šž šÆš¢ššžšØ", football: "⚽ > šššš° šššš›š² š…šØšØš­š›ššš„š„ šÆš¢ššžšØ", girl: "šŸ‘§ > šššš° šššš›š² š†š¢š«š„ šÆš¢ššžšØ", friend: "šŸ‘« > šššš° šššš›š² š…š«š¢šžš§šš¬ šÆš¢ššžšØ", cricket: "šŸ > šššš° šššš›š² š‚š«š¢šœš¤šžš­ šÆš¢ššžšØ", }; try { const BASE_API_URL = await getApiUrl(); const res = await axios.get( `${BASE_API_URL}/album?type=${selectedCategory}` ); const mediaUrl = res.data.data; if (!mediaUrl) { return api.sendMessage( "āš ļø ššØ šœšØš§š­šžš§š­ šŸšØš®š§š š¢š§ š­š”š¢š¬ šœššš­šžš šØš«š².", event.threadID, event.messageID ); } const response = await axios({ method: "get", url: mediaUrl, responseType: "stream", }); const filename = path.basename(mediaUrl).split("?")[0]; const filePath = path.join(__dirname, "cache", `${Date.now()}_${filename}`); const writer = fs.createWriteStream(filePath); response.data.pipe(writer); writer.on("finish", () => { api.sendMessage( { body: captions[selectedCategory] || `šŸŽ¬ ššØš° šššš›š² ${selectedCategory} šœšØš§š­šžš§š­`, attachment: fs.createReadStream(filePath), }, event.threadID, () => fs.unlinkSync(filePath), event.messageID ); }); writer.on("error", (err) => { console.error("Write Error:", err); api.sendMessage( "āŒ š…ššš¢š„šžš š­šØ š¬šžš§š šÆš¢ššžšØ.", event.threadID, event.messageID ); }); } catch (err) { console.error("Axios Error:", err.message); return api.sendMessage( "āŒ š’šØš¦šžš­š”š¢š§š  š°šžš§š­ š°š«šØš§š . š“š«š² ššš ššš¢š§!", event.threadID, event.messageID ); } };