Hogyan irhatunk saját Irc scriptet???

Rengeteg Fele es Fajta mIRC script letezik,de szerintem  vannak most is olyanok akik egyszerre 10 felet hasznalnak,ugyanis az egyiknek ez a resze jo,mert pl jo grafikak vannak benne,viszont ahhoz hogy opot adjunk
valakinek meg kell latogatni Az Actions\USER ACTIONS\ PROMODE\OP vagy valami hasonlo bonyolult eleresu menut.  Namarmost az ilyeneknek tudom ajanlani, hogy irjanak maguknak egy irc scriptet.Bar igaz hogy elsore igencsak bonyolultanak fog kinezni a dolog,Az ember ha rajon, nagyon konnyu csinalni.Tobb erv szol ugyan
amellett hogy hasznaljunk kesz scripteket,ugyanis ezt  mar valaki megirta es nem kell szorakozni vele, de gondoljunk bele,rengeteg tartalmazhat kibuvokat,mellyel akar egy megadott msgvel,vagy ctcp vel kikapcsolhatjuk az illeto mIRC-jet,vagy opot kerhetunk tole az o engedelye nelkul.Hat ez nem igazan baratsagos dolog.Na Nem szovegelek tobbet,Aljunk neki az erdemi resznek.A mirc programozas 3 fo reszbol all, ezek az Aliases, Popups, Remote. Az Aliasesben kulombozo parancsokat definialhatunk, a Popups Ban a Menunket irhatjuk at, a remote ba pedig azok kerulnek, hogy az irc-nk milyen
ingerre mit valaszoljunk.Namarmost: enszerintem a legegyszerubb a Popups resszel kezdeni.Tehat:
 


POPUPS
avagy hogyan irjuk at a mIRC menujet...

A popupsot ugy tudjuk atszerkeszteni, hogy a tools menu
popups reszere kattintunk.5 fele kulombozo popups van,
az egyik a Status, itt a status ablak menupontjat
irhatjuk at, A channel nel a csati menupontjat, a
query/chat nal a dcc es msg menupontokat, a nickname
listnel a nickre kattintasi menupontokat, a menubar nal
pedig a fenti csikhoz adhatunk hozza menupontokat.Ezek
kozt a view menunel valtogathatunk.

Remelem eleg vilagos voltam.A menu felepitese
egyertelmu.a sor elején a menüben megjelenô szöveg
szerepel, melyet egy ":" választ el a parancsoktól,
amikre 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, a "-", amely egy vízszintes
vonalat húz a két menüpont közé, 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,
és 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.peldaul:

Boci
.kutya:{
/join #a
/join #b
}
Namost ha ennyi all osszessen pl a status popupsjaban,
akkor ha a status ablakba kattintunk, egy "boci" menu
jelenik meg, aminek van egy "kutya" almenuje.Ha a
kutyara kattintunk, a mircunk fellep a #a es a #b
csatornara.Ezzel a modszerrel beallithatod pl hogy eleg
legyen valamelyik menure kattintanod, es a mirc
fellepjen azokra a csatornakra ahol allandoan ottvagy.
A mIRC ben kulombozo fuggvenyek vannak, ezek $ -el
kezdodnek.Ilyenek pl a $me (a neved adja vissza) $chan
(az aktualis csatornat adja vissza)
$snick(csatinev,sorszam) az adott csatin a kijelolt
nevet adja vissza.pl ha valamelyik menube beleirod hogy
/whois $me , akkor az akarmi legyen a nicked, rolad fog
egy whoist kerni

Vannak meg kulombozo algoritmusok, mint pl az "if" amely
a "ha" szocskanak felel meg. pl

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

valamint kulombozo operatorok:
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 notify list-edben van az illetô.

(ezek majd a tobbi resznel is elojonnek)
Tehat itt egy gombnyomassal masmilyen parancsokat is
vegrehajthatunk attol fuggoen, hogy milyen feltetelek
vannak. Pl:

