|
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 |