const { writeFileSync } = require("fs-extra"); const { config } = global.GoatBot; const { client } = global; module.exports = { config: { name: "whitelists", version: "1.5", author: "NTKhang", countDown: 5, role: 1, description: { en: "Add, remove, edit whiteListIds role" }, category: "Admin", guide: { en: ' {pn} [add | -a] : Add whiteListIds role for user' + '\n {pn} [remove | -r] : Remove whiteListIds role of user' + '\n {pn} [list | -l]: List all whiteListIds' + " {pn} -m [on | off]: turn on/off the mode only whitelistIds can use bot" + "\n {pn} -m noti [on | off]: turn on/off the notification when user is not whitelistIds use bot" } }, langs: { en: { added: `β•­βœ¦βœ… | π™°πšπšπšŽπš %1 πšžπšœπšŽπš›/𝚜\n%2`, alreadyAdmin: `\nβ•­βœ¦βš οΈ | π™°πš•πš›πšŽπšŠπšπš’ 𝚊𝚍𝚍𝚎d %1 πšžπšœπšŽπš›πšœ\n%2`, missingAdd: "⚠️ | π™Ώπš•πšŽπšŠπšœπšŽ πšŽπš—πšπšŽπš› πš„π™Έπ™³ 𝚝𝚘 𝚊𝚍𝚍 πš πš‘πš’πšπšŽπ™»πš’πšœπš πš›πš˜πš•πšŽ", removed: `β•­βœ¦βœ… | πšπšŽπš–πš˜πšŸπšŽπš %1 πšžπšœπšŽπš›πšœ\n%2`, notAdmin: `β•­βœ¦βš οΈ | π™³πš’πšπš—'𝚝 𝚊𝚍𝚍𝚎𝚍 %1 πšžπšœπšŽπš›πšœ\n%2`, missingIdRemove: "⚠️ | π™Ώπš•πšŽπšŠπšœπšŽ πšŽπš—πšπšŽπš› πš„π™Έπ™³ 𝚝𝚘 πš›πšŽπš–πš˜πšŸπšŽ πš πš‘πš’πšπšŽπ™»πš’πšœπš πš›πš˜πš•πšŽ", listAdmin: `β•­βœ¦βœ¨ | π™»πš’πšœπš 𝚘𝚏 πš„πšœπšŽπš›π™Έπ™³s\n%1\n╰───────────────────⧕`, turnedOn: "βœ… | πšƒπšžπš›πš—πšŽπš πš˜πš— πšπš‘πšŽ πš–πš˜πšπšŽ πš˜πš—πš•πš’ πš πš‘πš’πšπšŽπš•πš’πšœπšπ™Έπšπšœ πšŒπšŠπš— 𝚞𝚜𝚎 πš‹πš˜πš", turnedOff: "❎ | πšƒπšžπš›πš—πšŽπš 𝚘𝚏𝚏 πšπš‘πšŽ πš–πš˜πšπšŽ πš˜πš—πš•πš’ πš πš‘πš’πšπšŽπš•πš’πšœπšπ™Έπšπšœ πšŒπšŠπš— 𝚞𝚜𝚎 πš‹πš˜πš", turnedOnNoti: "βœ… | πšƒπšžπš›πš—πšŽπš πš˜πš— πšπš‘πšŽ πš—πš˜πšπš’πšπš’πšŒπšŠπšπš’πš˜πš— πš πš‘πšŽπš— πšžπšœπšŽπš› πš’πšœ πš—πš˜πš πš πš‘πš’πšπšŽπš•πš’πšœπšπ™Έπšπšœ 𝚞𝚜𝚎 πš‹πš˜πš", turnedOffNoti: "❎ | πšƒπšžπš›πš—πšŽπš 𝚘𝚏𝚏 πšπš‘πšŽ πš—πš˜πšπš’πšπš’πšŒπšŠπšπš’πš˜πš— πš πš‘πšŽπš— πšžπšœπšŽπš› πš’πšœ πš—πš˜πš πš πš‘πš’πšπšŽπš•πš’πšœπšπ™Έπšπšœ 𝚞𝚜𝚎 πš‹πš˜πš" } }, onStart: async function ({ message, args, usersData, event, getLang, api }) { const permission = global.GoatBot.config.adminBot; if (!permission.includes(event.senderID)) { api.sendMessage(args.join(" "), event.threadID, event.messageID); return; } switch (args[0]) { case "add": case "-a": case "+": { if (args[1]) { let uids = []; if (Object.keys(event.mentions).length > 0) uids = Object.keys(event.mentions); else if (event.messageReply) uids.push(event.messageReply.senderID); else uids = args.filter(arg => !isNaN(arg)); const notAdminIds = []; const authorIds = []; for (const uid of uids) { if (config.whiteListMode.whiteListIds.includes(uid)) authorIds.push(uid); else notAdminIds.push(uid); } config.whiteListMode.whiteListIds.push(...notAdminIds); const getNames = await Promise.all(uids.map(uid => usersData.getName(uid).then(name => ({ uid, name })))); writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2)); return message.reply( (notAdminIds.length > 0 ? getLang("added", notAdminIds.length, getNames.map(({ uid, name }) => `β”œβ€£ πš„πš‚π™΄πš 𝙽𝙰𝙼𝙴: ${name}\nβ”œβ€£ πš„πš‚π™΄πš 𝙸𝙳: ${uid}`).join("\n")) : "") + (authorIds.length > 0 ? getLang("alreadyAdmin", authorIds.length, authorIds.map(uid => `β”œβ€£ πš„πš‚π™΄πš 𝙸𝙳: ${uid}`).join("\n")) : "") ); } else return message.reply(getLang("missingIdAdd")); } case "remove": case "rm": case "-r": case "-": { if (args[1]) { let uids = []; if (Object.keys(event.mentions).length > 0) uids = Object.keys(event.mentions)[0]; else uids = args.filter(arg => !isNaN(arg)) || event.messageReply.senderID; const notAdminIds = []; const authorIds = []; for (const uid of uids) { if (config.whiteListMode.whiteListIds.includes(uid)) authorIds.push(uid); else notAdminIds.push(uid); } for (const uid of authorIds) config.whiteListMode.whiteListIds.splice(config.whiteListMode.whiteListIds.indexOf(uid), 1); const getNames = await Promise.all(authorIds.map(uid => usersData.getName(uid).then(name => ({ uid, name })))); writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2)); return message.reply( (authorIds.length > 0 ? getLang("removed", authorIds.length, getNames.map(({ uid, name }) => `β”œβ€£ πš„πš‚π™΄πš 𝙽𝙰𝙼𝙴: ${name}\nβ”œβ€£ πš„πš‚π™΄πš 𝙸𝙳: ${uid}`).join("\n")) : "") + (notAdminIds.length > 0 ? getLang("notAdmin", notAdminIds.length, notAdminIds.map(uid => `β”œβ€£ πš„πš‚π™΄πš 𝙸𝙳: ${uid}`).join("\nβ”œ\n")) : "") ); } else return message.reply(getLang("missingIdRemove")); } case "list": case "-l": { const getNames = await Promise.all(config.whiteListMode.whiteListIds.map(uid => usersData.getName(uid).then(name => ({ uid, name })))); return message.reply(getLang("listAdmin", getNames.map(({ uid, name }) => `β”œβ€£ πš„πš‚π™΄πš 𝙽𝙰𝙼𝙴: ${name}\nβ”œβ€£ πš„πš‚π™΄πš 𝙸𝙳: ${uid}`).join("\n"))); } case "m": case "mode": case "-m": { let isSetNoti = false; let value; let indexGetVal = 1; if (args[1] == "noti") { isSetNoti = true; indexGetVal = 2; } if (args[indexGetVal] == "on") value = true; else if (args[indexGetVal] == "off") value = false; if (isSetNoti) { config.hideNotiMessage.whiteListMode = !value; message.reply(getLang(value ? "turnedOnNoti" : "turnedOffNoti")); } else { config.whiteListMode.enable = value; message.reply(getLang(value ? "turnedOn" : "turnedOff")); } writeFileSync(client.dirConfig, JSON.stringify(config, null, 2)); } default: } } };