// code from goatstore // api: https://store.agi.bd const fs = require("fs-extra"); const moment = require("moment-timezone"); const path = require("path"); const iconPath = path.join(__dirname, "emoji.json"); if (!fs.existsSync(iconPath)) { fs.writeFileSync(iconPath, JSON.stringify({})); } module.exports = { config: { name: "update", version: "1.2.0", author: "rX (GoatBot V2)", category: "events" }, onStart: async function ({ api, event, threadsData, usersData, message }) { const { threadID, logMessageType, logMessageData = {}, author } = event; // E2EE skip if (typeof threadID === "string" && threadID.includes("@")) return; // শুধু নির্দিষ্ট ইভেন্টগুলোতে কাজ করবে const allowedEvents = [ "log:thread-admins", "log:thread-name", "log:user-nickname", "log:thread-icon", "log:thread-color" ]; if (!allowedEvents.includes(logMessageType)) return; return async function () { try { const threadData = await threadsData.get(threadID); if (!threadData) return; // adminUpdate অফ থাকলে স্কিপ if (threadData.data?.adminUpdate === false) return; const getName = async (uid) => { try { const name = await usersData.getName(uid); return name || "Unknown"; } catch { return "Unknown"; } }; const time = moment.tz("Asia/Dhaka").format("DD/MM/YYYY • HH:mm:ss"); const send = (msg) => { message.send(msg).catch(() => { api.sendMessage(msg, threadID); }); }; // ========== ADMIN ========== if (logMessageType === "log:thread-admins") { const { ADMIN_EVENT, TARGET_ID } = logMessageData; const authorName = await getName(author); const targetName = await getName(TARGET_ID); // Admin list আপডেট try { const info = await api.getThreadInfo(threadID); if (info?.adminIDs) { const adminIDs = info.adminIDs.map(item => item.id || item); await threadsData.set(threadID, adminIDs, "adminIDs"); } } catch (e) {} if (ADMIN_EVENT === "add_admin") { send( `👑 𝗡𝗲𝘄 𝗔𝗱𝗺𝗶𝗻\n` + `➤ ${targetName} কে অ্যাডমিন বানানো হয়েছে\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } else if (ADMIN_EVENT === "remove_admin") { send( `❌ 𝗔𝗱𝗺𝗶𝗻 𝗥𝗲𝗺𝗼𝘃𝗲𝗱\n` + `➤ ${targetName} কে অ্যাডমিন থেকে সরানো হয়েছে\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } } // ========== GROUP NAME ========== else if (logMessageType === "log:thread-name") { const newName = logMessageData.name || "Unnamed"; const authorName = await getName(author); await threadsData.set(threadID, { threadName: newName }); send( `📝 𝗚𝗿𝗼𝘂𝗽 𝗡𝗮𝗺𝗲 𝗖𝗵𝗮𝗻𝗴𝗲𝗱\n` + `➤ New Name: ${newName}\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } // ========== NICKNAME ========== else if (logMessageType === "log:user-nickname") { const { participant_id, nickname } = logMessageData; const authorName = await getName(author); const targetName = await getName(participant_id); const newNick = nickname || "Removed"; send( `✏️ 𝗡𝗶𝗰𝗸𝗻𝗮𝗺𝗲 𝗖𝗵𝗮𝗻𝗴𝗲𝗱\n` + `➤ User: ${targetName}\n` + `➤ Nickname: ${newNick}\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } // ========== EMOJI / ICON ========== else if (logMessageType === "log:thread-icon") { const authorName = await getName(author); const newIcon = logMessageData.thread_icon || logMessageData.emoji || "❓"; // Save emoji const emojiData = JSON.parse(fs.readFileSync(iconPath, "utf8") || "{}"); emojiData[threadID] = newIcon; fs.writeFileSync(iconPath, JSON.stringify(emojiData, null, 2)); await threadsData.set(threadID, newIcon, "data.emoji"); send( `😀 𝗚𝗿𝗼𝘂𝗽 𝗘𝗺𝗼𝗷𝗶 𝗖𝗵𝗮𝗻𝗴𝗲𝗱\n` + `➤ New Emoji: ${newIcon}\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } // ========== COLOR / THEME ========== else if (logMessageType === "log:thread-color") { const authorName = await getName(author); const newColor = logMessageData.theme_color || logMessageData.color_id || "Unknown"; await threadsData.set(threadID, newColor, "data.threadThemeID"); send( `🎨 𝗧𝗵𝗲𝗺𝗲 𝗖𝗼𝗹𝗼𝗿 𝗖𝗵𝗮𝗻𝗴𝗲𝗱\n` + `➤ New Color: ${newColor}\n` + `➤ By: ${authorName}\n` + `🕒 ${time}` ); } } catch (err) { console.error("[update event]", err); } }; } };