IRC-botti

**IRC-botti** on botti, eli tietokoneohjelma tai skripti, joka on läsnä ja näkyy IRC:ssä normaalin käyttäjän tavoin, mutta joka toimii niin kuin tietokoneohjelma tai skripti.

Bottia voi ohjata sen omistaja ja hänen valtuuttamansa irkkaajat. Käytännössä tämä usein tarkoittaa sitä, että IRC-kanavalla on normaalilta käyttäjältä päällisin puolin näyttävä botti, joka suorittaa valtuutettujen käyttäjien haluamia toimintoja tietyillä komennoilla. IRC-botti voi asetuksistaan riippuen joko tarkkailla kanavan keskustelua siltä varalta, että joku oikea käyttäjä "sanoo" kanavan keskustelun keskelle repliikin, jonka IRC-botti tunnistaa joksikin komennokseen, tai vaihtoehtoisesti ottaa vastaan komentoja yksityisviesteinä oikeilta käyttäjiltä. Boteissa voi olla skriptejä, jotka voivat kertoa muille kanavan irkkaajille, milloin kysytty irkkaaja on viimeksi ollut kanavalla. 

IRC-botit antavat kanavan valtuutetuille kanavaoperaattoreille automaattisesti tai salasanakyselyn jälkeen operaattoristatuksen aina, kun he saapuvat kanavalle. Irc-botit estävät ei-toivottujen käyttäjien pääsyä kanavalle kickeillä ja banneilla. IRC-botit voivat kontrolloida myös irkkaajien toimintaa estämällä ei-toivotut tilanteet kuten floodaus, join-flood, idlaus, ei-toivottujen sanojen sanominen, ei toivottujen lempinimien (nick) käyttö, yms.

IRC-botit voivat kontrolloida kanavan topiccia. Ne voivat asettaa sinne satunnaisia otsikoita tai asettaa valtuutettujen käyttäjien haluamia otsikoita.

IRC-bottien avulla voidaan tehdä graafisia tilastoja kanavan aktiviteeteista, kuten irkkaajien määrästä, kanavalla käytyjen keskustelujen vilkkaudesta, vuorokaudenajoista yms. Esimerkiksi java-kielellä tehty Piespy botti osaa piirtää kaavioita kanavan irkkaajien sosiaalisista suhteista.

Kanavan automaattisen ylläpidon ja käyttäjien hallinnan sekä informatiivisten tilastojen tekemisen ja lokien keruun lisäksi boteissa voi olla alkeellista tekoälyä, jonka avulla ne voivat keskustella käyttäjien kanssa.

## Käyttäjätietokanta
Boteissa on käyttäjätietokanta, jonka avulla botit muistavat kanavalla käyneet irkkaajat. Tietoihin talletetaan tavallisesti vähintään nick, host ja käynnin aikaleima. Irkissä käyttäjät tunnistetaan nimimerkin ja hostin perusteella. Näiden tietojen lisäksi tietokannassa voi olla erillinen handle, jonka käyttäminen sallii samalle tunnukselle useamman eri lempinimen käytön.

Käyttäjätietoihin talletetaan myös irkkaajan *oikeustaso* kanavalla ja botin suhteen. Näillä oikeustasoilla määritellään, kenellä on oikeus käyttää botin palveluja, kenellä on oikeus olla kanavaoperaattorina, kenellä on puheoikeus (moderoidulla) kanavalla tai mitä tahansa muuta oikeuksiin liittyvää.

## Kanavatietokanta
Boteissa on tiedot myös kanavista, joita botti hallitsee tai seuraa. Kanavien tiedoissa on määritelty rajat erilaisille floodeille. Floodeja ovat kanavalle suolletun tekstin tulva, kanavalleliittymistulva, actiontulva, lempinimenvaihtotulva, kanavaltapoistumistulva (harvinainen). Kanavakohtaisiin asetuksiin kuuluu myös idle-aika. Se on aika, jonka käyttäjä voi olla kanavalla puhumatta mitään. Sen jälkeen botti potkaisee irkkaajan ulos. Näin estetään kanavalla roikkumiset.

Kehittyneemmissä bottijärjestelmissä voidaan kanavakohtaisesti määritellä, jaetaanko käyttäjätiedot bottien kesken, toimivatko botit aggressiviisesti, rangaistaanko ystäviä vastaan kapinoivia, yms.

Boteissa voi olla myös muita tietokantoja, joita käytetään skripteillä.

## Skriptit ja moduulit
Erilaisilla skripteillä ja moduuleilla lisätään IRC-botin toiminnallisuutta halutuksi. Skripteissä käytetään yleensä tapahtumapohjaista ohjelmointikieltä. Tällainen kieli on esimerkiksi Eggdropissa käytetty TCL. Tapahtumapohjaisissa skripteissä tehdään toimenpide silloin kun jokin tapahtuma tapahtuu. Esimerkiksi joku tulee kanavalle.

Skriptejä voi tehdä itsekin, jos omaa perustaidot ohjelmoinnista. Näin kanavasta saa persoonallisen ja haluamallaan tavalla toimivan.

