A mi mIRC-ünk...

A mIRC programozása nem igazán tartozik a kötelező iskolai tananyaghoz, de még az egyetemen se oktatják a legnagyobb lelkesedéssel. Egyáltalán, tudta valaki, hogy a mIRC-et programozni is lehet? Na, hát ha eddig nem tudta, akkor ezennel megtudta a kegyetlen valóságot: igen, a mIRC-et is lehet programozni. Hogy hogyan, azt fogja bemutatni ez a cikk.

I. rész: Popups

Rengeteg mIRC script látott már napvilágot, melyek mindegyike arra esküdött, hogy ő a legjobb. Ezek legtöbbje azonban abba a hibába esik, hogy egyszerre akar mindenkinek megfelelni. Az egyik legelterjedtebb script, a ShowDown, szintén sokoldalúságának köszönheti sikerét: rengeteg kliens-gyilkoló és egyéb harci eszközt ad azoknak, akik háborúzni akarnak - ugyanakkor hatalmas színes grafikák tömkelegével lepi meg a szelídebb szívű felhasználókat. Ahhoz, hogy valakinek OP-t adhassunk almenükben kell szaladgálnunk - míg a jóval kevesebbet használt opciók szintén hasonló almenükben találhatóak meg. Félig tökéletes scriptet kap tehát mindenki, ám igazán egyénre szabott menü- és parancsrendszert egyik fél sem.

Több érv is szól a már kész scriptek használata mellett - köztük legfőképpen az, hogy valaki más már megírta őket, s nem kell időt fordítani elkészítésükre -, de ha sokat IRC-zünk, érdemes megvizsgálni az ellenérveket is, melyek egy részét fentebb is olvashattad. A beépített önreklámozás mellett ezen scriptek másik nagy hátránya, hogy nem ismerjük a kódjukat, azaz előszeretettel tartalmazhatnak akár különbféle rejtett kiskapukat - mint ahogyan azt nem egy meg is teszi.

A mIRC programnyelve könnyű, ennek ellenére kezdetben még akadhatnak problémák egy-egy ötlet kivitelezésével, ha másért nem, hát a megfelelő parancsok ismeretének hiányában. Sorozatunkban megpróbáljuk az Olvasót átsegíteni ezeken a kisebb akadályokon - persze ehhez az Ön figyelmére és logikájára is szükség lesz.

Egy mIRC script három nagy részre bontható, melyek többnyire külön fájlokban is találhatóak. A leggyakrabban használt rész a "remote", melyben azt szabhatjuk meg, hogy mIRC-nk milyen ingerre miképpen reagáljon. Jelenlegi beállításainkat a "Tools/Remote..." menüpont alatt találjuk. A másik nagy rész az "aliases", ahol gyakran használt algoritmusokat írhatunk le, hogy aztán egyetlen parancs vagy gombnyomás segítségével bármikor hivatkozhassunk rájuk. úgy is mondhatjuk, hogy új parancsokat készíthetünk vagy a régieket definiálhatjuk át itt. Mi a harmadik résszel, a "Popups"-al fogunk foglalkozni először, amely a feljövő menürendszert hivatott észben tartani. Ennek a kódját a "Tools/Popups..." menüpont alatt találjuk.

A menü szerkezeti felépítése már első látásra is egyértelmű: a sor elején a menüben megjelenő szöveg szerepel, melyet egy ":" választ el a parancsoktól, amelyekre hivatkozik. Ha több mint egy parancs áll a ":" után, akkor azok "{" "}" jelek közé kerültek - innen tudja a mIRC, hogy egybe tartoznak. Három kiemelt szerepű karakter van, melyek közül az egyik a "-", amely egy vízszintes vonalat húz a két menüpont közé. A második a "." ami közvetlenül a sor elején van, s azt eredményezi, hogy az adott opció a felette lévő első "." nélküli menüpont almenüje lesz. A harmadik a "&" jel, amely gyorsbillentyűt rendel az utána álló betűt használva az opcióhoz (azaz, ha valaki a menük megjelenése után megnyomja az adott billentyűt, akkor az egyenértékűnek számít azzal, mintha erre a menüpontra kattintott volna). A "."-ok halmozásával természetesen további almenüket is készíthetünk.

