Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: mIRC

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.

Tekstin tulostus käyttäjän tekemällä komennolla, nk. "aliaksella" /pukkitulee

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!

Fibonaccin luvut

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

Highlightien automaattinen ylöskirjaaminen...

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

...ja lukeminen /awaylog-aliaksella

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

Hauska tietää

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!

Linkkejä

Tietoa sivustosta