Skriptit / IRC-gateway

Näiden kolmen skriptin avulla voi toteuttaa IRC-botin, joka on "yksisuuntainen gateway" ja lähettää IRC-kanavalle tai yksityisviestinä selainpohjaisen webchatin logit IRCiin.

Tarvitaan Linux, internet-yhteys ja Chromium-perheen selain, sillä vain Chromium-perheen selaimet tukevat tällä hetkellä suoraa tallennusta kiintolevylle konsoliskriptillä.

Luo hakemisto nimeltä logbot mihin tahansa. Tallenna kaikki nämä kolme allaolevaa skriptiä sinne. Kolmas lähinnä siksi, että se olisi tallessa jossain myöhempää käyttöä varten.

Skripti 1 on Linux shell script ja "wrapper", eli se pyörittää varsinaista skriptiä siten, että jos botti tippuu IRC-verkosta, se käynnistää pääskriptin uudestaan ja yhdistää takaisin IRC-verkkoon. Wrapper on se skripti, jota ajetaan "itse". Nimeä tämä "wrapper" nimellä logbot.sh ja laita se hakemistoon logbot:

#!/usr/bin/env bash
while true; do
    ./ircmsg.sh
    sleep 10
done


Skripti 2 on edelleen Linux shell script, jota tuo aiempi skripti pyörittää sisällään. Nimeä se nimellä ircmsg.sh ja laita edelleen hakemistoon logbot:

#!/usr/bin/env bash
while true; do
  exec 3>/dev/tcp/open.ircnet.net/6667
  echo "NICK l0gb0t" >&3
  echo "USER l0gb0t 8 * : l0gb0t" >&3
  echo "JOIN #l0gz" >&3
    while true; do
      yes | cp -rf 0.txt 1.txt
        while cmp -s 0.txt 1.txt; do
          sleep 1
        done
      yes | cp -rf 0.txt 2.txt
      sed -i -e 's/ / /g' 2.txt
      echo "PRIVMSG #l0gz $(cat 2.txt)" >&3
    done
done


Tuo skripti tarkistaa, onko uusi viesti tullut 1 sekunnin välein, joka tarkoittaa sitä, että aika ajoin yksittäiset viestit voivat jäädä loggaamatta jos viestejä satelee tiheään tahtiin. Aikaa voi säätää tällöin halutessaan pienemmäksi, esimerkiksi puoleksi sekunniksi vaihtamalla rivin "sleep 1" tilalle "sleep 0.5", mutta ole maltillinen, koska tietokoneilla ja näiden kiintolevyilläkin on rajansa. Botille voi antaa uuden nimen ja voi määritellä, mihin irc-palvelimeen ja mille kanavalle se yhdistää ja "juttelee". Esimerkkibotti on nikiltään "l0gb0t" ja käy IRCnetissä serverin open.ircnet.net (port 6667) kanavalla #l0gz. Kanavan voi toki korvata käyttäjänimellä, jos haluat viestit vain yksityisesti.

Mene kansioon logbot ja anna komennot chmod +x logbot.sh ja chmod +x ircmsg.sh – näin noilla kahdella skripteillä on "ajo-oikeus". Älä käynnistä vielä mitään.

Skripti 3 on javascriptiä ja tätä ajetaan selaimen konsolissa. Konsolihan aukeaa yleensä painamalla F12 ja skriptejä ajetaan copy-pastettamalla ne konsoliin ("Console"). Se kysyy, ajettaessa, mihin tallennetaan ja millä nimellä. Tallennus tehdään aiempaan logbot-hakemistoon ja nimellä 0.txt (nolla, ei O). Skriptissä on myös aika, tässä tapauksessa 2 sekuntia, eli se tallentaa uusimman viestin selaimesta 2 sekunnin välein, josta joskus voi seurata yksittäisten viestein hukkumista kiireisessä webchatissa. Aikaa voi tällöin muuttaa pienemmäksi, mutta ole edelleen maltillinen samasta syystä kuin aiemmankin skriptin osalta. Eri webchateissa tekstisisältö sijoittuu eri sijaintiin. Esimerkiksi Randomin webchatissa se paikka olisi "li.chat-line", mutta tähän esimerkkiskriptiini olen laittanut sijainniksi "li.chattirivi.muokkaa", johon voit itse laittaa haluamasi sijainnin. Skriptin toimiminen yleensä edellyttää kyseisessä webchatissa "käyttäjänä" läsnäoloa.

let fileHandle = null;

async function initializeFile() {
  try {
    fileHandle = await window.showSaveFilePicker({
      suggestedName: '0.txt',
      types: [{
        description: 'Text Files',
        accept: {'text/plain': ['.txt']},
      }],
    });
    console.log('Starting');
    startSaving();
  } catch (err) {
    console.error('E:', err);
  }
}

async function saveLatestContent() {
  if (!fileHandle) return;
   const elements = document.querySelectorAll('li.chattirivi.muokkaa');
  
  if (elements.length === 0) {
    return;
  }
  
  const latestElement = elements[elements.length - 1];
  const content = latestElement.textContent || latestElement.innerText;
  
  try {
    const writable = await fileHandle.createWritable();
    await writable.write(content);
    await writable.close();
    
  } catch (err) {
    console.error('E:', err);
  }
}

function startSaving() {
  saveLatestContent();
  setInterval(saveLatestContent, 2000);
}

initializeFile();


Kun olet saanut selaimen konsoliskriptin pyörimään, voit sen jälkeen käynnistää ensimmäisen shell scriptin menemällä logbot-hakemistoon ja kirjoittamalla ./logbot.sh