Annak érdekében, hogy egy kicsit közérthetőbb legyen a fenti magyarázat, nézzünk mindjárt egy példát! A Tribe nevű scriptben láttam először azt a kiváló ötletet, hogy az OP-adás és elvevés ugyanazzal a menüponttal történik: ha a kijelölt illető @-os volt, akkor elveszi tőle, ellenkező esetben ad neki @-ot. Ahhoz, hogy ezt megírjuk, ismernünk kell néhány függvényt és algoritmus elemet. Ez első hallásra vészesen hangozhat, főleg akkor, ha még nincs a kedves Olvasónak programozási ismerete, de amint mindjárt kiderül, nincs benne semmi nehézség. Mindenekelőtt ki kell választanunk, hogy ez a parancs az oldalsó nicklista menüjében legyen - ehhez a Popups menü ablakán belül kattintsunk a "View/Nickname list"-re!

A mIRC-ben a függvények "$" jellel kezdődnek, s esetleges paramétereik zárójelben vannak közvetlenül nevük után. A menünkhöz most csak háromra lesz szükségünk. Ezek nevei, s visszatérési értékei:

$me - a becenevet adja vissza

$chan - az aktuális csatorna nevét kapjuk meg

$snick(csatinév, sorszám) - az adott csatornán a . kijelölt nicket adja vissza

Az algorimuselemek közül most csak az eldöntést fogjuk használni, mely hasonlóan a legtöbb nyelvhez itt is az angol "ha" szócskának felel meg:

IF (feltétel) { parancs arra az esetre ha a feltétel igaz }

ELSEIF (feltétel) { parancs arra az esetre, ha az előző nem igaz, de az új feltétel igen (elhagyható) }

ELSE { parancs arra, az esetre ha a fentiek egyike sem nem igaz (elhagyható) }

Használunk egy operátort is, az "isop"-ot, amely akkor ad igaz értéket, ha az előtte álló nick OP-os a mögötte lévő csatornán.

