// code from goatstore // api: https://store.agi.bd const { config } = global.GoatBot; const { client } = global; const { writeFileSync } = require("fs-extra"); module.exports = { config: { name: "whitelistthread", aliases: ["wlt"], version: "1.5", author: "NTKhang", countDown: 5, role: 0, description: { en: "Add, remove, edit whiteListThreadIds role" }, category: "Admin", guide: { en: ' {pn} [add | -a | +] [...]: Add whiteListThreadIds role for the current thread or specified thread IDs' + '\n {pn} [remove | -r | -] [...]: Remove whiteListThreadIds role from the current thread or specified thread IDs' + '\n {pn} [list | -l]: List all whiteListThreadIds' + '\n {pn} [mode | -m] : Turn on/off whiteListThreadIds mode' + '\n {pn} [mode | -m] noti : Turn on/off notification for non-whiteListThreadIds' } }, langs: { en: { added: `\nβ•­β”€βœ¦βœ… | π™°πšπšπšŽπš %1 πšπš‘πš›πšŽπšŠπš/𝚜\n%2`, alreadyAdmin: `β•­βœ¦βš οΈ | π™°πš•πš›πšŽπšŠπšπš’ 𝚊𝚍𝚍𝚎𝚍 %1 πšπš‘πš›πšŽπšŠπšπšœ\n%2\n`, missingAdd: "⚠️ | π™Ώπš•πšŽπšŠπšœπšŽ πšŽπš—πšπšŽπš› πšƒπ™Έπ™³ 𝚝𝚘 𝚊𝚍𝚍 πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπš πš›πš˜πš•πšŽ", removed: `\nβ•­βœ¦βœ… | πšπšŽπš–πš˜πšŸπšŽπš %1 πšπš‘πš›πšŽπšŠπš/𝚜\n%2`, notAdmin: `β•­βœ¦βŽ | π™³πš’πšπš—'𝚝 𝚊𝚍𝚍𝚎𝚍 %1 πšπš‘πš›πšŽπšŠπš/𝚜\n%2\n`, missingIdRemove: "⚠️ | π™Ώπš•πšŽπšŠπšœπšŽ πšŽπš—πšπšŽπš› πšƒπ™Έπ™³ 𝚝𝚘 πš›πšŽπš–πš˜πšŸπšŽ πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπš πš›πš˜πš•πšŽ", listAdmin: `β•­βœ¦βœ¨ | π™»πš’πšœπš 𝚘𝚏 πšƒπš‘πš›πšŽπšŠπšπ™Έπšπšœ\n%1\n╰─────────────────⧕`, turnedOn: "βœ… | πšƒπšžπš›πš—πšŽπš πš˜πš— πšπš‘πšŽ πš–πš˜πšπšŽ πš˜πš—πš•πš’ πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπšπ™Έπšπšœ πšŒπšŠπš— 𝚞𝚜𝚎 πš‹πš˜πš", turnedOff: "❎ | πšƒπšžπš›πš—πšŽπš 𝚘𝚏𝚏 πšπš‘πšŽ πš–πš˜πšπšŽ πš˜πš—πš•πš’ πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπšπ™Έπšπšœ πšŒπšŠπš— 𝚞𝚜𝚎 πš‹πš˜πš", turnedOnNoti: "βœ… | πšƒπšžπš›πš—πšŽπš πš˜πš— πšπš‘πšŽ πš—πš˜πšπš’πšπš’πšŒπšŠπšπš’πš˜πš— πš πš‘πšŽπš— πšπš‘πš›πšŽπšŠπš πš’πšœ πš—πš˜πš πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπšπ™Έπšπšœ", turnedOffNoti: "❎ | πšƒπšžπš›πš—πšŽπš 𝚘𝚏𝚏 πšπš‘πšŽ πš—πš˜πšπš’πšπš’πšŒπšŠπšπš’πš˜πš— πš πš‘πšŽπš— πšπš‘πš›πšŽπšŠπš πš’πšœ πš—πš˜πš πš πš‘πš’πšπšŽπ™»πš’πšœπšπšƒπš‘πš›πšŽπšŠπšπ™Έπšπšœ" } }, onStart: async function ({ message, args, event, getLang, api }) { switch (args[0]) { case "add": case "-a": case "+": { let tids = args.slice(1).filter(arg => !isNaN(arg)); if (tids.length <= 0) tids.push(event.threadID); const notAdminIds = [], alreadyAdded = []; for (const tid of tids) { if (config.whiteListModeThread.whiteListThreadIds.includes(tid)) alreadyAdded.push(tid); else notAdminIds.push(tid); } config.whiteListModeThread.whiteListThreadIds.push(...notAdminIds); const getNames = await Promise.all(tids.map(async tid => { const info = await api.getThreadInfo(tid) || {}; return { tid, name: info.threadName || "Not found" }; })); writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2)); return message.reply( (notAdminIds.length > 0 ? getLang("added", notAdminIds.length, getNames.filter(({ tid }) => notAdminIds.includes(tid)) .map(({ tid, name }) => `β”œβ€£ πšƒπ™·πšπ™΄π™°π™³ 𝙽𝙰𝙼𝙴: ${name}\nβ•°β€£ πšƒπ™·πšπ™΄π™°π™³ 𝙸𝙳: ${tid}`).join("\n")) : "") + (alreadyAdded.length > 0 ? getLang("alreadyAdmin", alreadyAdded.length, alreadyAdded.map(tid => `β•°β€£ πšƒπ™·πšπ™΄π™°π™³ 𝙸𝙳: ${tid}`).join("\n")) : "") ); } case "remove": case "rm": case "-r": case "-": { let tids = args.slice(1).filter(arg => !isNaN(arg)); if (tids.length <= 0) tids.push(event.threadID); const removed = [], notFound = []; for (const tid of tids) { if (config.whiteListModeThread.whiteListThreadIds.includes(tid)) removed.push(tid); else notFound.push(tid); } for (const tid of removed) config.whiteListModeThread.whiteListThreadIds.splice( config.whiteListModeThread.whiteListThreadIds.indexOf(tid), 1); const getNames = await Promise.all(removed.map(async tid => { const info = await api.getThreadInfo(tid) || {}; return { tid, name: info.threadName || "Not found" }; })); writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2)); return message.reply( (removed.length > 0 ? getLang("removed", removed.length, getNames.map(({ tid, name }) => `β”œβ€£ πšƒπ™·πšπ™΄π™°π™³ 𝙽𝙰𝙼𝙴: ${name}\nβ•°β€£ πšƒπ™·πšπ™΄π™°π™³ 𝙸𝙳: ${tid}`).join("\n")) : "") + (notFound.length > 0 ? getLang("notAdmin", notFound.length, notFound.map(tid => `β•°β€£ πšƒπ™·πšπ™΄π™°π™³ 𝙸𝙳: ${tid}`).join("\n")) : "") ); } case "list": case "-l": { const getNames = await Promise.all(config.whiteListModeThread.whiteListThreadIds.map(async tid => { const info = await api.getThreadInfo(tid) || {}; return { tid, name: info.threadName || "Unfetched" }; })); return message.reply(getLang("listAdmin", getNames.map(({ tid, name }) => `β”œβ€£ πšƒπ™·πšπ™΄π™°π™³ 𝙽𝙰𝙼𝙴: ${name}\nβ”œβ€£ πšƒπ™·πšπ™΄π™°π™³ 𝙸𝙳: ${tid}`).join("\n"))); } case "mode": case "m": case "-m": { let isSetNoti = false; let index = 1; if (args[1] === "noti") { isSetNoti = true; index = 2; } const value = args[index] === "on" ? true : args[index] === "off" ? false : null; if (value === null) return message.reply("⚠️ | Please specify 'on' or 'off'."); if (isSetNoti) { config.hideNotiMessage.whiteListModeThread = !value; message.reply(getLang(value ? "turnedOnNoti" : "turnedOffNoti")); } else { config.whiteListModeThread.enable = value; message.reply(getLang(value ? "turnedOn" : "turnedOff")); } writeFileSync(client.dirConfig, JSON.stringify(config, null, 2)); break; } default: return message.reply(getLang("missingAdd")); } } };