&OP/DEOP: {
if ( $snick( $chan, 1) isvo $chan ) { mode $chan -v $snick( $chan, 1) }
;ha van a kijelölt nick-nek voiceja, akkor elvesszük
else { mode $chan +v $snick( $chan, 1) }
;különben adunk neki
}

Ha pedig az operatorok ele ! -et teszunk, a dolog pont
az ellenkezojere valtozik (pl x !isop y akkor ad igazat,
ha x nem opos y csatin.)

ezenkivul ami meg ide fontos lehet: $$1 = az elso
kijelolt nick
$$2 = a masodik kijelolt nick... es igy tovabb

Remelem ennyi eleg ennek a resznek a megertesehez.

---

Aliases:

A Tools/Aliases alatt található a mIRC azon része, ahol
új parancsokat definiálhatunk, vagy régieket másíthatunk meg.Az Aliases
felépítése triviális: a parancsnak szánt
szó után itt is "{" "}" jelek között van az algoritmus.
Néhány kiemelt névrôl szintén szólhatunk: az Fx, sFx és
cFx-eket (ahol x egy egész szám 0-13 között) parancs
neveként megadva F1-F12-vel, ill. Shift-el vagy
Control-al együtt megnyomott változataival érhetjük el
az adott parancsot.

A menüknél szerzett tudásunkat két fontos dologgal kell
bôvítenünk. Aki programozott már, annak ismerôsek a
változók - a mIRC-ben ezek kezelése rendkívül egyszerű,
még a típusukat sem kell megadni használatuk elött. A változók nevei "%"
jellel kezdôdnek - a késôbbiekben
ezzel a névvel tudunk hivatkozni egy adott számra ill.
szövegre, amit elötte értékül adtunk neki. Pl. ha
"%proba = kutya", akkor az "msg $active %proba"
eredménye az lesz, hogy az aktuális ablakba a "kutya"
szót írjuk. A változók aktuális értékeit a Variables
menüpont alatt tekinthetjük meg.

A ciklusok legalább oly fontosak, mint a változók -
igazán jó programot meglehetôsen nehéz nélkülük írni. A
ciklus az egymás után elvégzendô azonos alapú munkákat
egyszerűsíti le - adott esetben pl. nem kell tízszer
leírni ugyanazt a parancssorozatot, elég ha egy goto
parancs segítségével visszaugrunk egy ":" kezdettel
megadott cimkére, hogy újból lefuthassanak az utána álló
utasítások. Nagyon sok kiakadás forrása egy-egy
végtelen ciklus, ezért fontos figyelni arra, hogy minden
esetben fejezôdjön be annak futása, egy return vagy egy
halt parancs meghívásával. Míg az elöbbinél ha másik
parancsból lett meghívva, akkor visszaugrik annak
futtatásához, az utóbbinál tökéletesen leáll a program
futása. A következô ciklus például végtelen, mert nincs
olyan hely, ahol megállhatna:

%teszt = 0
:vissza
inc %teszt
echo -a %teszt
goto vissza

A dolog jelenleg a kovetkezokeppen nez ki: a %teszt
valtozonak 0 erteket adunk.
Megadunk egy visszaugrasi helyet ( :vissza. ha :123 -t
irtunk volna akkor a goto utan 123-at kellene irnunk)
A %teszt ertekehez hozzaadtunk egyet
kiiratjuk az aktiv ablakba az erteket
visszaterunk a : vissza hoz, az egesz kezdodik elorol

Jo kis muri, az egyetlen gond, hogy a mircunk elkezd 0
tol szamolni a vegtelensegig. Hogy ezt megakadalyozzuk,
be kell szurnunk a :vissza es a goto vissza sorok koze a kovetkezot:

if %a = 3 { halt }

Ezaltal a program 3 futas utan megall.

