Eggdrop

**Eggdrop** on UNIX-järjestelmissä toimiva modulaarinen IRC-bottiohjelma. Nykyään eggdrop on suosituin IRC-botti. Useimmat peruskäyttäjien ajamista boteista ovat eggdroppeja. Erilaisia botteja tarvitsevat esimerkiksi IRC-operaattorit, jotka ajavat verkkopalveluja kuten ChanServ ja NickServ.

Eggdropin loi Robey Pointer vuonna 1993 alun perin EFnetin #gayteen-kanavaa varten. Se on kirjoitettu pääasiassa C-ohjelmointikielellä, mutta skripteissä käytetään TCL-kieltä.Linux-koneen resursseja Eggdrop-botti kuluttaa tyypillisesti hyvin vähän. Virtuaalista keskusmuistia se tarvitsee noin 2 MB, ja koko kasvaa käyttäjätietokannan koon mukaan. Prosessoriaikaa Eggdrop-botti kuluttaa erittäin vähän verrattuna Linux-koneen muihin prosesseihin.

## Skriptit ja moduulit
Eggdropin toiminnallisuutta voi laajentaa skripteillä ja moduuleilla, joita on saatavilla runsaasti erilaisiin eri käyttötarkoituksiin. Skripteistä useimmat ovat eggdrop-käyttäjien kirjoittamia. Skriptin tarkoituksena voi olla esimerkiksi TV-ohjelmien näyttäminen, uusimmat uutiset -esitys, google-haku, tilastointi, tiedostojen jakaminen (yleensä DCC-protokollalla) tai vaikkapa tietokilpailun pitäminen kanavalla. 

Skriptien lisäksi Eggdrop-bottiin voi kirjoittaa omia C-kielisiä moduuleita. Niiden etuna on nopeampi toiminta, sillä skriptit suoritetaan tulkkausmenetelmällä.

## Ominaisuudet

### Partyline sekä botin hallinta
Partyline mahdollistaa botin täydellisen hallinnan DCC-menetelmällä (direct client to client), joka on tuettu kaikissa yleisimmissä IRC-asiakasohjelmissa. Partyline avautuu yksityiskeskusteluksi botin ja käyttäjän välillä ja on täysin irrallinen IRC-verkosta. Bottiin lisätyt käyttäjät voivat kirjautua partylineen, mikäli heille on asetettu oikeudet siihen ja henkilökohtainen salasana on asetettu. Partyline on yksi eggdropin suurimmista vahvuuksista. Käyttäjät voivat keskustella partylinessä toistensa kanssa sekä hallita kanavia, mikäli heillä on tarvittavat oikeudet siihen. Botin saa myös raportoimaan partylineen erikseen määritellyistä tapahtumista kuten esimerkiksi siitä, kun kanavalle asetetaan jokin tietty kanavamoodi. Eggdrop-botti ei sisällä ainuttakaan ns. public-komentoa puhtaan asennuksen jälkeen, sillä kaikki hallinta voidaan toteuttaa turvallisemmin ja paremmin privaatissa partylinessä. Ainoana ns. public-komentona eggdropissa on pysynyt "seen"-komento, mutta se pitää erikseen aktivoida partylinen kautta kanavakohtaisesti. Public-komentojen määrittäminen skriptien avulla nopeuttaa hallintaa ja samalla tuo botin ominaisuuksia käytettäväksi niillekin käyttäjille, joilla ei ole oikeutta partylineen. Bottiin voidaan lisätä käyttäjä, jolla on pelkkä oikeus käyttää partylineä, mutta ei oikeuksia millään kanavalla tai muualla.

### Kanavien hallinta
Bottiin on valmiiksi ohjelmoitu kaikki kanavan hallintaa koskevat ominaisuudet, joista merkittävimpiä ovat muun muassa: flood-rajoitukset (kaikissa seuraavissa tapahtumissa: kanavalle liittyminen, nimimerkin vaihto, kanavalaajuisen ctcp-komennon (client to client protocol) käyttö, muiden käyttäjien häätäminen (kick) kanavalta, kanavalle lähetettyjen rivien määrä), kanavan omistajien ja tunnettujen käyttäjien hallinta tarkoin sovitussa hierarkiassa, kanavan asetusten ylläpitäminen, kuten kanavamoodin pakottaminen. Lisäksi kanavakohtaisesti voidaan määritellä useita turvallisuutta koskevia asetuksia, kuten asetus, joka estää bottiin lisäämättömiltä käyttäjiltä operaattorin statuksen saavuttamisen kanavalla, tai ystäväksi lisättyjen käyttäjien suojeleminen.

