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] 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: $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: 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 |