← back to browse
mirai command

welcome

No description

0
views
0
likes
0
installs
raw source
const { getTime, drive } = global.utils;

module.exports = {
        config: {
                name: "welcome",
                version: "1.4",
                author: "NTKhang",
                category: "events"
        },

        langs: {
                vi: {
                        session1: "sáng",
                        session2: "trưa",
                        session3: "chiều",
                        session4: "tối",
                        multiple1: "bạn",
                        multiple2: "các bạn",
                        welcomeMessage: "Cảm ơn bạn đã thêm mình vào nhóm!\nPrefix của bot: %1\nĐể xem danh sách lệnh, vui lòng nhập: %1help",
                        defaultWelcomeMessage: "Chào mừng {userNameTag} đã đến với {boxName}! Chúc {multiple} một buổi {session} vui vẻ 🎉"
                },
                en: {
                        session1: "morning",
                        session2: "noon",
                        session3: "afternoon",
                        session4: "evening",
                        multiple1: "you",
                        multiple2: "you guys",
                        welcomeMessage: "Thanks for adding me to the group.\nBot prefix: %1\nUse %1help to see the available commands.",
                        defaultWelcomeMessage: "Welcome {userNameTag} to {boxName}! Wishing you a great {session} 🎉"
                }
        },

        onStart: async ({ threadsData, message, event, api, getLang, client }) => {
                if (event.logMessageType !== "log:subscribe")
                        return;

                return async function () {
                        const { threadID } = event;
                        const { addedParticipants } = event.logMessageData;
                        if (!addedParticipants || addedParticipants.length === 0)
                                return;

                        let threadData;
                        try {
                                threadData = await threadsData.get(threadID);
                        } catch (e) {
                                return;
                        }

                        if (!threadData?.settings?.sendWelcomeMessage)
                                return;

                        const botID = api.getCurrentUserID();

                        // ── Case 1: Bot itself was added to the group ──
                        if (addedParticipants.some(item => item.userFbId == botID)) {
                                const prefix = global.utils.getPrefix(threadID);
                                return message.send(getLang("welcomeMessage", prefix));
                        }

                        // ── Case 2: Regular member(s) joined ──

                        const hours = +getTime("HH");
                        const session =
                                hours < 10 ? getLang("session1") :
                                hours < 12 ? getLang("session2") :
                                hours < 18 ? getLang("session3") :
                                             getLang("session4");

                        const isMultiple = addedParticipants.length > 1;
                        const multiple = isMultiple ? getLang("multiple2") : getLang("multiple1");
                        const threadName = threadData.threadName;

                        let { welcomeMessage = getLang("defaultWelcomeMessage") } = threadData.data;

                        const namesList = addedParticipants.map(u => u.fullName).join(", ");
                        const firstName = addedParticipants[0].fullName;
                        const mentions = addedParticipants.map(u => ({ tag: u.fullName, id: u.userFbId }));

                        welcomeMessage = welcomeMessage
                                .replace(/\{userName\}/g, isMultiple ? namesList : firstName)
                                .replace(/\{userNameTag\}/g, isMultiple ? namesList : firstName)
                                .replace(/\{multiple\}/g, multiple)
                                .replace(/\{boxName\}|\{threadName\}/g, threadName)
                                .replace(/\{session\}/g, session);

                        const form = { body: welcomeMessage, mentions };

                        if (threadData.data.welcomeAttachment && threadData.data.welcomeAttachment.length > 0) {
                                const streams = threadData.data.welcomeAttachment.map(fileId =>
                                        drive.getFile(fileId, "stream")
                                );
                                const settled = await Promise.allSettled(streams);
                                form.attachment = settled
                                        .filter(({ status }) => status === "fulfilled")
                                        .map(({ value }) => value);
                        }

                        message.send(form);
                };
        }
};

View raw file