## Toiminnan varmistaminen
IRC-botti on palvelu, jonka tulisi toimia jatkuvasti. Sen pitää ensinnäkin toimia palvelinkoneella, joka on jatkuvasti päällä ja jatkuvasti yhteydessä Internetin välityksellä IRC-verkkoon/verkkoihin. Jatkuvuutta estävät monet tekijät kuten IRC-palvelimen splitit, IRC-palvelimen uudelleenkäynnistys, IRC-palvelimen sammutus, IRC-botin palvelinkoneen uudelleenkäynnistys, IRC-botin palvelinkoneen sammutus, yms.

Jotta IRC-botti toimisi ilman jatkuvaa ylläpitoa, sillä tulee olla seuraavat ominaisuudet:
* Käynnistyy silloin kun palvelinkone käynnistyy
* Käynnistyy itsestään ajastimella (esimerkiksi crontab) silloin kun bottiohjelman prosessi on lopetettu
* Pystyy yhdistämään IRC-palvelimeen
* Pystyy tulemaan halutulle IRC-kanavalle (esimerkiksi botnetin avulla)
* Saa operaattorin statuksen kanavalle tullessaan (jos bottia käytetään hallintatehtäviin)

Kun nämä ovat kunnossa, botti toimii automaattisesti ilman aputoimenpiteitä aina silloin kun se vain on mahdollista.

## Botnet
Botnetit ovat IRC-bottien verkkoja, joiden avulla linkitetään kaksi tai useampi botti yhteen. Toinen IRC-kanavalla oleva botti voi kutsua toisen botin invite-only -kanavalle tai avaimella suojatulle kanavalle, jolloin tulevaan bottiin ei tarvitse erikseen asettaa kulloistakin avainta. Botit voivat jakaa toisillensa käyttäjätiedot. Silloin bottien toiminta yhdellä kanavalla on yhtenäistä, eikä tule bottisotia. Laajemmissa kanavissa kaikkia botteja ei liitetä yhteen bottiverkkoon, sillä koko botnetin haavoittuminen haavoittaisi kanavan kaikki botit.

Botnettejä käytetään myös muun kuin käyttäjätietojen jakamiseen. Esimerkiksi kanavan muutettu käyttäjärajoitus (limit) voidaan välittää kanavan kaikille boteille botnetin kautta. Tai idle-kick -aikaa voidaan vaihtaa ja botnetin kautta kaikki kanavan botit saavat uudet tiedot. Botteja voidaan asettaa käynnistämään uusia botteja, jos jokin botti kanavalla tulee toimintakelvottomaksi tai häviää.

Botnetin botit voivat bannata käyttäjiä synkronoidusti.

### Bottiverkkojen epäeettinen käyttö
Bottiverkkoja käytetään myös muihinkin tarkoituksiin kuin palveluiden toteuttamiseen IRC-keskustelukanavilla. Bottiverkkoja käytetään usein tietomurtojen yhteydessä, jossa tietokoneille annetaan käskyjä IRC-kanavalla. Bottiverkkoon mukaan orjakoneiksi kaapatuista koneista ylivoimaisesti suurin osa toimii Windows-käyttöjärjestelmällä. Yksi laajimmista bottiverkoista on (ollut) hollantilainen bottiverkko, jossa oli yli satatuhatta tietokonetta. Bottiverkkoja käytetään vain harvoissa tapauksissa taloudellisen hyödyn saamiseen. Bottiverkot ovat kuitenkin yksi nopeimmin kasvavista Internetin liiketoimintamalleista, sillä niitä voidaan myydä tai vuokrata, käyttää koneen omistajan huomaamatta.

Bottiverkon orjakoneita käytetään roskapostien spamminvälittäjinä, ja (tilaustyönä) palvelunestohyökkäyksiin. Bottikoneita käytetään myös phishing-kalasteluun ja väärennettyjen verkkopalvelujen pyörittämiseen. Bottiverkkoja on käytetty myös www-sivujen klikkauksien perusteella maksavien mainostajien huijaamiseen.

Bottiverkkoihin sovelletaan nykyisin p2p-verkon ominaisuuksia. Näiden hajautettujen verkkojen paikantaminen, seuraaminen ja hajottaminen on perinteisiä bottiverkkoja vaikeampaa.

## Bottisota
Bottisodaksi nimitetään kahden tai useamman IRC-botin syklistä päättymätöntä toimintaa (deadlock), jossa toinen botti kumoaa toisen botin tekemän toimenpiteen. Tavallisin tällainen ristiriita on kanavaoperaattorin oikeuksien jakaminen jollekin irkkaajalle tai toiselle botille. 

Botit, joilla on tekoälyominaisuuksia, voivat jopa keskustella keskenään älykkäästi. Todennäköisesti keskustelu päättyy jossain vaiheessa itsestään. Tätä ei kutsuta bottisodaksi.

Bottisotiin johtavia synkronoimattomia tilanteita voidaan vähentää käyttämällä kanavan eri botteja yhdistävää botnettia.

## IRC-bottiohjelmistoja
* Eggdrop
* oer
* EnergyMech

## Aiheesta muualla
* Bottiverkot yhä suurempi uhka internetille