您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Script para fazer chamada automaticamente na plataforma digital Meet do colégio Bonja.
// ==UserScript== // @name Chamada Meet Bonja // @namespace http://tampermonkey.net/ // @version 0.0.2 // @description Script para fazer chamada automaticamente na plataforma digital Meet do colégio Bonja. // @author Maicon Moreira // @match https://meet.google.com/* // @grant none // ==/UserScript== const globalStyle = document.createElement('style') globalStyle.innerHTML = ` #callButton { display: flex; align-items: center; align-content: center; } #callSpan { text-align: center; margin-left: 10px; } .float-right { position: absolute !important; /* left: 10px !important; */ border-radius: 8px; }` document.body.appendChild(globalStyle) function renderNotPresentStudents(students) { students.sort((a, b) => { if (a[1] > b[1]) { return 1; } if (a[1] < b[1]) { return -1; } return 0; }); return students.reduce((acc, [name, group]) => ` ${acc} <div class="student"> <div class="name">${name.toUpperCase()}</div> <div class="group">${group ? `3${group}` : ''}</div> </div> `, ''); } function renderPresentStudents(students, studentNames) { const studentsWithGroup = students.map(((student) => { const studentWithGroup = studentNames.find(([name]) => name === student); if (studentWithGroup) return studentWithGroup; return student; })); studentsWithGroup.sort((a, b) => { if (typeof a !== 'object') return 1; if (typeof b !== 'object') return -1; if (a[1] > b[1]) { return 1; } if (a[1] < b[1]) { return -1; } return 0; }); return studentsWithGroup.reduce((acc, student) => { const name = typeof student === 'object' ? student[0] : student; const group = typeof student === 'object' ? student[1] : ''; return ` ${acc} <div class="student"> <div class="name">${name.toUpperCase()}</div> <div class="group">${group ? `3${group}` : ''}</div> </div> `; }, ''); } let studentsNames = [ ['MARIANA CRISTINA HANSCH', 'A'], ['VITOR BRUM BORTOLI', 'A'], ['ARTHUR ESPÍNDOLA DA CRUZ', 'A'], ['MARIA EDUARDA DOBNER E SILVA', 'A'], ['LUIZA FERNANDES BREITENBACH', 'A'], ['MAITE KIRCHGASSNER ZOMER', 'A'], ['ARNON MUNHÓZ SCHÜTZ DOS SANTOS', 'A'], ['PIETRA VIANA ALVES MOREIRA', 'A'], ['DÉBORA NOGUEIRA VILODRES', 'A'], ['LAURA CAROLINA DA COSTA', 'A'], ['EUGENIO FRANCISCO VIEIRA NETO', 'A'], ['CAMILA VENTURI DE SANTANA', 'A'], ['KAROLAYN ALEXANDRE', 'A'], ['RAIKA TORRES DOS SANTOS', 'A'], ['TAINARA ROCHA', 'A'], ['GUSTAVO SCHULZE GORGES', 'A'], ['MUNIKE VINTER', 'A'], ['ANNA JÚLIA SCHULZ CORIA', 'A'], ['MAYARA BAUMER', 'A'], ['KAILANE BETHÂNIA DA SILVA CARDOSO', 'A'], ['BRUNA VERDINELLI DE OLIVEIRA', 'A'], ['LAVÍNIA LUCIOLI DA SILVA', 'A'], ['JULIA BUENO SIQUEIRA', 'A'], ['RODOLPHO CEZAR DE OLIVEIRA FILHO', 'A'], ['MARINA RODRIGUES', 'A'], ['LAURA THIEM KOTLEVSKI', 'A'], ['LETÍCIA MELLO TRAPP', 'A'], ['VICTOR DANTAS ANDRADE', 'A'], ['HENRIQUE NOGUEIRA OLIVIO', 'A'], ['HELOISA MENON RITZMANN', 'A'], ['CAROLINA GONÇALVES DEGANG', 'A'], ['JAIANE THAIS DOS SANTOS', 'A'], ['LILY KLUG BERALDI', 'A'], ['LUCAS GABRIEL TAVARES', 'A'], ['NICOLAS GHELLER TELLES', 'A'], ['HELENA DE SOUZA SANTANA', 'A'], ['GIOVANNA VASQUES MARTINHO', 'A'], ['HENRIQUE FRANCISCO ROSA', 'A'], ['PAULO PAGLIARINI GRAMS', 'A'], ['MELANIE DIETRICH', 'A'], ['LUCAS VINICIUS', 'A'], ['NATALIE GRAESER MARCONDES', 'A'], ['CAROLINE EVELIN GONÇALVES SILVÉRIO', 'A'], ['ESTHEFANI CAMILLI BLOEMER', 'A'], ['GIULIA CAMPOS', 'A'], ['REBECA FERREIRA CAESAR', 'A'], ['ISABELLA DALLA COSTA BALABAN FLORIO', 'A'], ['GIOVANNA GERALDI JORGI', 'A'], ['VOCÊ', 'A'], ['VICTORIA ALYSSA SOARES', 'A'], ['LETICIA BUSARELLO AGAPITO', 'A'], ['NÍCOLAS SIKORSKI MENGARDA', 'A'], ['AMANDA KESSELY', 'A'], ['AMANDA CORRÊA', 'A'], ['BRUNA LUIZE SOUZA DE OLIVEIRA', 'A'], ['VICTORIA AVANCI SOARES', 'A'], ['THIAGO CASTRO FRITSCHE', 'A'], ['JOSÉ GUILHERME DO AMARAL ADAMI', 'A'], ['GIOVANNA MORESCHI MACIEL', 'A'], ['FABÍOLA BORGES BARTEZAN', 'A'], ['ANA LAURA VIEIRA DE OLIVEIRA', 'A'], ['YASMIN CAMILLE BAUER', 'A'], ['BÁRBARA WERNER MAINHARDT', 'A'], ['MILLENA TRAVESSINI LEME', 'A'], ['PEDRO NACHTIGALL BISSO', 'A'], ['ANDRE LUIS LUCAS', 'A'], ['GABRIELA HOLANDA DE AQUINO', 'A'], ['SOFIA SILVA RODRIGUES', 'A'], ['CATHERINE PACHER', 'A'], ['MARIA LUIZA MENDES RIBEIRO', 'A'], ['MARIA JULIA LEME FERREIRA', 'A'], ['FERNANDO DZAZIO REIS', 'A'], ['LETICIA DE SOUZA', 'A'], ['SABRINA STUMM', 'A'], ['PEDRO HOLANDA DE AQUINO', 'A'], ['JULIA RANK TEIXEIRA', 'A'], ['MARIANE MAXIMO BASSINELLI', 'A'], ['SAADY DE ALMEIDA LEONES', 'A'], ['BERNARDO DE ANDRADE DIAS DA COSTA', 'A'], ['GABRIEL MADEIRA', 'A'], ['BRIAN FINDER BATISTA', 'A'], ['VITOR FERNANDES DE MELLO', 'A'], ['TIAGO EGERLAND RODRIGUES', 'A'], ['BEATRIZ DE ALMEIDA RIUL', 'A'], ['PEDRO HENRIQUE DE SENA TROMBINI TAGLIALE', 'A'], ['EDUARDA APARECIDA KÖHLER', 'A'], ['ISABEL DE MELLO DE CARVALHO', 'A'], ['TAINARA NEZZI CROPOLATO', 'A'], ['PEDRO TOMASI PEDROSO', 'A'], ['VICTORIA ELISA TEUBER DE OLIVEIRA', 'A'], ['HENRIQUE FERNANDES DE MELLO', 'A'], ['LUCAS NORBERTO RUFO VETORAZZI', 'A'], ['THIAGO FALASCA DUARTE', 'A'], ['VICTOR ROSSI JARACESKI', 'A'], ['LUCAS MOISEIS AZEVEDO', 'A'], ['ARTHUR NASCIMENTO', 'A'], ['LUCAS EDUARDO CHIN CHAN VAZ', 'A'], ['JADY KAROLINE PERES VENTURI', 'A'], ['CAROLINA RATHUNDE SANDLER', 'A'], ['HENRIQUE AGUIRRE SIGWALT', 'A'], ['THIAGO VINICIUS DEBONI DAUDT', 'A'] ]; studentsNames = studentsNames.map(([name, group]) => [name.toLowerCase(), group]); const totalStudents = studentsNames.length; const calledNames = []; let mainPage = false; let buttonInjected = false; let buttonText = 'Clique para iniciar chamada'; let inCalling = false; const button = document.createElement('div'); const span = document.createElement('span'); button.style.cursor = 'pointer'; setInterval(() => { if (!mainPage) { if (document.getElementById('lcsclient')) mainPage = true; } if (mainPage) { const isChatOpen = !!document.querySelector('.z38b6.CnDs7d.hPqowe'); if (isChatOpen) { const fullTopBar = document.querySelector('.Jrb8ue'); const fullTopBarPositions = fullTopBar.getBoundingClientRect(); // property 'getBoundingClientRect' of null error fix const chat = document.querySelector('.mKBhCf.qwU8Me.RlceJe.kjZr4'); if (chat) { const chatPositions = chat ? chat.getBoundingClientRect() : null; const fullTopBarCorrectX = chatPositions.x - fullTopBarPositions.width; fullTopBar.children[0].classList.remove('eLNT1d'); fullTopBar.classList.add('float-right'); fullTopBar.style.left = `${fullTopBarCorrectX}px`; } } else { const fullTopBar = document.getElementsByClassName('Jrb8ue')[0]; fullTopBar.classList.remove('float-right'); } if (!buttonInjected) { const topBar = document.getElementsByClassName('NzPR9b')[0]; topBar.style.borderRadius = '8px'; span.innerText = buttonText; button.id = 'callButton'; span.id = 'callSpan'; button.onclick = () => { inCalling = !inCalling; if (!inCalling) { const presents = calledNames; const notPresents = studentsNames.filter(([name]) => !presents.includes(name)); presents.sort(); notPresents.sort(); const html = document.createElement('html'); const head = document.createElement('head'); const title = document.createElement('title'); title.innerText = 'Chamada'; const body = document.createElement('body'); const content = ` <div class="presents"> <h2>Presentes:</h2> ${renderPresentStudents(presents, studentsNames)} </div> <div class="not-presents"> <h2>Ausentes:</h2> ${renderNotPresentStudents(notPresents)} </div> `; const styles = document.createElement('style'); styles.innerHTML = ` * { font-family: sans-serif; } body { display: flex; justify-content: space-around; } .student { margin: 12px 0; } .name, .group { display: inline-block; } `; body.innerHTML = content; head.appendChild(title); head.appendChild(styles); html.appendChild(head); html.appendChild(body); const tmp = document.createElement('div'); tmp.appendChild(html); const newTab = window.open(); newTab.document.write(tmp.innerHTML); } }; button.append(span); topBar.prepend(button); buttonInjected = true; } if (buttonInjected) { if (inCalling) { if (!isChatOpen) { buttonText = "<span style='color:red'>Por favor, abra o chat!</span>"; } if (isChatOpen) { buttonText = `Realizando chamada (${calledNames.length} de ${totalStudents}). Clique para finalizar.`; const messages = document.querySelectorAll('.GDhqjd'); messages.forEach((message) => { const name = message.children[0].children[0].innerText.toLowerCase(); const text = message.children[1].innerText.toLowerCase(); if (text.match(/a|b|c/gm) && text.length <= 2) { if (!calledNames.includes(name) && name !== 'você' && name !== 'you') { calledNames.push(name); } } }); } } else { buttonText = 'Clique para iniciar chamada'; } span.innerHTML = buttonText; } } });