// ==UserScript== // @name Google Meet Helper Improved // @namespace https://04d.co/ // @match https://meet.google.com/* // @grant none // @version 1.3 // @author 04dco // @description Reload if necesarry, disable video, auto mute and auto join in that order. Also switches account (defaults to primary). Original by Vanshaj Girotra. // @run-at document-start // ==/UserScript== // This script may have severe race condition issues. // Play with the delay to make it work well on your machine. // Settings const DISABLE_VIDEO = true; const DISABLE_AUDIO = true; const AUTO_JOIN = true; const AUTO_RELOAD = true; const DELAY = 2000; // if your work email is not the first account (authuser = 0) change the authuser below const ACCOUNT_SWITCH = { enable: false, authuser: 0 } // -----BEGIN USERSCRIPT----- const getButtonList = () => { const node_list = document.getElementsByTagName('div'); const button_list = []; for (let i = 0; i < node_list.length; i = i + 1) { if (node_list[i].getAttribute('role') === 'button') button_list.push(node_list[i]); } return button_list; } const init_screen_main = () => { const button_list = getButtonList(); const button_map = { video: null, audio: null, join: null } button_list.forEach(button => { const aria_label = button.getAttribute('aria-label') if (button.innerText === 'Join now') button_map.join = button; else if (aria_label && ~aria_label.toLowerCase().indexOf('+ d')) button_map.audio = button; else if (aria_label && ~aria_label.toLowerCase().indexOf('+ e')) button_map.video = button; }) if (DISABLE_VIDEO) button_map.video.click() if (DISABLE_AUDIO) button_map.audio.click() if (AUTO_JOIN && button_map.audio && button_map.video) // join iff audio and video buttons have been clicked button_map.join && button_map.join.click(); }; if (AUTO_RELOAD) { setTimeout(function() { if ((document.documentElement.textContent).indexOf('Join') > -1) { console.log ("Found join button."); } else { location.reload(); } }, DELAY); } const checkLoad = () => { const divs = document.getElementsByTagName('div') let loaded = true for (let i=0;i { let clear_interval = false const interval_check = setInterval(() => { const button_list = getButtonList() if (checkLoad()) { // hackerman clearInterval(interval_check) setTimeout(() => init_screen_main(),500) } }, 100) } const main = () => { window.removeEventListener('load', main); const params = new URLSearchParams(location.search); const authuser = params.get('authuser') || '0' if (ACCOUNT_SWITCH.enable && authuser != ACCOUNT_SWITCH.authuser) { params.set('authuser', ACCOUNT_SWITCH.authuser) window.location.search = params.toString() } else { checkButtonLoad() } } window.addEventListener('load', main); // -----END USERSCRIPT-----