Escribir un complemento de alerta de telegrama de Chrome



El problema, camaradas!

¡Los niños (~ 10 años) cambiaron al aprendizaje a distancia, se sentaron en habitaciones con computadoras y no pueden concentrarse en las lecciones!

Se agregan a las familias de google , a la familia de microsoft , el tiempo en la computadora es limitado y los sitios para adultos se eliminan a través de opendns . Pero solo eso, e incluso justo durante la conferencia de zoom de la lección, el niño comienza a mirar youtube. Y luego el maestro da la tarea: mirar el video y escribir un ensayo. Y el video también está en youtube. La moderación manual es indispensable.

Debajo del gato, escribimos un pendal mágico, es decir, un complemento de Chrome, que envía cada sitio abierto en telegrama a un padre malvado que trabaja en la habitación contigua.

Larva del moscardón


Primero crearemos un bot de telegramas y un canal al que vendrán los enlaces.

  1. Abra BotFather , escriba / newbot , obtenga botId (una combinación de ~ 50 caracteres).
  2. Creamos un nuevo canal, agregamos nuestro bot allí como administrador.
  3. Escribimos algo en el canal, abrimos el enlace https://api.telegram.org/bot botId / getUpdates , encontramos resultado-> channel_post-> chat-> id allí.

Como resultado, tenemos botId y chatId .

Enchufar


  1. Creamos la carpeta, habrá 2 archivos en ella: manifest.json e index.js.
  2. Cree un manifiesto de complemento de Chrome para minimizar esto:

    {
      "manifest_version": 2,
      "name": "Url Telegram Logger",
      "version": "1.0.0",
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["index.js"]
        }
      ]
    }
    

    Aquí dice que el script index.js se incrustará en cualquier página (coincide: todas las URL).
  3. . SPA, document.location.href. MutationObserver. . , ( , ). ( , ). navigator.sendBeacon:

    const settings = {
      botId: '...',
      chatId: '...',
      userName: 'Matvey',
      pollingInterval: 10000
    }
    
    const mutedUrls = [
      'https://gmail.com',
      'https://www.eduka.lt',
      // .. ,   ..
    ]
    
    const sendMessage = (type, href) => {
      if (mutedUrls.find(url => href.startsWith(url))) { return false }
      const data = new FormData()
      data.append('chat_id', settings.chatId)
      data.append('text', `${settings.userName} ${type} ${document.title} ${href}`)
      navigator.sendBeacon(
        `https://api.telegram.org/bot${settings.botId}/sendMessage`, 
        data
      )
    }
    
    let latestHref = null
    let timeout = 0
    
    const run = () => {
      if (window.location.href !== latestHref) {
        latestHref = window.location.href
        sendMessage('opened', latestHref)
      }
      timeout && clearTimeout(timeout)
      timeout = setTimeout(run, settings.pollingInterval)
    }
    
    window.addEventListener('load', run)
    window.addEventListener('unload', () => sendMessage('closed', latestHref))
    
  4. ( chrome://extensions/, Developer mode, Load unpacked).



Se han gastado 20 minutos, ahora puede pasar otras 20 horas, escribir un backend, configurar la recepción de comandos entrantes (/ mute url, / mute 2h url, etc.), agregar registro, suscripciones mensuales pagas, bots de holgura y hangouts, y luego rakear por cualquier derecho niños y datos personales. Dejo estos placeres al lector, lo tengo todo.

All Articles