https://github.com/juanmachuca95/notify_goglee
Utility to notify google meet messages made with go and js
https://github.com/juanmachuca95/notify_goglee
go javascript notifications
Last synced: about 1 month ago
JSON representation
Utility to notify google meet messages made with go and js
- Host: GitHub
- URL: https://github.com/juanmachuca95/notify_goglee
- Owner: juanmachuca95
- Created: 2022-09-25T16:38:41.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-09-25T16:42:44.000Z (almost 3 years ago)
- Last Synced: 2024-12-25T17:42:18.631Z (6 months ago)
- Topics: go, javascript, notifications
- Language: Go
- Homepage:
- Size: 42 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Noticador de mensajes - google meet
Para este programa me apoye en utilidades ya programadas como ```github.com/gen2brain/beeep```. Pero tambien es posible hacer utilizando herramientas que provee cada sistema operativo, en linux por ejemplo: ````notify-send````
1. Run server on port 8000 (golang).
```go
go run main.go
```2. Prueba el endpoint data/ [POST]
```curl
curl -d '{"sender_name":"juan", "formatted_timestamp":"12:00", "messages":["Hello", "¿Puedes ves mis mensajes de google meet en otra ventana?"]}' http://localhost:8000/data
```3. Script JS for google meet.
### Javascript que se ejecuta en google meet
Existen extensiones que permiten guardar el script en el navegador y ejecutarlo cada vez que ingrese a dicho sitio. Pero no lo recomiendo, dado que el proceso que suplanta es solamente copiar y pegar.Nota:
* El timer esta puesto a 5s, sientase libre de modificarlo.
* Goole meet puede cambiar el nombre etiquetas con el correr del tiempo, lo que hara que deba actualizarlo manualmente.```js
// ejecución principal del programa.
var totalMensajesActuales = [];
var myInterval = setInterval(function(){
let nuevosMensajesActuales = getMessages()diff = getDifference(totalMensajesActuales, nuevosMensajesActuales)
if (diff.length > 0){
sendToServer(diff)
totalMensajesActuales = nuevosMensajesActuales
}}, 5000)
// Obtiene los mensajes del panel de chat en google meet
function getMessages(){
let nuevosMessages = []
document.querySelectorAll('[data-sender-name]').forEach((element) => {
let obj = {
'sender_name':element.getAttribute('data-sender-name'),
'formatted_timestamp': element.getAttribute('data-formatted-timestamp'),
'messages': []
}
element.lastChild.querySelectorAll('[data-message-text]').forEach((msg) => {
obj.messages.push(msg.getAttribute('data-message-text'))
})
nuevosMessages.push(obj)
})return nuevosMessages
}// Obtiene los mensajes que no se han enviado aún
function getDifference(actuales, nuevos){
var mensajesParaEnviar = [];
// Corroboramos que hayan mensajes iguales entre arrays
for(var i = 0; i < actuales.length; i++){
if(actuales[i].messages.length === nuevos[i].messages.length){
// console.log("mensajes con la misma cantidad ", actuales[i].messages.length, nuevos[i].messages.length);
}else{
// console.log("hay mensajes nuevos para enviar")
// console.log("num: ", i, actuales[i].messages, nuevos[i].messages)
// Si actual tiene 10 y nuevo tiene 12
let nuevoObj = {
'sender_name': actuales[i].sender_name,
'formatted_timestamp': actuales[i].formatted_timestamp,
'messages': []
}for (var j = actuales[i].messages.length; j < nuevos[i].messages.length; j++){
// console.log("Se agregará el mensaje: ", nuevos[i].messages[j])
nuevoObj.messages.push(nuevos[i].messages[j]);
}mensajesParaEnviar.push(nuevoObj);
}
}// console.log("Para enviar tenemos ", mensajesParaEnviar);
// falta agregar los nuevos mensajes de usuarios
if (actuales.length < nuevos.length) {
for (var i = actuales.length; i < nuevos.length; i++){
// console.log("Nuevos mensajes", nuevos[i])
mensajesParaEnviar.push(nuevos[i])
}
}return mensajesParaEnviar
}// Solo envia los mensajes que no se enviado previamente
function sendToServer(mensajesParaEnviar){
mensajesParaEnviar.forEach((msg) => {
fetch("http://localhost:8000/data", {
headers: new Headers({ "content-type": "application/json" }),
mode: 'no-cors',
method: "POST",
body: JSON.stringify(msg)
})
})
}
```