歡迎蒞臨

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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();