Kirjoittaja: Puhveli (13.12.2009)
MSL, mIRC Scripting Language, on jordanialaissyntyisen Khaled Mardam-Beyn kehittämään suosittuun Internet Relay Chat -asiakasohjelmaan sisäänrakennettu skriptikieli. Lennossa tulkattavaa kieltä käytetään automaattisen toiminnallisuuden ohjelmoimiseen tälle mIRC-nimiselle sovellukselle. Kielen laaja käskyvalikoima ja monipuolisuus selittävät suurelta osin mIRC:n sitkasta menestystä ilmaisten "irkkiklienttien" välisessä suosiotaistossa.
MSL:n kykyskaala on laajentunut tasaista tahtia sitten julkaisuvuotensa 1995. Sillä on jo alkuvaiheessa pystynyt paitsi käyttämään yleisiä yksinkertaisia IRC-käskyjä, myös graafisia ulkoasuelementtejä kuten pudotusvalikoita, painonappeja ja tekstikenttiä. Sittemmin mukaan on tullut tuki mm. äänitiedostojen käsittelyyn, pikselitason grafiikkaan ja DLL:ien toteuttamiseen.
Kielen tyypillisimpiä käyttökohteita ovat henkilökohtaista suojaa tarjoavat hyökkäysten torjujat, roskaviestien suodattajat sekä keskustelukanavien moderointioikeuksia jakavat ja valvovat automaatit. Harrastelijat ovat kehittäneet MSL:llä lukuisia valmiita laajennuspaketteja mIRC:iin, joista suosituipiin on jo vuosia lukeutunut kattava toimintokokoelma NoNameScript.
pukkitulee { say Pukki tulee! echo Oletko valmis? msg #ohjelmointiputka Valkeaa joulua! }
Tulostus nykyisessä ikkunassa (jälkimmäinen rivi näkyy vain käyttäjälle itselleen):
18.05 <nimimerkki> Pukki tulee! Oletko valmis?
Tulostus IRC-kanavalla #ohjelmointiputka:
18.05 <nimimerkki> Valkeaa joulua!
Seuraava Gwaurin kirjoittama /fibo-niminen skripti eli alias tulostaa Fibonaccin lukuja:
/fibo { set %luku 0 set %edellinenluku 1 if (!$1) { set %max 100 } ; Parametrina komennolle pitäisi antaa luku, if ($1) { set %max $1 } ; jota fibonatsin sarja ei ylitä. while (%luku < %max) { echo -s %luku set %luku $calc(%luku + %edellinenluku) set %edellinenluku $calc(%luku - %edellinenluku) } }
on 1:TEXT:*:#:{ if ( $pos($1-, nimimerkki, 0) ) { set %hilitlog %hilitlog $+ $time $chan <$nick> $1- $+ $chr(1) ; $+ on komento merkkijonojen katenointiin, ; $chr(1) on merkki, jota käytetään erottamaan eri viestit toisistaan } }
awaylog { if ( $len(%hilitlog) < 2 ) { echo Ei lukemattomia viestejä. } else { var %s var %c var %i = 1 ; käydään kaikki puskurissa olevat merkit läpi while (%i <= $len(%hilitlog)) { var %c = $mid(%hilitlog, %i, 1) if ( %c == $chr(1) ) { ; viestin loppu, näytetään väliaikaiseen %s-muuttujaan ; kirjain kirjaimelta kerätty viesti echo - %s var %s ; ja tyhjennetään %s-muuttuja } elseif ( %c == $chr(32) ) { ; MSL ei mahdollista välilyöntien (ASCII 32) oikein tulkitsemista kaikissa tapauksissa, ; mutta tällaiset kielen puutteet onkin tavallista kiertää tai paikata ; kekseliäällä "purukumilla", tässä tapauksessa korvaamalla ; välilyönnit samannäköisillä merkeillä %s = %s $+ $chr(160) } else { ; katenoidaan tämä merkki väliaikaiseen muuttujaan %s = %s $+ %c } inc %i } echo %s set %hilitlog ; tyhjennetään %hilitlog-puskuri } }
Tavalliseen keskusteluun liittyvien toimintojen ja visailurobottien lisäksi muita mielenkiintoisia MSL:llä toteutettuja aiheita ovat muutamat MP3-soittimet ja kolmiulotteista grafiikkaa sisältävät lyhyet demot!