歡迎蒞臨

歡迎蒞臨是一個微軟 Edge 瀏覽器的擴充功能,能自動允許使用者加入 Google Meet 會議。

// ==UserScript==
// @name                Welcome
// @name:zh-TW          歡迎蒞臨
// @name:zh-CN          歡迎蒞臨
// @namespace           veringsek
// @match               http://meet.google.com/*
// @match               https://meet.google.com/*
// @grant               none
// @version             0.0.6
// @author              veringsek
// @description         Welcome is a Microsoft Edge Extension to automatically accept when people request to join your Google Meet meeting.
// @description:zh-TW   歡迎蒞臨是一個微軟 Edge 瀏覽器的擴充功能,能自動允許使用者加入 Google Meet 會議。
// @description:zh-CN   歡迎蒞臨是一個微軟 Edge 瀏覽器的擴充功能,能自動允許使用者加入 Google Meet 會議。
// ==/UserScript==

function ScanningProcess(actions) {
    this.actions = actions;
    this.stage = 0;
    this.runner = null;
}
ScanningProcess.prototype.run = function () {
    if (this.stage >= this.actions.length) return false;
    let action = this.actions[this.stage];
    this.runner = setInterval(() => {
        if (action.func()) {
            clearInterval(this.runner);
            this.stage += 1;
            this.run();
        }
    }, action.duration);
    return true;
};

function toggleWelcome(welcome) {
    if (welcome === undefined) {
        globalThis.welcome = !globalThis.welcome;
    } else {
        globalThis.welcome = welcome;
    }
    let icnWelcome = document.getElementById('icnWelcome');
    let btnWelcome = document.getElementById('btnWelcome');
    let tipWelcome = document.getElementById('tipWelcome');
    if (globalThis.welcome) {
        console.log(`Welcome is on.`);
        document.getElementById('svgWelcomeOn').style.display = '';
        document.getElementById('svgWelcomeOff').style.display = 'none';
        btnWelcome.style.background = ``;
        tipWelcome.innerHTML = 'Everyone is welcomed to this meeting now.';
    } else {
        console.log(`Welcome is off.`);
        document.getElementById('svgWelcomeOff').style.display = '';
        document.getElementById('svgWelcomeOn').style.display = 'none';
        btnWelcome.style.background = `#ea4335`;
        tipWelcome.innerText = 'Permission is needed to join this meeting.';
    }
}

const DIV_BUTTONS = 'R5ccN';
const TARGET = 3;

globalThis.sp = new ScanningProcess([{
    func: function () {
        let divButtons;
        try {
            divButtons = document.getElementsByClassName(DIV_BUTTONS)[0];

            let divWelcome = divButtons.children[TARGET].cloneNode(true);
            let btnWelcome = divWelcome.getElementsByTagName('button')[0];
            btnWelcome.id = 'btnWelcome';
            btnWelcome.addEventListener('click', ev => toggleWelcome());
            btnWelcome.setAttribute('data-tooltip-id', 'tipWelcome');

            let icnGoogleMaterial = divWelcome.getElementsByTagName('i')[0];
            icnGoogleMaterial.style.display = 'none';

            let icnWelcome = document.createElement('span');
            icnWelcome.id = 'icnWelcome';

            let svgWelcomeOff = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
            svgWelcomeOff.id = 'svgWelcomeOff';
            svgWelcomeOff.style.display = 'none';
            svgWelcomeOff.setAttribute('viewBox', '0 0 576 512');
            let pathWelcomeOff = document.createElementNS('http://www.w3.org/2000/svg', 'path');
            pathWelcomeOff.setAttribute('d', `M560 448H480V50.75C480 22.75 458.5 0 432 0h-288C117.5 0 96 22.75 96 50.75V448H16C7.125 448 0 455.1 0 464v32C0 504.9 7.125 512 16 512h544c8.875 0 16-7.125 16-16v-32C576 455.1 568.9 448 560 448zM384 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S401.6 288 384 288z`);
            svgWelcomeOff.appendChild(pathWelcomeOff);
            icnWelcome.appendChild(svgWelcomeOff);

            let svgWelcomeOn = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
            svgWelcomeOn.id = 'svgWelcomeOn';
            svgWelcomeOn.style.display = 'none';
            svgWelcomeOn.setAttribute('viewBox', '0 0 576 512');
            let pathWelcomeOn = document.createElementNS('http://www.w3.org/2000/svg', 'path');
            pathWelcomeOn.setAttribute('d', `M560 448H512V113.5c0-27.25-21.5-49.5-48-49.5L352 64.01V128h96V512h112c8.875 0 16-7.125 16-15.1v-31.1C576 455.1 568.9 448 560 448zM280.3 1.007l-192 49.75C73.1 54.51 64 67.76 64 82.88V448H16c-8.875 0-16 7.125-16 15.1v31.1C0 504.9 7.125 512 16 512H320V33.13C320 11.63 300.5-4.243 280.3 1.007zM232 288c-13.25 0-24-14.37-24-31.1c0-17.62 10.75-31.1 24-31.1S256 238.4 256 256C256 273.6 245.3 288 232 288z`);
            svgWelcomeOn.appendChild(pathWelcomeOn);
            icnWelcome.appendChild(svgWelcomeOn);

            let tipWelcome = divWelcome.querySelector('*[role=tooltip]');
            tipWelcome.id = 'tipWelcome';

            icnGoogleMaterial.parentElement.insertBefore(icnWelcome, icnGoogleMaterial);

            divButtons.insertBefore(divWelcome, divButtons.children[TARGET]);

            toggleWelcome(false);
            return true;
        } catch (error) {
            console.log(error);
            return false;
        }
    },
    duration: 1000
}, {
    func: function () {
        if (!globalThis.welcome) return false;
        try {
            let btnAccept = document.querySelector('*[role=dialog]')?.getElementsByTagName('button')[1];
            if (btnAccept.getAttribute('data-mdc-dialog-action') === 'accept') {
                btnAccept.click();
            }
        } catch {
            return false;
        }
    },
    duration: 500
}]);
globalThis.sp.run();