module.exports = { config: { name: "metatheme", version: "2.4.70", author: "Sheikh Tamim", countDown: 5, role: 2, description: "Generate AI themes for messenger chat", category: "owner", guide: { en: "{pn} - Generate AI theme based on your prompt\nExample: {pn} beautiful tropical beach" } }, onReply: async function ({ message, Reply, event, api, args }) { const { author, themes, threadID, messageID } = Reply; // Handle both Messenger and potential other platforms const currentUserId = event.senderID || event.userID || (event.from && event.from.id); if (currentUserId !== author) { return message.reply("āŒ Only the person who generated these themes can select one."); } const selection = parseInt(args[0]) || parseInt((event.body || event.text || "").trim()); if (!selection || selection < 1 || selection > themes.length) { return message.reply(`āŒ Invalid selection. Please reply with a number between 1 and ${themes.length}.`); } const selectedTheme = themes[selection - 1]; try { // Unsend the previous message api.unsendMessage(messageID); await new Promise((resolve, reject) => { api.setThreadTheme(threadID, selectedTheme.themeId, (err, result) => { if (err) reject(err); else resolve(result); }); }); let successMsg = `āœ… Successfully applied theme "${selectedTheme.name}"!\n`; successMsg += `šŸ†” Theme ID: ${selectedTheme.themeId}\n`; successMsg += `šŸŽØ Primary Color: ${selectedTheme.colors.fallback}`; const attachments = []; if (selectedTheme.images.background) { try { const stream = await global.utils.getStreamFromURL(selectedTheme.images.background); attachments.push(stream); } catch (imgErr) { console.log("Failed to load theme image:", imgErr); } } return message.reply(successMsg); } catch (error) { console.error("Theme setting error:", error); return message.reply(`āŒ Failed to set theme: ${error.message || error}`); } }, ST: async function ({ message, args, api, event }) { try { // Parse arguments for options let prompt = ""; let numThemes = 1; let imageUrl = null; for (let i = 0; i < args.length; i++) { if (args[i] === "--n" && i + 1 < args.length) { numThemes = parseInt(args[i + 1]) || 1; i++; // Skip next arg as it's the number } else if (args[i] === "--img" && i + 1 < args.length) { imageUrl = args[i + 1]; i++; // Skip next arg as it's the URL } else { prompt += args[i] + " "; } } prompt = prompt.trim(); if (!prompt) { return message.reply("āŒ Please provide a prompt for theme generation!\n\nUsage:\n• Basic: !metatheme beautiful tropical beach\n• Multiple: !metatheme beautiful beach --n 3\n• With image: !metatheme ocean --img https://example.com/image.jpg"); } // Limit number of themes numThemes = Math.min(Math.max(numThemes, 1), 5); message.reply(`šŸŽØ Generating ${numThemes} AI theme${numThemes > 1 ? 's' : ''} based on your prompt... Please wait!`); const options = { numThemes }; if (imageUrl) options.imageUrl = imageUrl; const result = await new Promise((resolve, reject) => { api.metaTheme(prompt, options, (err, data) => { if (err) reject(err); else resolve(data); }); }); if (result && result.success) { const themes = result.themes || [result]; const attachments = []; let response = `šŸŽØ AI Theme${themes.length > 1 ? 's' : ''} Generated Successfully!\n\n`; for (let i = 0; i < themes.length; i++) { const theme = themes[i]; response += `${i + 1}. šŸ“ Name: ${theme.name}\n`; response += ` šŸ†” ID: ${theme.themeId}\n`; response += ` šŸ“‹ Description: ${theme.description || "AI generated theme"}\n`; response += ` šŸŽØ Primary Color: ${theme.colors.fallback}\n`; if (theme.images.background) { response += ` šŸ–¼ļø Background Image: Available\n`; try { const stream = await global.utils.getStreamFromURL(theme.images.background); attachments.push(stream); } catch (imgErr) { console.log("Failed to load background image:", imgErr); } } response += `\n`; } response += `šŸ’” Reply with the serial number (1-${themes.length}) to set that theme\n`; response += `Example: Reply with "1" to set the first theme`; const replyMessage = await message.reply({ body: response, attachment: attachments.length > 0 ? attachments : undefined }); const currentUserId = event.senderID || event.userID || (event.from && event.from.id); const currentThreadId = event.threadID || event.threadId || (event.chat && event.chat.id); global.GoatBot.onReply.set(replyMessage.messageID, { commandName: module.exports.config.name, messageID: replyMessage.messageID, author: currentUserId, themes: themes, threadID: currentThreadId }); return replyMessage; } else { return message.reply("āŒ Failed to generate AI theme. Please try with a different prompt."); } } catch (error) { console.error("MetaTheme Error:", error); let errorMsg = "āŒ An error occurred while generating the theme."; if (error.error) { if (error.error.includes("not authorized") || error.error.includes("not support")) { errorMsg = "āŒ Your account does not support Meta AI theme generation. This feature may not be available for your account type."; } else if (error.error.includes("rate limit")) { errorMsg = "āŒ Rate limit exceeded. Please wait a moment before trying again."; } else { errorMsg = `āŒ ${error.error}`; } } return message.reply(errorMsg); } } };