A mIRC scriptnyelve |
A mIRC kezelőfelületével és
parancsrendszerével már megismerkedtünk - de van a mIRC scriptelésnek
interaktívabb része is, s mivel eddig még nem találkoztunk vele, az |
III. rész: Remote |
A programozáskor legtöbbet
használt rész egyúttal a legösszetettebb is - IRC kliensünk egy-egy ingerre
való reakciójának közvetítése mellett az Aliases és a Popups szerepét is
képes ellátni. Ha Remote scriptünkben akarunk új parancsot elhelyezni, akkor
azt a sor elején lévő alias parancs segítségével tehetjük meg (a szintaxis
innentől megegyezik az Aliases-nél írtakkal), amennyiben pedig menü írására
szeretnénk használni, a sor elején lévő menu
szócskával hozhatjuk mIRC-ünk számára ezt nyilvánvalóvá (a menu szó után az
adott ablak neve kell hogy szerepeljen, majd a továbbiakban a Popups-ban
tanultak szerint cselekedhetünk). Az
inger-figyelés szintaxisának megértéséhez fontos tudni, hogy a mIRC-ben egyes
host-okhoz különbféle User-szinteket rendelhetünk (lásd Users fülecske),
ezáltal szabályozva, hogy egy-egy kitüntetett felhasználóval szemben miként
viselkedjen kliensünk. Amennyiben egy külső hatásra mindenkinek egyformán
kell felelni, ezt a részt figyelmen kívül hagyhatjuk. A ctcp és a raw
figyelések kivételével egységes formátumban kell megadni a különböző
eseményekre szánt reakciókat: on [felhasználó
szint]:[inger]:[esetleges paraméter(ek)]: { [reakció]} Ha
pl. azt szeretnénk, hogy mindenkit üdvözöljön a scriptünk, aki a #magyar
csatornára érkezik, akkor ehhez az on
*:JOIN:#magyar: { /msg $chan Szia $nick $+ ! } sort kell a Remote-ba szúrnunk (a $nick,
$chan, $+ függvények jelentését lásd. az Aliases-ről szóló cikkben). A
Remote-nál is használhatunk kitüntetett karaktereket - egyikük a ^, melyet közvetlenül a
felhasználó szintje elé rakva eltüntethetjük a mIRC alapértelmezett reakcióit
(pl. JOIN-nál a csatira írt információt arról, hogy valaki érkezett). A másik
két fontos karakter pedig a * és
a ? - őket a paramétereknél és a
felhasználó szintek megadásánál lehet használni (a *
tetszőleges karaktersorozatot, a ? pedig
tetszőleges karaktert helyettesíthet). A * és
a ?, #
társukkal együtt akkor is használható, ha azt kell megadni, hogy mely
helyeken érvényes az adott szabály - a ? azonban így
a privát msg-ket, a #
pedig az összes csatornát jelöli, míg a * a
privát msg-ket és a csatornákat együttesen
szimbolizálja. E
havi scriptünkben a CTCP PING válaszát fogjuk kicserélni egy-egy meglepő
véletlenszerű szövegre - de előtte nézzük végig a legfontosabb ingereket és
paramétereiket: on[felh. szint]:TEXT:[szöveg]:[hely]: { [parancs] } - ha az adott
szöveget az adott helyen írja valaki, akkor végrehajtódik a parancs. Hasonló
szintaxisú: NOTICE, ACTION. on [felh. szint]:OP:[csatorna]: { [parancs] } - akkor fut
le a parancs, ha valaki OP-ol valakit az adott helyen. Hasonló szintaxisú: DEOP, VOICE, DEVOICE, HELP (IRCNet-en
nincs), DEHELP (IRCNet-en nincs), SERVEROP (ha netsplit miatt a server opol valakit), JOIN, PART, KICK, BAN, UNBAN, MODE, SERVERMODE, TOPIC. on [felh. szint]:QUIT: { [parancs] } - ha valaki
lelép IRC-ről, akkor a parancs végrehajtódik. Hasonló szintaxisú: START (amikor a mIRC betöltődik), CONNECT
(szerverrel való sikeres kapcsolat megkezdése esetén), USERMODE
(felh. mód váltása esetén). CTCP [felh. szint]:[paraméter]: { [parancs] } - adott
paraméterrel küldött CTCP esetén fut le a parancs. raw
[raw száma]:[paraméter]: { [parancs] } Nem
véletlenül került a raw a legutolsó helyre, hiszen
ez a legösszetettebb az összes közül - gyakorlatilag bármit figyelhetünk vele
(s egyes dolgokat kizárólag vele tudunk figyelni), csak az adott parancshoz
tartozó számot kell tudnunk hozzá. Ennek megértéséhez, és használatához fontos
ismerni az IRC RFC-t [1459] (itt van leírva, hogy miként is működik ez az
egész rendszer), vagy - kevésbé érdeklődőknek, és az egyszerű kezelőfelületet
kedvelőknek - érdemes elolvasni, és használni a Jeepster féle IRC Numeric
Reference-et, melyet a www.ircworks.com címről lehet letölteni. Példaképpen
néhány fontosabb hibaüzenet száma: 406 - nem találtam ilyen
nick-et 432 - a nick hibás 433 - a nick foglalt 471 - a csatornára nem férsz
be 473 - a csati +i-s 474 - a csatiról BAN-olva
vagy 475 - a csati jelszavas 482
- nem vagy opos a csatin. Eme
információzuhatag után nézzük végre az ígért példát! Sokan nem szeretik, ha
PING-elik őket mások - nekik lesz most egy kis meglepetés: a következő script
használatával a CTCP PING válasza helyett egy véletlenszerű szöveget kap a
PING-elő válaszul. ctcp *:PING:{[enter] ;ha bárki CTCP PING-et
küld nekünk, akkor a következő utasításokat kell végrehajtani: [enter] haltdef [enter] ;letiltjuk az eredeti
választ [enter] %ra = $rand(1,3) [enter] ;a %ra változónak a
$rand függvény segítségével véletlenszeru értéket adunk (1-től 3-ig terjedőt)
[enter] if %ra = 1 { %szoveg =
Miert vagy ra kivancsi $nick $+ ? } [enter] elseif %ra = 2 {
%szoveg = $nick $+ , $nick $+ , nem mondtak meg neked, hogy ezt nem illik? } [enter] else { %szoveg = Pong!
8) } [enter] ;a random értéktől
függően kiválasztunk egy szöveget, ami a válasz lesz [enter] ctcpreply $nick PING
%szoveg [enter] ;elküldjük a szöveget
válaszként a PING-re [enter] unset %szoveg [enter]
unset %ra [enter] ;a használt változókat
lenullázzuk, hogy ne maradjon bennük szemét [enter] } [enter] Mivel
esetenként lehetséges, hogy egyes script-részeket - pl. ezt a szöveges ping választ - nem szeretnénk használni, érdemes
csoportokba szervezni az esetlegesen kikapcsolandó részeket. A csoport eleje
egy #[csoport neve] [on/off]-al
kezdődik, ahol természetesen az on jelzi a
bekapcsolt, az off pedig a kikapcsolt állapotot, a
csoport vége pedig egy #[csoport neve] end-el
van jelölve. A későbbiekben az /enable [csoport neve], ill. a /disable [csoport
neve] parancsokkal tudjuk engedélyezni vagy letiltani az
adott csoport használatát. Az utasítások végrehajtását szépítendő, gyakran
lehet szükségünk arra, hogy egy-egy parancs ne jelezzen vissza, miután
sikeresen lefutott (eredetileg ezt tenné pl. az enable,
vagy a disable is, ill. az msg-k
is látszanak a képernyőn, mikor küldjük őket) - ilyen esetekben az utasítás
elé közvetlenül egy pontot kell tenni (pl. /.msg),
így annak futásáról a felhasználónak semmiféle tudomása nem lesz. A
Remote scriptek legfőbb problémái abban rejlenek, hogy legtöbbjük
folyamatosan teszi teendőit, nem figyelve a floodolásra - a netsplitek és a
lag elkerülése végett ugyanis a serverek automatikusan eltávolítják azokat a
szerverről, akiknek túlságosan nagy az adatforgalmuk. Ha pl. a scriptünk
minden köszönőnek visszaköszön, akkor egy rosszindulatú felhasználó a
köszönések gyors ismétlésével kifloodolhat minket a szerverről. Egy
helyesen megírt script mindig figyel az ilyen eshetőségekre - így pl. a
CTCP-t küldő illető CTCP-it 20 mp-re rögtön ignore-olhatjuk a fenti
scriptben, egy .ignore -tu20 $wildsite parancs
segítségével. Mivel az emberek többnyire szeretnek tudni arról, ami velük
történik - s ez IRC-n sincs másként - az eredeti válasz letiltását kiegyensúlyozandó,
érdemes egy echo 4 -a *** $1 from $nick $+ ! sort is
beszúrni a CTCP-k figyeléséhez, hogy a felhasználó is értesüljön a |
Varga Gábor |