const { getTime, drive } = global.utils; if (!global.temp.welcomeEvent) global.temp.welcomeEvent = {}; module.exports = { config: { name: "welcome", version: "2.0", author: "BaYjid", category: "events" }, langs: { vi: { session1: "โ˜€ ๐—ฆ๐—ฎฬ๐—ป๐—ด", session2: "โ›… ๐—ง๐—ฟ๐˜‚ฬ›๐—ฎ", session3: "๐ŸŒ† ๐—–๐—ต๐—ถ๐—ฒฬ‚ฬ€๐˜‚", session4: "๐ŸŒ™ ๐—ง๐—ผฬ‚ฬ๐—ถ", welcomeMessage: "โœจ ๐—–๐—ฎฬ‰๐—บ ๐—ผฬ›๐—ป ๐—ฏ๐—ฎฬฃ๐—ป ๐—ฑ๐—ฎฬƒ ๐—บ๐—ผฬ›ฬ€๐—ถ ๐˜๐—ผฬ‚๐—ถ ๐˜ƒ๐—ฎฬ€๐—ผ ๐—ป๐—ต๐—ผฬ๐—บ!\nโšก ๐—ฃ๐—ฟ๐—ฒ๐—ณ๐—ถ๐˜… ๐—ฏ๐—ผ๐˜: %1\n๐Ÿ”Ž ฤ๐—ฒฬ‚ฬ‰ ๐˜…๐—ฒ๐—บ ๐—ฑ๐—ฎ๐—ป๐—ต ๐˜€๐—ฎฬ๐—ฐ๐—ต ๐—น๐—ฒฬ‚ฬฃ๐—ป๐—ต ๐—ต๐—ฎฬƒ๐˜† ๐—ป๐—ต๐—ฎฬฃฬ‚๐—ฝ: %1help", multiple1: "๐Ÿ”น ๐—•๐—ฎฬฃ๐—ป", multiple2: "๐Ÿ”น ๐—–๐—ฎฬ๐—ฐ ๐—ฏ๐—ฎฬฃ๐—ป", defaultWelcomeMessage: "๐ŸŽ‰ ๐—–๐—ต๐—ฎฬ€๐—ผ ๐—บ๐˜‚ฬ›ฬ€๐—ป๐—ด {userName} ๐ŸŽŠ\n\n๐Ÿš€ ๐—–๐—ต๐—ฎฬ€๐—ผ ๐—บ๐˜‚ฬ›ฬ€๐—ป๐—ด ๐—ฏ๐—ฎฬฃ๐—ป ๐—ฑ๐—ฒฬ‚ฬ๐—ป ๐˜ƒ๐—ผฬ›ฬ๐—ถ ใ€Ž {boxName} ใ€\n๐Ÿ”น ๐—–๐—ต๐˜‚ฬ๐—ฐ ๐—ฏ๐—ฎฬฃ๐—ป ๐—ฐ๐—ผฬ ๐—ฏ๐˜‚๐—ผฬ‚ฬ‰๐—ถ {session} ๐˜ƒ๐˜‚๐—ถ ๐˜ƒ๐—ฒฬ‰! โœจ" }, en: { session1: "โ˜€ ๐“œ๐“ธ๐“ป๐“ท๐“ฒ๐“ท๐“ฐ", session2: "โ›… ๐“๐“ธ๐“ธ๐“ท", session3: "๐ŸŒ† ๐“๐“ฏ๐“ฝ๐“ฎ๐“ป๐“ท๐“ธ๐“ธ๐“ท", session4: "๐ŸŒ™ ๐“”๐“ฟ๐“ฎ๐“ท๐“ฒ๐“ท๐“ฐ", welcomeMessage: "-`แƒฆยด๐Ÿš€ ๐—ง๐—ต๐—ฎ๐—ป๐—ธ ๐˜†๐—ผ๐˜‚ ๐—ณ๐—ผ๐—ฟ ๐—ถ๐—ป๐˜ƒ๐—ถ๐˜๐—ถ๐—ป๐—ด ๐—บ๐—ฒ!\nโšก ๐—•๐—ผ๐˜ ๐—ฃ๐—ฟ๐—ฒ๐—ณ๐—ถ๐˜…: %1\n๐Ÿ”Ž ๐—ง๐—ผ ๐—ฐ๐—ต๐—ฒ๐—ฐ๐—ธ ๐—ฎ๐—น๐—น ๐—ฐ๐—ผ๐—บ๐—บ๐—ฎ๐—ป๐—ฑ๐˜€, ๐˜๐˜†๐—ฝ๐—ฒ: %1help\n\nโœจ ๐—›๐—ฎ๐˜ƒ๐—ฒ ๐—ฎ ๐—ด๐—ฟ๐—ฒ๐—ฎ๐˜ ๐˜๐—ถ๐—บ๐—ฒ! โœจ", multiple1: "๐Ÿ”น ๐–ธ๐—ˆ๐—Ž", multiple2: "๐Ÿ”น ๐–ธ๐—ˆ๐—Ž ๐–ฆ๐—Ž๐—’๐—Œ", defaultWelcomeMessage: "๐ŸŽ‰ ใ€Ž ๐—ช๐—˜๐—Ÿ๐—–๐—ข๐— ๐—˜ ใ€ ๐ŸŽ‰\n\n๐Ÿ’  ๐—›๐—ฒ๐˜† {userName}!\n๐Ÿ”น ๐—ฌ๐—ผ๐˜‚ ๐—ท๐˜‚๐˜€๐˜ ๐—ท๐—ผ๐—ถ๐—ป๐—ฒ๐—ฑ ใ€Ž {boxName} ใ€\nโณ ๐—ง๐—ถ๐—บ๐—ฒ ๐—ณ๐—ผ๐—ฟ ๐˜€๐—ผ๐—บ๐—ฒ ๐—ณ๐˜‚๐—ป! ๐—›๐—ฎ๐˜ƒ๐—ฒ ๐—ฎ ๐—ณ๐—ฎ๐—ป๐˜๐—ฎ๐˜€๐˜๐—ถ๐—ฐ {session} ๐ŸŽŠ\n\nโš  ๐—ฃ๐—น๐—ฒ๐—ฎ๐˜€๐—ฒ ๐—ณ๐—ผ๐—น๐—น๐—ผ๐˜„ ๐—ฎ๐—น๐—น ๐—ด๐—ฟ๐—ผ๐˜‚๐—ฝ ๐—ฟ๐˜‚๐—น๐—ฒ๐˜€! ๐Ÿš€\n\n๐Ÿ‘ค ๐—”๐—ฑ๐—ฑ๐—ฒ๐—ฑ ๐—ฏ๐˜†: {adderName}" } }, onStart: async ({ threadsData, message, event, api, getLang }) => { if (event.logMessageType !== "log:subscribe") return; const { threadID, logMessageData } = event; const { addedParticipants } = logMessageData; const hours = getTime("HH"); const prefix = global.utils.getPrefix(threadID); const nickNameBot = global.GoatBot.config.nickNameBot; if (addedParticipants.some(user => user.userFbId === api.getCurrentUserID())) { if (nickNameBot) api.changeNickname(nickNameBot, threadID, api.getCurrentUserID()); return message.send(getLang("welcomeMessage", prefix)); } if (!global.temp.welcomeEvent[threadID]) { global.temp.welcomeEvent[threadID] = { joinTimeout: null, dataAddedParticipants: [] }; } global.temp.welcomeEvent[threadID].dataAddedParticipants.push(...addedParticipants); clearTimeout(global.temp.welcomeEvent[threadID].joinTimeout); global.temp.welcomeEvent[threadID].joinTimeout = setTimeout(async () => { const threadData = await threadsData.get(threadID); if (threadData.settings.sendWelcomeMessage === false) return; const dataAddedParticipants = global.temp.welcomeEvent[threadID].dataAddedParticipants; const bannedUsers = threadData.data.banned_ban || []; const threadName = threadData.threadName; let newMembers = [], mentions = []; let isMultiple = dataAddedParticipants.length > 1; for (const user of dataAddedParticipants) { if (bannedUsers.some(banned => banned.id === user.userFbId)) continue; newMembers.push(user.fullName); mentions.push({ tag: user.fullName, id: user.userFbId }); } if (newMembers.length === 0) return; // Get info of the adder const adderID = event.author; const adderInfo = await api.getUserInfo(adderID); const adderName = adderInfo[adderID]?.name || "Someone"; mentions.push({ tag: adderName, id: adderID }); let welcomeMessage = threadData.data.welcomeMessage || getLang("defaultWelcomeMessage"); welcomeMessage = welcomeMessage .replace(/\{userName\}|\{userNameTag\}/g, newMembers.join(", ")) .replace(/\{boxName\}|\{threadName\}/g, threadName) .replace(/\{multiple\}/g, isMultiple ? getLang("multiple2") : getLang("multiple1")) .replace(/\{session\}/g, hours <= 10 ? getLang("session1") : hours <= 12 ? getLang("session2") : hours <= 18 ? getLang("session3") : getLang("session4") ) .replace(/\{adderName\}/g, adderName); let form = { body: welcomeMessage, mentions: mentions }; if (threadData.data.welcomeAttachment) { const files = threadData.data.welcomeAttachment; const attachments = files.map(file => drive.getFile(file, "stream")); form.attachment = (await Promise.allSettled(attachments)) .filter(({ status }) => status === "fulfilled") .map(({ value }) => value); } message.send(form); delete global.temp.welcomeEvent[threadID]; }, 1500); } };