Eggdrop voi hallita useita kanavia samaan aikaan. Kanavien määrään ei tiettävästi ole rajoitusta mutta IRC-verkot usein rajoittavat tätä asiakaskohtaisesti. Eggdrop kuitenkin hidastuisi huomattavasti, jos siihen lisättäisiin esimerkiksi satoja kanavia, joissa on paljon toimintaa, tai vastaavasti vaikeutettaisiin kanavien hallintaa ylläpitäjän kannalta. Tosin yhdellä botilla voi olla useita ylläpitäjiä.
Toistaiseksi eggdrop pystyy hallitsemaan ainoastaan yhtä IRC-verkkoa kerrallaan.

### Jononhallinta
Eggdropissa on sisäänrakennettu jononhallinta sen käskyjen lähettämisessä IRC-verkkoon. Esimerkiksi, jos käyttäjä on kirjoittanut skriptin, joka virheellisesti lähettää tietoa IRC-verkkoon monta kertaa lyhyessä ajassa, botti ei lähetä komentoa verkkoon täysin reaaliajassa, vaan se käy käskyjonon läpi, jolloin botti muun muassa tutkailee onko sama tieto jo lähetetty verkkoon tai onko kulunut sopiva aika siitä, kun viime viesti on lähetetty. Näin mahdollistetaan se, että IRC-verkko ei katkaise botin yhteyttä liian nopean tiedon lähettämisen vuoksi (Excess flood). Jononhallinta koostuu kolmesta erilaisesta jonosta, joista kahdessa on viive ja muuta tarkkailua ja kolmannessa tieto välitetään suoraan verkkoon. On siis käyttäjän harkinnassa, mitä jonoa käytetään ja minkälaisessa tilanteessa. Tämä tulee kysymykseen sitten, kun kirjoitetaan omia skriptejä.

### Asetustiedosto
Käynnistyessään botti lukee suuren, noin tuhannen rivin asetustiedoston, jonka yhteydessä myös ladataan käyttäjä- ja kanavatiedostot, joihin on määritelty lisätyt käyttäjät sekä kanavat, joihin botti liittyy verkkoon päästyään. Kaikki asetukset on hyvin dokumentoitu ja useista on myös hyviä esimerkkejä configissa. Config-tiedostoa voidaan muokata ns. lennossa ja se voidaan ladata uudelleen partylinessä, jolloin uudet asetukset tulevat voimaan. Config-tiedosto käsittää käytännössä kaiken sen miten botti käyttäytyy, mitä moduuleita tai skriptejä ladataan ja muita lukemattomia asetuksia.

### Botnet
Eggdropia käytetään usein myös botnettien tekemiseen. 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.

Botnettejä käytetään myös muun kuin käyttäjätietojen jakamiseen. Kanavan muutettu käyttäjärajoitus voidaan välittää kanavan kaikille boteille botnetin kautta. Idle-kick-aikaa voidaan myös 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. Käyttäjät, joka yhdistävät botnettiin bottien kautta DCC-chatilla tai telnetillä, voivat kommunikoida botnetissä monilla kanavilla eli periaatteessa "pienemmässä" IRC:ssä. Netsplit ei katkaise botnetin omaa chattia.

Yksi suosittu botnet-skripti Eggdropille on *netbots*. Siinä on ominaisuuksia bottien kanavallekutsumiseen, netsplit-opsien väärinkäytön estäminen, bottien IRC-palvelimien kontrollointi, kanava-asetusten säätö koko botnetissä, käyttäjätietojen kontrollointi (esimerkiksi liian monta host-tietoa), yms.

Laajemmissa botneteissä on botteja hierarkkisissa tasoissa. Ylemmän tason botit eivät ole ollenkaan IRC-neteissä vaan ohjaavat IRC-neteissä olevia botteja. Näiden etuna on nopeampi toiminta kun IRC-moduulia ei tarvita. Näitä kutsutaan Eggdrop-terminologiassa *tandem*-boteiksi tai *limboiksi*.

## Tuki
Virallinen eggdropin tukikanava on #eggdrop UnderNetissä.
Eggdrop-apua on saatavilla myös #egghelp-kanavalla esimerkiksi freenodessa ja IRCNetissä ja #eggdrop kanavalla IRCNetissä sekä #eggdrop.support Quakenetissä.

Eggdropin TCL-skriptaukselle on myös apukanava #tcl UnderNet sekä Quakenet verkoissa

## Katso myös
* IRC
* IRC-botti

## Lähteet

## Aiheesta muualla
* http://www.egghelp.org/  - Apua ja skriptejä eggdropin käyttöön
* http://www.eggheads.org/ - Eggdropin virallinen kotisivu