A kód megértéséhez természetesen ismerni kell az IRC parancsokat is (jelen esetben a "mode"-ot. Erről, és a bot parancsokról (lásd később) magyar leírást a http://w3.swi.hu/video/irc oldalon találsz). Az átláthatóság kedvéért "[ENTER]" felirattal jelöltem, hogy hol kezdődnek az új sorok, ezeket természetesen NEM szabad a kódba beleírni, helyettük csupán ENTER-t kell nyomni. A ";"-al kezdődő sorokat a mIRC nem veszi figyelembe, ide írhatjuk a megjegyzéseket. A kód tehát:

&OP/DEOP: { [ENTER]

if ( $snick( $chan, 1) isop $chan ) { mode $chan -o $snick( $chan, 1) } [ENTER]
;ha van a kijelölt nick-nek @-a, akkor elvesszük[ENTER]

else { mode $chan +o $snick( $chan, 1) } [ENTER]

;különben adunk neki[ENTER]

} [ENTER]

A menü már működik is, de van egy szépséghibája a programunknak: nem számol azzal az esettel, hogy esetleg nincs is operátori jogunk a csatornán (hiszen akkor mindegy, hogy van-e az adott illetőnek @-a, sem elvenni sem adni nem tudunk neki). Bővítsük ki a scriptet úgy, hogy ha nincs @-unk, akkor kérjen az adott illetőtől (azt feltételezve, hogy az illető bot)! Természetesen az "[ENTER]"-eket most sem kell beírni!

&OP/DEOP/OPME: { [ENTER]

if ( $me isop $chan ) { [ENTER]

;ha van @-om a csatin, akkor lefutnak az előbbiek[ENTER]

if ( $snick( $chan, 1) isop $chan ) { mode $chan -o $snick( $chan, 1) } [ENTER]

else { mode $chan +o $snick( $chan, 1) } [ENTER]

} [ENTER]

;ellenkező esetben kérek az illetőtől[ENTER]

else { msg $snick( $chan, 1) OP $$?="Password?" } [ENTER]

} [ENTER]

A programunk így abban az esetben, ha nincs @-unk, felhoz egy ablakot, melyben megkérdezi a bothoz a jelszavunkat, majd OP-ot kér tőle. Ehhez a $$?="megjelenítendő szöveg" függvényt használtuk.

A menüpont egyetlen szépséghibája most már csupán az, hogy egyszerre csak egy nick-et tudunk vele opolni/deopolni. Persze néhány újabb függvény bevezetésével ezen is segíthetünk:

$iif(feltétel, visszatérési érték ha igaz, visszatérési érték ha hamis ) - az IF parancs függvénybeli változata, melyet most arra fogunk használni, hogy ha a kijelölt illetőnek van @-a, akkor "-o" műveletet hajtsunk rajta végre, ha pedig nincs, akkor "+o"-t. $+ - két karaktersorozatot lehet vele összekapcsolni. Pl. "Al $+ ma" = "Alma". &OP/DEOP/OPME: { [ENTER]

if ( $me isop $chan ) { [ENTER]

mode $chan $iif( $snick( $chan, 1) isop $chan, -o, +o ) $+ $iif( $snick( $chan, 2) isop $chan, -o, +o ) $+ $iif( $snick( $chan, 3) isop $chan, -o, +o ) $snick( $chan, 1) $snick( $chan, 2) $snick( $chan, 3) } [ENTER]

else { msg $snick( $chan, 1) OP $$?="Password?" } [ENTER]

} [ENTER]

Már csak a végső simítás van hátra: az áttekinthetőség érdekében az OP/DEOP/OPME menüpontnak jobb, ha csak az a része van nagybetűvel, amit eredményezni fog a rákattintás (ha van OP-unk, akkor opol/deopol, ellenkező esetben OP-ot kér). Az $iif függvénnyel ezt könnyedén megcsinálhatjuk, csak az &OP/DEOP/OPME -t kell erre kicserélnünk:

$iif( $me isop $chan, &OP/DEOP/opme, op/deop/&OPME }

A popups-ban főmenüként érdemes elhelyezni, így egyszerre három parancsot érhetünk el villámgyorsan, s bármikor.

Végezetül összegyűjtöttem a menükben leggyakrabban használt függvényeket, és operátorokat, melyek ugyan benne vannak a mIRC helpjében, de könnyen elveszhetnek a rengetegben, s ráadásul ott az egész angolul van.

Függvények:
$nick(csatinév, szám) - visszaadja az adott csatin a . nick-et. Ha a = 0, akkor azt írja ki, hogy hányan vannak a csatin.

$opnick(csatinév, szám) - hasonló a $nick()-hez, de ez csak az OP-osokkal foglalkozik.

$vnick(csatinév, szám) - szintén, ezúttal nem az OP-osokkal, hanem a VOICE-vel rendelkezőkkel.

$x, ahol x egy szám - az x. paramétert adja vissza, használható $snick() helyett is a fenti scriptünkben. "$x-y" formában az x-től az y-ig lévő paramétereket kapjuk meg (feltéve, hogy nem csak egy paraméter van), "$x-"-ként használva pedig az összes x utánit.

$null - üres a visszatérési értéke, arra szokás használni, hogy megállapítsuk valamiről, hogy létezik-e. Pl. az "IF ( $2 = $null ) { parancs }"-nál akkor fog a parancs végrehajtódni, ha nincs második paramétere a meghívott parancsnak (ill. menü esetében nincs kijelölve 2 nick).

$active - az aktív ablak nevét kapjuk meg.

Operátorok:
ison - x ison y, igaz, ha x az y csatin van.

isvo - x isvo y, igaz, ha x VOICE-s y csatin.

ischan - x ischan, ha x csatornanév.

isignore - x isignore y, ha x ignoreolva van y paraméterrel (elhagyható).

isnotify - x isnotify, ha a norify list-edben van az illető.

(Ha az operátor elé közvetlenül "!"-et teszünk, akkor az ellentettjére változik a visszatérési értéke - pl. x !isop y akkor ad igazat, ha x nem opos y csatin.)

Varga Gábor