Totin Nurkka

 Intro

Etusivu
Toti
Yhteyslomake


 Mietteet

Utopia

 Kujeet

Anonymiteetti
Asiattomuudet
Sotkusilppu
Teksti


 Epätaide

Epätaiteen alkeet
Kuvanlaadun parannus


 Psykometria

MSI-BPD

 Skriptit

merkkisiivous.sh
m358.sh
IRC-gateway


 International

Web proxies

 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
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.oldline.viestion", 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.


// Luo File System Access API -kahva tiedostoon
let fileHandle = null;

async function initializeFile() {
  try {
    // Pyydä käyttäjää valitsemaan/luomaan tiedosto
    fileHandle = await window.showSaveFilePicker({
      suggestedName: '0.txt',
      types: [{
        description: 'Text Files',
        accept: {'text/plain': ['.txt']},
      }],
    });
    console.log('Tiedosto valittu, tallennus alkaa...');
    startSaving();
  } catch (err) {
    console.error('Tiedoston valinta peruutettu tai epäonnistui:', err);
  }
}

async function saveLatestContent() {
  if (!fileHandle) return;
  
  // Etsi kaikki elementit ja ota viimeinen (uusin)
  const elements = document.querySelectorAll('li.chattirivi.muokkaa');
  
  if (elements.length === 0) {
    console.log('Ei löytynyt elementtejä');
    return;
  }
  
  const latestElement = elements[elements.length - 1];
  const content = latestElement.textContent || latestElement.innerText;
  
  try {
    // Luo kirjoitettava stream
    const writable = await fileHandle.createWritable();
    // Kirjoita sisältö (päällekirjoittaa automaattisesti)
    await writable.write(content);
    // Sulje stream
    await writable.close();
    
    console.log('Tallennettu:', new Date().toLocaleTimeString());
  } catch (err) {
    console.error('Tallennusvirhe:', err);
  }
}

function startSaving() {
  // Tallenna heti
  saveLatestContent();
  // Tallenna 2 sekunnin välein
  setInterval(saveLatestContent, 2000);
}

// Käynnistä skripti
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