Seuraavassa esittely Bottiseminaari-osallistujamme Javasoturi-botin toteutuksesta:
Runko
Bottimme rungon muodostaa luokka SoturiBotti, joka on pircbotin alaluokka. Tämä luokka hoitaa kanavalle liittymisen sekä viestien välittämisen eri ominaisuuksille.
Varsinaiset botin ominaisuudet on toteutettu omissa luokissaan. Näiden luokkien tulee täyttää rajapinta SoturiOminaisuus joka määrittelee seuraavat toteutettavat metodit: uuden viestin saapuessa suoritettava uusiViesti sekä kerroOminaisuus joka palauttaa kuvailun kyseisestä ominaisuudesta. Näitä komentoja voi sitten kysyä kirjoittamalla kanavalle !ominaisuudet.
Ominaisuudet:
SoturiHymni:
Tämä yhteisesti toteutettu ominaisuus oli alunperin kehitetty vain testaukseen, mutta hyväksi todettuna säilytettiin. Javasoturi tarkkailee viestejä ja tunnistaa sanan hymni, jolloin lähettää kanavalle teekkarihymnin. Myöhemmin Antti ohjelmoi botin laulamaan hymnin aina keskiyöllä ja hymnin sanat tulemaan kanavalle sellaisella viiveellä, että se mahdollistaa mukana laulamisen!
SoturiAltti:
SoturiAnna:
Ikinä ei ole liikaa yhteislaulua ja hymnin lisäksi tarvitaan muutakin teekkarilaulujen kirjoa, jotta kulttuuri välittyy fukseille. Javasoturi tarkkailee viestejä ja tunnistaa sieltä sanoja kuten irkki, laulu, Vipunen ja karaoke, jolloin Botti ehdottaa reipashenkistä yhteislaulua joko randomilla (yleiset avainsanat kuten laulu, karaoke) tai jotain tiettyä laulua (nainen, irkki, linkki…). Laulujen sanat tulemaan kanavalle pienellä viiveellä, jotta niiden mukana on kiva laulaa!
SoturiAntti:
Etsii Java-Apista Googlen sivuhaulla vastauksia käyttäjien kysymyksiin käyttäen URLConnection-luokkaa. Reagoi kysymyslauseisiin joiden sisältämiä yli nelimerkkisiä sanoja se yksitellen etsii Googlella Apista ja palauttaa ensimmäisen saamansa hakutuloksen. Voidaan käyttää myös komennolla !api jolloin huomioon otetaan kaikki komennon jälkeen tulevat hakusanat. Google ei ilmeisesti toivoisi hakukonettaan käytettäväksi koneellisesti, joten hakujen mahdollistamiseksi botin tulee leikkiä olevansa normaali Mozilla-selain.
Botin lähdekoodin palauttamisen jälkeen havaittiin myös ominaisuuden tekemien hakujen suuren määrän aiheuttavan 403 Fordidden-virheitä Googlen suunnalta. Parantelin koodia siten että kysymyksen havaittuaan se lähettää yksittäisten sanojen sijasta koko lauseen (lyhyet sanat karsittuna) haettavaksi OR-notaation kera, jolloin jos mikä tahansa lauseen sanoista löytyy apista, saa käyttäjä vastauksen. Google toki luokittelee korkeammalle sivun jossa esiintyy mahdollisimman moni sanoista, joten vastausten oikeellisuus parantui myös.
SoturiLaura:
Tässä ominaisuudessa Javasoturi yrittää vastata yleisimpiin kysymyksiin. Varsinkin “ei toimi”, “ei skulaa” ja vastaavankaltaisiin viesteihin reagoidaan. Reagointi on toteutettu siten, että botti etsii tulleesta viestistä tiettyjä merkkijonoja, jotka eivät välttämättä ole kokonaisia sanoja, vaan esimerkiksi sanojen vartaloita. Näin se voi reagoida erilaisiin taivutusmuotoihin. Vastaus on joko vakio, tai botti arpoo sen satunnaisesti.
Itse vastaukset on pyritty toteuttamaan siten, että käyttäjän tarkentaisi ongelmiaan. Esimerkiksi “ei toimi” -valitukseen vastataan “Valittaako kääntäjä jotain?”, jolloin kyselijä saattaa vastata, että “Joo, se heittää ArrayIndexOutofBoundsExceptionin” . Muut botin ominaisuudet taas osaavat reagoida tähän ja keskustelu jatkuu hyödyllisesti.
Tämä ominaisuus reagoi myös muiden Javasoturin ominaisuuksien antamiin neuvoihin. Mikäli kysyjä ilmentää hämmennystään vastauksen saatuaan, tämä luokka arpoo sopivan vastauksen. Nämä ominaisuudet olivat tärkeimmät, mutta luokassa on vielä pari muutakin ominaisuutta. Kaikki kuitenkin toimivat samalla periaatteella.
SoturiLauri:
SoturiMaiju:
Tässä ominaisuudessa Javasoturi tunnistaa epäonnistuneita irc-komentoja (l. ilman kauttaviivaa laitetut esim. exit, whois) ja kommentoi niihin liittyen. Lisäksi tunnistaa sanan java ja 30% todnäk. vaihtaa otsikon javamyönteiseksi. Lisäksi tunnistaa taukoon liittyvä sanojaa, jolloin ehdottaa taukojumppaa. Taukojumpan liikket tulee hieman viiveellä, toteutettu säikeen sleep() metodilla. Tunnistus tapahtuu siten, että Soturi tarkkailee kanavalle lähetettyjä viestejä ja reagoi tiettyihin sanoihin.
SoturiMikko:
Ominaisuuden pohjalla on ajatus, että bottimme on rajattu java-assariksi eikä siedä kun puhutaan matematiikasta, joka ei ole bottimme vahvuuksia. Omaisuus etsii siis irkkaajien viesteistä matematiikkaan liityviä sanoja String-luokan contains-metodilla ja sen jälkeen katsoo Date-luokasta periytyvillä metodeilla kellonajan ja kommentoi sen mukaan mikä bottimme olotila siihen aikaan päivästä on. Halusin nimenomaan tutkia tuota kellonajan mukaan toimimista, koska se näytti hyödylliseltä ja sen avulla botille saattoi toteuttaa ajanjaksoja jolloin se käyttäytyy samalla tavalla ja vaihtaa käyttätymistään tietyin väliajoin. Käytin Date-luokkaa (vaikka se on jo hieman vanhentunut) uudemman Calendar-luokan sijaan, koska sieltä löytyi juuri omiin ratkaisuihini sopivat valmiit metodit.
SoturiTaija:
Oma ominaisuuteni oli kannustusominaisuus, eli tarkoitus oli tehdä assaribotti kannustaman tuskaisista tunnelmista kärsiviä koodareita ystävällisillä kommenteilla. Alun perin laitoin botin arpomaan muutamista eri kannustavista kommenteista yhden ja tulostamaan sen, jos kanavalla annettaisiin käsky !ahdistaa tai !masentaa yms. Sitten kun sovimme tekevämme botista mahdollisimman ihmismäisen, ns. “aidon” assarin, niin muutin botin tunnistamaan tekstin keskeltä sanat, jotka viittavat ahdistukseen, tuskaisuuteen, masennuksiin ja kirosanoihin, ja sitten arpomaan sopivan kannustavan kommentin. Yhteiskoodauksen jälkeen botin ominaisuutta vielä muutettiin siten, että se reagoi vain tiettyjen nimimerkkien teksteihin. Tämä tehtiin sen takia, että botilla oli myös kettuiluominaisuus, eikä olisi ollut kovinkaan aidon oloista, jos botti olisi ensin kannustanut samaa henkilöä ja sitten piruillut päälle. Niinpä päädyimme tähän vaihtoehtoon, jossa botti valitsee nimimerkin perusteella, ketkä ovat lemppariopiskelijoita, ja ketkä eivät.
SoturiValtteri:
Ominaisuus, joka heittää kanavalle linkin suoraan Janne Käen viime vuoden luentokalvoihin. Reagoitavien sanojen skaala kattaa suurimman osan tärkeimmistä Javan osa-alueista, kuten säikeet, taulukot tai swing-ohjelmoinnin. Reagoi sanaan taivutuksen yleisimmissä muodoissa, myös lauseen keskellä.
Te jotka ette ole vielä kirjoittaneet omasta ominaisuudestanne: Kirjautukaa sisään ylläpitoon ja valitkaa yläpalkista Hallitse ja tämän viestin kohdalla Muokkaa. Kiitos!
-Antti