Két új függvényt is meg kell ismernünk a kód megértéséhez. Egyikük a
$len, amely egy adott szöveg hosszát adja vissza, másikuk pedig a $mid,
amely három paramétert kap: az elsô egy szöveg, a második az a szám,
ahányadik karakterére vagyunk kiváncsiak, a harmadik pedig az, hogy a
másodikként megadott karaktertôl számítva hány utánalévôt vegyen
figyelembe.
Nezzunk egy peldat.
Pl.: Az eggdrop1.3.23 as botoknak van egy bugja (hibaja).
Ha A nevedet eloszor [][][][] re azutan {}{}{}{} re valtoztatod es ezt
megismetled 2-3 szor, kiesik. Namost, mivel ezt eleg gyorsan nehez lenne
gepelni, nezzunk egy parancsot:
/eggbug {
/set %mynick $me
;a jelenlegi nickedet elraktarozza a %mynick valtozoba
/set %valt = 0
;%valt ot 0 ra irod at
:egg
;ide jon vissza ketszer
inc %valt
; %valt hoz hozzaadsz 1 et
/nick [][][][]
/nick {}{}{}{}
;nickvaltasok
if %valt = 2 { goto endeggbug }
;ket futas utan a :endeggbughoz megy
goto egg
; vissza :egg hez
:endeggbug
;ide jon ket futas utan
/nick %mynick
;visszairja az eredeti nicked
}

ezek utan a /eggbug parancsal ugyanaz tortenik, mintha sorban ezeket
irtad volna be
/nick [][][][]
/nick {}{}{}{}
/nick [][][][]
/nick {}{}{}{}
/nick azeredetineved

De ha mar itt az elobb a $len es $mid valtozokrol beszeltem, leirok egy
peldat, mire is jo ez:

bw {
if *1 == $null { echo 14 -a Hasznalat: /cn szoveg | halt }
set %1for 0,1
set %2for 1,0
set %lenght $len(*1)
set %count 1
set %colored ""
:stop1.cn
%colored = %colored $+  $+ %1for $+ $mid(%count,1,*1) $+ 
if %count >= %lenght { say %colored | unset %1for %2for %count %colored
%lenght | halt }
inc %count 1
:stop2.ice
%colored = %colored $+  $+ %2for $+ $mid(%count,1,*1) $+ 
if %count >= %lenght { say %colored | unset %1for %2for %count %colored
%lenght | halt }
inc %count 1
goto stop1.cn
}

itt nem irom oda a sorok utan, mi miert van. A lenyeg a kovetkezo: a /cn
szoveg utan a paros betuk feher alapon feketek, a paratlanok fekete
alapon feherek lesznek.

---

A Remote
Avagy a mIRC lelke :)

Ez a resz a tools menu remote alatt talalhato.Ez A mIRC legfobb es
legosszetettebb (tehat a legnehezebb) resze.Itt allithatjuk be, hogy a
mIRC mire hogyan reagaljon.Valamint Ez a resz kepes a popups es aliases
reszt is ellatni.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 eleji 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 mIRC-ü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ô történésekre való általunk kívá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
csatira é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
által felénk mutatott, elôre megadott reagációit egyes dolgokra (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 "*" - mint a legtöbb
helyen - 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.

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 (serverrel 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összettebb
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"
 

Ennyi információrengeteg 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életlenszerű é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 úgynevezett
"csapatokba" szervezni az esetlegesen kikapcsolandó részeket. A csapat
eleje egy "#[csapat neve] [on/off]"-al kezdôdik, ahol természetesen az on
jelzi a bekapcsolt, az off pedig a kikapcsolt állapotot, a csapat vége
pedig egy "#[csapat neve] end"-el van jelölve. A továbbiakban az "/enable
[csapat neve]", ill. a "/disable [csapat neve]" parancsokkal tudjuk
engedélyezni vagy letiltani az adott csapat 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, miszerint 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 érdemes az
utasítás elé közvetlenül egy pontot 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 autómatikusan eltávolítják
azokat a serverrô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
serverrô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 PING érkezésérôl. Az
echo parancs segítségével a képernyôre írhatunk - a négyes szám jelen
esetben az írás színét adja, míg a "-a" az aktuális ablakra való
hivatkozás (helyette állhat egy ablak neve is).

Egyenlore ennyi.

U.I.:Kulon koszonet Vide0nak a forrasanyagert.Ami ekezetekkel van irva,
az szo szerint az o muve.Ami nem, az azert van, mert angol a billenytyuzetem.