Ders: Scripting İleri Seviye
Yazan: L4roXyL - Hasan AYDENİZ
Tarih: 17 Ağustos 2012
Not: mIRCScripting.net dokumanıdır.


Evet arkadaşlar bu makalemizde mIRC Scripting-de kod yazarken daha kısa, hızlı ve işlevsel kod yazma bicimleri hakkında ornekler vereceğim. Ders iceriği scripting-de bildiğiniz kullanımınların, farklı kullanımlar ile daha işlevsel hale gelmesi ve bir takım orta/ileri seviye kod yazarları icin pratik ve değişik bilgiler icermektedir.


mIRC Scripting her zaman dediğimiz gibi hayal gucune bağlı, belirli yeterlilikler ile işgoren veya gelişime yonelik kodlar yazma sanatıdır.
Betik bir dil olduğundan, aynı işlevi getiren bir sonucu ceşitli farklılıklar ile yazabilme olanağını fazlasıyla tanımaktadır bize.


Ders başı uyarısı: Ders iceriği yeni kodlamaya başlamış veya normal duzey kodlayıcı arkadaşlar icin uygun değildir. Ders iceriğindeki bilgiler, zaten scripting konusunda belirli bir noktaya gelmiş(orta ve ileri duzey kod yazarları) kişilere yoneliktir.


Fazla uzatmadan dersimize başlayalım.



1- Olcum Parantezleri

Kod yazarken sık sık kullandığınız, daha doğrusu eski kodlara bakıldığında gorulen "[" - "]" parantezleridir.
Turkiye'de ki mIRC Scripting-de bu parantezler genellikle gereksiz bicimlerde kullanımaktadır(bu onizlemem forumlardaki bircok kodlar uzerindendir)

Bu parantezler esasında daha cok oncelik tanıma işlevi kullanılır.

Ornek:

Kod:
alias _x var %, $0 | while (%,) | return $~1

Şeklinde bir aliasımız var. Bu aliası kullanalım.

Kod:
//echo $_x(d1) $_x(d2) $_x(d3) $_x(d4)

Yaptığımızda:

-> d1
-> d2
-> d3
-> d4
--> d1 d2 d3 d4
Genişletmek icin tıkla ...

Sonucunu alırız doğal bir sıralama ile.
Şimdi olcum parantezlerini devreye sokalım, orneğin;

Kod:
//echo --> $_x(d1) $_x(d2) [ $_x(d3) ] [ [ $_x(d4) ] ]

Şeklinde kullandığımızda sonuc aşağıdaki gibi olacaktır.

-> d3
-> d4
-> d1
-> d2
--> d1 d2 d3 d4
Genişletmek icin tıkla ...

Gordulduğu uzere sıralama değişti.
Sıralamanın acıklamasını yapacak olursak, tek olcum/one getirme kullandığımız d3 ilk sıraya alındı. Cift olcum kullandığımız d4 verisi 2. sıraya alınmıştır.
Cift olcum kullanılan d4 verisini bu kullanımda her zaman 2. sırada olacaktır. Bunun sebebi kullanım esnasında ilk girilen olcum parantezi d3 verisine aittir.
Yani kısacası siz olcum yapsanız dahi, internal bir sıralama olacaktır her daim.
Olcum parantezleri ornek kullanımda değişik yerlere geldiği taktirde bir cok farklılıklar yapabilir.


Ornek:

Kod:
//echo --> $_x(d1) [ [ $_x(d2) ] $_x(d3) ] $_x(d4)


Sonuc:

-> d2
-> d3
-> d1
-> d4
--> d1 d2 d3 d4
Genişletmek icin tıkla ...

Aşağıdaki kullanımda tamamen tersden sıralama yapacaktır.


Kod:
//echo --> $_x(d1) [ $_x(d2) [ $_x(d3) [ $_x(d4) ] ] ]


Sonuc:

-> d4
-> d3
-> d2
-> d1
--> d1 d2 d3 d4
Genişletmek icin tıkla ...

Buraya kadar olcum parantezlerinin sıralama/oncelik tanıma hakkındaki işlevlerini gorduk.


Lakin bu parantezler farklı kullanımlarda değişik etkiler yapabilir.


Ornek:

Kod:
//var %. = deneme,/(e)/g | echo $regex(%.)

Şeklinde bir kullanım yaptığınızda:

* Invalid parameters: $regex
Genişletmek icin tıkla ...

Şeklinde bir hata alırsınız. Yani gecersiz parametreler hatası. Bu normaldir ve doğru bir bildirimdir.
Cunku $regex() kullanımı normalde $regex(text,re) şeklindedir. Şimdi burada "ama biz %. değişkenine atadık o kullanımı, neden gormuyor?" denilebilir.


İşte bu durumda oncelik/gelişim parantezlerini kullanabiliriz. Aynı kullanımı şu şekilde yaptığımızda:

Kod:
//var %. = deneme,/(e)/g | echo -> $regex( [ %. ] )

Sonuc:


-> 3
Genişletmek icin tıkla ...

Olarak donecektir. Yani $regex tanımı, girdiyi doğru olarak algılayıp cevabı verecektir.

Devam edelim. Olcum parantezleri oncelik tanıma konusunda hemen hemen her yerde gecerlidir.


Ornek:

Kod:
//echo -> $!ticks

Yaptığınızda sonuc:


-> $ticks
Genişletmek icin tıkla ...


Yani tanımın kendisi donecektir. İşte yine boyle durumlarda olcum parantezlerini devreye şu şekilde soktuğumuzda:

Kod:
//echo -> [ [ $!ticks ] ]

Sonuc:


-> 19714235
Genişletmek icin tıkla ...

Yani kısacası cift olcum parantezi kullandığımızda tanımda "!" olduğu halde yine işlevini gorur.
Bu konu hakkında gelişmiş ornekler verelim.

Ornek:

Kod:
//var %: = $!time $!chr(45) $!day $!chr(45) $!fullname | echo -> %:


Sonuc:

-> $time $chr(45) $day $chr(45) $fullname
Genişletmek icin tıkla ...

-

Ornek:

Kod:
//var %: = $!time $!chr(45) $!day $!chr(45) $!fullname | echo -> [ [ %: ] ]


Sonuc:

-> 19:39:28 - Sunday - xlis
Genişletmek icin tıkla ...


Buraya kadar olcum parantezleri hakkında, oncelik tanıma ve değer belirleme orneklerini gorduk.
Olcum parantezleri yukarıda verilen ornekler ve daha değişik şekiller ile kullanılabilir.


2- Matchtext Kısmında Kullanılabilir Değişiklikler

Matchtext kod yazan kişilere yabancı bir kelime gelmeyecektir. Bir takım event-lerde olayın gercekleşmesinde bir nevi sorgu teşkil eden text-dir.


Ornek:

Kod:
on *:text:*deneme*:#:işlev

Kullanımı, bulunduğumuz herhangi bir kanalda icerisinde "deneme" kelimesi gecen bir satır/text/yazı gonderildiğin -de- demektir.
Yukarıdaki kullanım aşağıdaki kullanım ile aynı işlevi gorur:

Kod:
on *:text:*:#:if (*deneme* iswm $1-) işlev

Bu kullanımlar zaten bildiğiniz şeyler.


Bazende ilk kelime şu olsun ve eğer 2. hatta 3. kelime varsa işlem yapalım gereksinimi duyulur.


Ornek:

Kod:
on *:text:*:#:if ($1 = !deneme && $2) işlev

Kullanımı, bulunduğunuz herhangi bir kanala gonderilen text-lerden birinci kelime($1) !deneme ise ve(&&) ikinci kelime($2) varsa demektir.


Yani kısacası bu olay sorgu eşleşirse calışır. (!deneme x - !deneme 1 - !deneme deneme gibi.)

Bu tur kullanımlarda yani eğer 2. kelimede varsa gibi kullanımlarda, text-i genellikle matchtext kısmından cıkarıp direk bir /if sorgusu icerisine entegre ederiz.

İşte tam burada normalde bitwise operatorlerinden olan "&" operatorunu kullanabiliriz.


Bitwise operatorlerinden olan "&" prefix-i "ve" manasına gelir. Yani scripting-deki "&&" gibi.

Yukarıdaki kodu bu operatoru kullanarak matchtext kısmına girebiliriz.


Ornek:

Kod:
on *:text:!deneme &:#:işlev

Yaptığınızda yukarıdaki kullanım ile aynı işlevi gorecektir.
Yani kısacası external bir sorgu yerine, internal bir sorgu gercekleşir. Bu kullanımda kodun daha hızlı calışmasını ve gereksiz karakter fazlalığından kurtulmasını sağlar.


Bir ornek daha verelim:

Kod:
on *:text:!deneme & &:#:işlev

Acıklaması: Bulunduğunuz herhangi bir kanala gonderilen text-ler icerisinde ilk kelime !deneme ise ve ikinci(ilk &) ucuncu(ikinci &) varsa demektir.


Yani aşağıdaki kullanımlar ile aynıdır.

Kod:
on *:text:*:#:if ($1 = !deneme && $2 && $3) işlev on *:text:!deneme*:#:if ($2 && $3) işlev on *:text:*:#:if ($1 = !deneme && $3) işlev

Vesaire.
Buraya kadar matchtext kısmında kullanılan "&" prefixinin ne işe yaradığını gorduk.

Devam edelim.


Matchtext kısmında regular expression kullanabileceğimizi daha once soylemiştim. Bunun icin gereken olay başına "$" prefixini eklemekdi.


Ornek:

Kod:
on $*:text:/^(merhaba|slm)$/iS:#:echo -> $regml(1)

Acıklaması: Bulunduğunuz herhangi bir kanalda gonderilen text-ler slm veya merhaba kelimesi ile başlayıp/bitiyorsa /echo ile yakalanan veriyi yansıt demektir.
Bilindiği uzere matchtext kısmında %değişken de kullanabilirsiniz.

Ornek:

Kod:
/set %d *deneme* on *:text:%d:#:işlev

Acıklaması: Gonderilen text icerisinde deneme kelimesi geciyorsa demektir.

Buraya kadar anlaşılmayan birşey yok sanırım.


Şimdi esas konuya gelecek olursak, $eval/$() sayesinde matchtext kısmında belirlediğimiz bir alias-ıda kullanabiliriz.

Ornek:

Kod:
alias _d return /^(s(e|)l(a|)m|m(e|)rh(a|)b(a|))$/iS on $*:text:$($_d):#:işlev

Acıklama: Oluşturduğumuz _d ismindeki aliasımıza geriye donuş işlemi ile(/return) bir regular expression eşleşmesi atadık. Bu eşleşme esasınsa slm/selam/selm/slam - mrhb/merhb/mrheba/merhaba/mrhba vs. kelimeleri ile eşleşir. Kısacası bulunduğumuz herhangi bir kanalda bu kelimelerden birisi gonderilen text-ler arasında sadece $1(1. kelime) ise işlev yapılır.

Daha gelişmiş bir ornek verelim. Bu ornek alias veya %değişken-lerinizi matchtext ve kanal kısmında da kullanabileceğinize ornektir.

Kod:
alias _ct on $*:text:$($_ct(text)):$($_ct(chan)):echo -> İŞLEV.

Acıklaması: Oluşturduğumuz _ct ismindeki aliasımızın kullanım şeklinde eğer 1. kelime($1) chan ise kanallar donecek, eğer yine 1. kelime text ise belirttiğimiz regular expression string-i donecektir. Yani kısacası TEXT olayında; _ct aliasında bulunan kanallar kısmındaki herhangi bir kanalda, text kısmında bulunan herhangi bir text gonderildiğinde /echo komutu(değiştirilebilir) uygulanır.



3- Dongu İcerisinde Dongu(ler) Kullanma

Bildiğiniz uzere /while komutu scripting-de donguler kullanmak icin kullanılır. Bu donguler icerisinde sorgular dahil olmak uzere bircok şey kullanabilir, hatta bazen dongu icerisinde dongu ve isterseniz dongu(dongu(dongu(vs.)))) şeklindede kullanabilirsiniz.

Ornek bir while dongusu:

Kod:
//var %& = 5 | while (%&)

Sonuc:

-> 5
-> 4
-> 3
-> 2
-> 1
Genişletmek icin tıkla ...

Şeklinde basit bir ornek.

Peki /while icerisinde /while kullanılabilirmi? Evet kullanılabilir.
Ciddi bir ornek verelim:

Kod:
alias _wh } dec %; } } dec %: } }


Sonuc:

-> First Loop: 3
-> First Loop: 2
-> Second Loop: 6
-> Second Loop: 5
-> Second Loop: 4
-> Last Loop: 9
-> Last Loop: 8
-> Last Loop: 7
-> Last Loop: 6
-> Last Loop: 5
-> Last Loop: 4
-> Last Loop: 3
-> Last Loop: 2
-> Last Loop: 1
-> Second Loop: 3
-> Second Loop: 2
-> Second Loop: 1
-> First Loop: 1
Genişletmek icin tıkla ...

Acıklaması: Oluşturduğumuz /_wh aliasımız 3 adet while dongusu kullanılır. İlk dongude değeri ilk başta %: değişkeni 2 ile eşleştiğinde, 2. dongu başlatılır. 2. dongudeki değeri ilk başta 6 olan %; değişkeni 4 ile eşleştiğinde, 3. dongu başlatılır. 3. dongu 0 ile eşleştiğinde, 2. dongu devam eder. Ve 2. dongu yine 0 ile eşleştiğinde, ilk dongu son olarak devam ederek 0 ile eşleşir ve dongulerin tamamı kapatılır.

Buradaki mevzu yasakpara nedir?

Scripting icerisinde aynı anda 2 dongu kullanamıyoruz.


Yukarıdaki ornekde gorduğunuz uzere ozetlemek gerekirse:

-> Start First Loop
--> Start Second Loop
---> Pause First Loop
----> Start Last Loop
-----> Pause Second Loop
----> Finish Last Loop
---> Continue Second Loop
--> Finish Second Loop
--> Continue First Loop
-> Finish First Loop
Genişletmek icin tıkla ...

Şeklindedir.

Donguler hakkında bir kac bilgi daha verelim.


While dongusu icerisinde /goto komutunu dongu olarak kullanamazsınız. Goto dongusu icerisinde /while komutunu dongu olarak kullanamazsınız. Goto icerisinde dongu olarak goto kullanamazsınız. (ilk goto-da bir dongu ise eğer)
Ornek:

Kod:
alias _th }

Sonuc:

-> 10
-> 10
-> 10
-> 10
-> 10
-> 10
Genişletmek icin tıkla ...

Acıklama: Farkındaysanız 10 tekrarlı bir dongu oluşturuyoruz. Lakin cıkan sonuc sayısı 6 adet. Bunun sebebi /tokenize ile ayrıştırdığımız(32 boşluk karakteri) "5 10 15 20 25 30" verileri toplam 6 adettir. Ve $* tanımını aynı komut icerisinde(/echo) kullandığımız icin while dongusu başlamaz. $* işlemi uygulanır ve dolayısıyla 6 tekrar yapılır. Sonucların devamlı 10 cıkmasının sebebi donguyu 10-dan aşağıya 0-a eşleşinceye kadar /dec ettirdiğimiz icin, ilk dongunun değişkeni sabitlenir. Zaten ilk dongude cıkan sonucda 10 dur.

Not: $* ayrıştırıcı tanımı while icerisinde farklı bir komut icerisinde bağımsız kullanılabilir. LÂkin bu kullanımda dahi onceki dongu pause konumuna gecer. $* işlemi bittikten sonra devam eder. Kullanıma gore bu işlevler değişkenlik gosterebilir. Orneğin $* tanımını ilişiksiz ve donguye ait komut veya komutların işlev satırından once kullanırsak, ilk once $* tanımının işlevi gercekleşir. Ardından donguye atanan diğer komutlar gercekleşir.

Ornek:

Kod:
alias _th }

Sonuc:

-> 5
-> 10
-> 15
-> 20
-> 25
-> 30
-> 10
-> 9
-> 8
-> 7
-> 6
-> 5
-> 4
-> 3
-> 2
-> 1
Genişletmek icin tıkla ...

Diğer olarak eğer ilk başta dongunun diğer komutunu ve sonraki işleve $* atarsak, ilk dongu atanmış olan esas komutu 1 defalığına gercekleştirir. Devamında $* ya atanmış işlemleri gercekleştirir. Bu işlemler sonlandığında, dongu devam eder.

Ornek:

Kod:
alias _th }

Sonuc:

-> 10 d
-> 5 t
-> 10 t
-> 15 t
-> 20 t
-> 25 t
-> 30 t
-> 9 d
-> 8 d
-> 7 d
-> 6 d
-> 5 d
-> 4 d
-> 3 d
-> 2 d
-> 1 d
Genişletmek icin tıkla ...

Acıklama: Sonuc kısmında d ve t harflerini ben manuel olarak ekledim. d = dongu / t = tokenize anlamındadır. Anlamanız daha basit olacaktır bu şekilde.

Sonuc olarak yukarıdada değidiğim gibi kullanım şekillerine gore değişiklikler gosterebilir.



4- Tokenize İle İnternal Dongu

Bildiğiniz uzere /tokenize komutunu scripting-de ayrıştırma icin kullanılır. Genellikle socket-larda kullanılan /tokenize esasında daha değişik işlemler icinde kullanılabilir.

Ornek bir tokenize işlemi:

Kod:
//tokenize 32 ex1 ex2 ex3 ex4 | echo -> $1-

Sonuc:

-> ex1 ex2 ex3 ex4
Genişletmek icin tıkla ...

Şeklindedir. Yani komutdaki text kısmı artık ayrı birer kelimedir.


Ornek:

Kod:
//tokenize 32 ex1 ex2 ex3 ex4 | echo -> $2-3

Sonuc:

-> ex2 ex3
Genişletmek icin tıkla ...

Buraya kadar basit /tokenize kullanımlarını gorduk.

Şimdi /tokenize ile nasıl sorgulamalar yaparız, bu konuya değinelim.
Scripting-da bazen basit sorgulamak icin /while vb. donguler kullanılırız.
İlk oncelikle /tokenize ile ilişikli kullanılan $* tanımını kullanalım. $* tanımı ayrıştırılan kelimeleri ayrışma sayısınca satır satır verir. Bunu en basitinden /echo kullanarak gorebilirsiniz.

Ornek:

Kod:
//tokenize 32 ex1 ex2 ex3 ex4 | echo -> $*

Sonuc:

-> ex1
-> ex2
-> ex3
-> ex4
Genişletmek icin tıkla ...

Buraya kadar anlaşılmayan birşey yok sanırım. Zaten bunlar bildiğiniz bilgiler.

Peki $* kullanarak sorgulama veya değişik işlemler nasıl yaparız. Orneğin yukarıdaki ex* kelimelerini sıralarken hepsini buyuk yazdıralım.

İşlem:

Kod:
//tokenize 32 ex1 ex2 ex3 ex4 | scid 0 echo -> $!upper( $* )

Sonuc:

-> EX1
-> EX2
-> EX3
-> EX4
Genişletmek icin tıkla ...

Not: /scid kullanmamızın sebebi, işlevi sabitleyerek uygular(/timer-ın sabitleme ozelliği gibi) uzerinde uygular. Dolayısıyla $!upper kısmı internal doner.($upper(text))

$* ile sorgulama ornekler

Orneğin herhangi bir kanal penceresindeki secili nicklerden($snicks) belirlediğimiz harf ile başyana nickleri listelemek isteyelim.
Bunun icin /while yada cok iyi kombine edilmiş bir regex kullanmamız gerekebilir.


While ile ornek:

Kod:
alias _nl inc %. } }

Kullanım: /_nl

Şimdi aynı işlevi $* ile yapalım.

Ornek:

Kod:
alias _nl2 }

Kullanımı: /_nl2

Gorduğunuz gibi external bir dongu olmadan aynı işlemi /tokenize ile birlikte kullanılan $* sayesinde yapabildik.

Şimdi $* tanımında farklı bir kullanım gostereceğim.

Komut satırı:

Kod:
//tokenize 32 deneme deneme1 deneme2 | echo -> $left($*,3)

Sonuc:

-> `~$
-> `~$
-> `~$
Genişletmek icin tıkla ...

Gorduğunuz gibi normalde kelimelerin sol baştan ilk 3 harfini /echo yapması gerekirken(den), `~$ verisi echo-landı.
Bunun sebebi mIRC coğu internal fier-ları bu şekilde tanımlar.

Tokenize ve $* hakkında soyleyeceklerim bu kadar.



5- $remtok Tanımının Onemi

Remtok kullanımı bilindiği uzere belirtilen string icerisindeki belirtilen konumda olan ve yine belirtilen bicimi silmeye yarar. LÂkin $remtok tanımın en onemli kısmı silinmesi istenilen text ne ise kesinlikle sadece onu siler. Yani benzer text-leri koruma altına alır.

Scripting-de en cok kullanılan genelde text-ler icerisinde kelime/harf silme ayıklama işlemidir. Bunun icin bir cok şey kullanılabilir.

Ornek: $regsubex, $remove, $removecs, $replace/x vb.


Ama bu kullanımların hepsi ($regsubex detaylı string girdileri haric) silinecek veya değiştirilecek kısmı tam olarak ayıklar.

Ornek:

Text-imiz şoyle olsun: deneme deneme2 deneme3 deneme4 ene


Ve biz bu text icerisinde "ene" kelimesini silmek istiyoruz. Bunun icin Turkiye'de en cok ezbere kullanılan tanım $remove olacaktır. Peki deneyelim bakalım.

Kod:
//var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $remove(%s,ene)

Sonuc:

-> dme dme2 dme3 dme4
Genişletmek icin tıkla ...

Evet ene kelimesi silindi. Lakin diğer kelimeler icerisindede olduğu icin, onlarda ayıklandı. Yani kısacası bu işlev yanlış bir işlem olmuş durumda.
Peki bu durumda ne yapabiliriz?

Orneğin $replace kullanalım.

Kod:
//var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $replace(%s,ene,)

Sonuc:

-> dme dme2 dme3 dme4
Genişletmek icin tıkla ...

Sonuc yine aynı.
Değişik bir kullanım deneyelim.

Kod:
//var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $replace(%s,$chr(32) $+ ene,)

Sonuc:

-> deneme deneme2 deneme3 deneme4
Genişletmek icin tıkla ...

Bu sefer oldu. LÂkin ene kelimesi ortada da olabilirdi veya baştada olabilirdi. Yani dolayısıyla bu yine yeterli bir kullanım olmayacaktır. Hatta yanlış bir kullanım.

İşte bu durumda kullanmamız gereken token $remtok tanımıdır.

Hemen deneyelim:

Kod:
//var %s = deneme deneme2 ene enedeneme3 deneme4 ene | echo -> $remtok(%s,ene,0,32)

Sonuc:

-> deneme deneme2 enedeneme3 deneme4
Genişletmek icin tıkla ...

Sonuc doğru. Gorduğunuz gibi tam eşleşme yaparak ayıklama işlemi gercekleşti.

Bu konuya bu kadar değinmemin sebebi, ileri seviye coder-ların dahi duştuğu basit hatalardan birisidir yukarıdaki kullanımlar.



6- Kelime Sayısı Belirlemede Kullanımlar

mIRC Scripting-de ozelliklere olaylara dayalı kodlarda genellikle cumle icerisinde kac kelime var olduğu alınır.


Bu tur bir işlevde genellikle $numtok($1-,32) veya $gettok($1-,0,32) gibi tanımlar kullanılır. Bu kullanımlar her ne kadar yanlış olmasada, olaylar icerisinde daha basit bir kullanımı mIRC bize olanak tanımıştır.

Bakınız: $0


Ornek:

Kod:
on *:text:*:#:echo -> Text-deki toplam kelime sayısı: $0

Tanım $0 /tokenize komutuyla herhangi bir ayrıştırma işlemi yapıldığında da kullanılabilir.


Ornek:

Kod:
//var %s = deneme-deneme1-deneme2-deneme3 | tokenize 45 %s | echo -> $0



7- Tekil İleti Penceresi Kullanımı

mIRC uzerinden bağlantı kurduğunuz bir server-da size mesaj gonderen, veya siz tarafından mesaj gonderilen nickler icin query penceresi acılır. Text gonderimi/alımı bu pencereler uzerinden yapılılır.

Bu tur pencereler uzerinde işlev yapmak icin, genellikle:

Kod:
on *:text:*:?:işlev

Kullanılmaktadır.
Peki butun ozele gonderilen text-lerin hepsini otomatik olarak kişiye ozel query penceresi acmaksızın tek bir pencere nasıl goruntuleyebiliriz dersek.

Kod:
/dqwindow [on|off|show|hide|min]

Komutunu kullanabilir.


Acıklama: on/acmak - off/kapatmak - show/pencereyi gostermek - hide/pencereyi saklamak - min/pencereyi minimize konuma getirmek icin kullanılır.

/dqwindow on yaptığınızda, bu işlemi devreye sokmuş olursunuz.
İşlem devreye girdikten sonra, herhangi birisinin ozeline gondereceği text Messages penceresinde gosterilir.
mIRC default olarak kişi tarafından gelen mesajları;

*nick* text
Genişletmek icin tıkla ...

Şeklinde gosterecektir.
Messages penceresindeki editbox-da her daim /msg komutu aktiftir. Yani siz bir text gonderdiğinizde editbox-da /msg komutu yeniden cıkacaktır.

Messages penceresi hakkında bazı bilgiler:


Messages penceresi size ozel gonderilen tum text-leri goruntuler. Pencere default olarak "message" olarak tanımlanır. Pencere icerisinde harf+TAB kombinasyonu kullanılabilir. Orneğin, iletişim kurulan nickler arasında deneme nick-i varsa, d+TAB kombinasyonu uyguladığınızda o nick otomatik tanımlanır. Pencere uzerindeki text-leri goruntulemek icin en basitinden, $line(message window,N) kullanılabilir. /dqwindow off yapmadığınız surece, ozeline karşı tarafdan gelen text-ler her daim Messages penceresinde gosterilir. Pencere icerisinde HOTLINK aktiftir. Herhangi bir nick-in uzerine tıkladığınızda işlem gorebilir. Pencerede cift tıklama işlemi yaptığınızda, son iletişim kurulan nick-e double click işlemi(default olarak /whois-dir) uygulanır. Pencere uzerinden iletişime gecilen herhangi bir nick ile kendiniz /query penceresi actığınızda, o kişi ile olan ileti gecmişiniz otomatik yuklenir. Ve kişinin gonderdiği text-ler query penceresinde goruntulenir. Kısacası Messages penceresi ile bağlantısı kesilir.

Sonuc olarak Messages penceresi uzerinden değişik kullanımlar ile, farklı korumalar veya işlevler yazılabilir.



8- Yığın Bellek Ayırma Hatası

mIRC uzerinde kendi komutlarınızı veya tanımlarınızı alias uzerinden oluşturabilirsiniz.

Kod:
alias _d echo -c info Bu bir denemedir.

Gibi(kullanım: /_d)

LÂkin oluşturduğunuz bir alias icerisinde direkt aynı alias-ı kullanmaya kalktığınızda, 2. kez uygulanmaz. Daha doğrusu, eğer bir işlev varsa işlev gercekleşir, 2. işlev 1. işlevi gercekleştirecek bir işlemse, 2. işlev sunucuya gonderilir.

Ornek:

Kod:
alias _d

/_d yaptığınızda sonuc:

* denemedir.
-
* /_d: not connected to server (line 13, script20.ini)
Genişletmek icin tıkla ...

Uyarılarını alırsınız. Bunun sebebi, oluşabilecek kısır donguleri engellemek icindir.


Gorduğunuz gibi, 1 kez mIRC local olarak uyguladı ve 2. kez server-a komut olarak gondermeye kalktı.
Yani aliaslar icerisinde aynı alias bazında kısır dongu kurmaya kalktığınızda, mirc buna musade etmez.

Peki alias-lar uzerinde internal kısır dongu oluşturulabilir mi?
Evet oluşturulabilir. Yukarıdaki ornek-de geri donuş işlemini 2. bir alias ile yapmaya kalkalım.
Yani yapacağımız işlev şu şekilde:

/işlev-a -> işlev-b
/işlev-b -> işlev-a
Genişletmek icin tıkla ...

Bu tablo bir kısır dongudur. Bir ornekle deneyelim.

Kod:
alias _d1 alias _d2

Yapmanız gereken: /_d1 veya /_d2


Karşımıza cıkan sonuc:

* Error allocating stack memory (line 2, script.ini)
Genişletmek icin tıkla ...

İşte bu uyarının sebebi, yığın belleğe yuklenmede ayırma hatası gercekleşmesinden kaynaklanır.


Kısır dongu her koşulda sonucun değişmesi veya kısır dongunun kesilmesi icin bu ikilemeyi standart olarak "255" defa uygular. Kısır dongu devam ediyorsa, yukarıdaki hatayı alırsınız.



9- Timer / Tokenize($*) İlişkisi

Tokenize(/tokenize) hakkında yukarıdaki bolumlerde genişce acıklamalarda bulunduk.


LÂkin bu bolumuzde daha farklı değişiklerden bahsedeceğiz. /tokenize komutu ile uygulanan $* tanımının ne işe yaradığını soylemiştik.
Kısacası değinmek gerekirse, $* tanımı oncesine konan veya işlev icerisinde gercekleştirilen işlemi ayırıcının algıladığı sayı kadar tekrarlar.

Kısa bir ornek verelim:

Kod:
//tokenize 32 a b c | echo -> $*

Sonuc:

-> a
-> b
-> c
Genişletmek icin tıkla ...

Gorduğunuz gibi /echo işlemi 3 defa tekrarlandı. Buna sebeb olan "a b c" texti-i icerisinde 3 ayrıştırma işlemi olmasıdır(32/white-space)
Şimdi esas konumuza gelecek olursak, /tokenize komutu, /timer komutu ile beraber uygulandığında ne gibi farklı değişiklikler gosterebilir?

Yukarıdaki diğer /tokenize acıklamamızda, $* tanımını sorgu icin kullanmak istediğimizde /scid veya /scon komutları ile birlikte kullanmamız gerektiğimizi soylemiştik.
Bunun sebebinin bu şekilde kullanıldığında, local bazlı olarak gonderilen sorgu veya işlemlerin SABİTLENEREK UYGULANMASI ve yine local bazlı cevap verme ozelliğinin olmasıydı.

Bunların haricinde(/scid - /scon) ek olarak $* tanımını sorgu veya tanıma yeni bir işlev amaclı /timer icerisinde de kullanabiliyoruz.

Ornek:

Kod:
//tokenize 32 deneme danama dinimi | scon -r echo -> $!regex(x, $* ,/([aie])/g) - $!regml(x,1)

Sonuc:

-> 3 - e
-> 3 - a
-> 3 - i
Genişletmek icin tıkla ...

Acıklaması: "deneme danama dinimi" kelimelerini /tokenize 32 ile ayrıştırdık. Elde edilen 3 kelimeyi /scon ile $regex tanımını kullanarak icerisinde string karşılaştırmaları yaptık. Sonuc olarak her kelimenin icerisinde "e, i ve a" harfleri arandı.

Yukarıdaki gorduğunuz işlev gayet acık.
Şimdi bunu /timer kullanarak nasıl yapabilir?

Ornek:

Kod:
//tokenize 32 deneme danama dinimi | .timer 1 1 echo -> $!regex(x, $* ,/([aei])/g) - $!regml(x,1)

Sonuc:

-> 3 - e
-> 3 - a
-> 3 - i
Genişletmek icin tıkla ...

Gorduğunuz gibi aynı işlem gercekleşti. Sonuca dikkat ederseniz /tokenize ile ayrılan kelimeler;

1. sıradaki: deneme
2. sıradaki: danama
3. sıradaki: dinimi
Genişletmek icin tıkla ...

Yani burada internal bir sıralama şekli var. Ve farkındaysanız /timer-da /scon-da bize sonucları sıralama yolunu takip ederek verdi.


Kısacası ilk once "deneme" kelimesi arandı, sonra "danama" ve en son olarak "dinimi" kelimesi. Sonuclara bakarsanız ilk gonderilen /echo cıktısı "e" harfidir.

Şimdi /timer ile bu işlev yapılırken sıralama değişebiliyormu? Evet değişebiliyor. Orneğin, timer-ın interval/aralık kısmını ile oynayalım.
Yukarıdaki /timer işleminde 1 saniye sonra, 1 kez işlemi gercekleştir diyoruz. Şimdi aşağıdaki vereceğimiz ornekde ise, işlemi hemen ve yine 1 kez gercekleştir diyeceğiz. Bakalım sıralama da değişiklik olacakmı.

Uygulanan komut:

Kod:
//tokenize 32 deneme danama dinimi | .timer 1 0 echo -> $!regex(x, $* ,/([aei])/g) - $!regml(x,1)

Sonuc:

-> 3 - i
-> 3 - a
-> 3 - e
Genişletmek icin tıkla ...

Gorulduğu gibi sıralamada değişiklik oldu. Timer interval kısmı ile oynanınca, sıralamada değişiklik gosterdi ve yukarıdaki sonucların tam tersi olarak, tersden string karşılaştırması yapıldı.



10- $()/$eval Tanımlarındaki Kullanımlar.

mIRC-deki en onemli tanımlardan birisi $eval tanımıdır. Bunu zaten kodlama ile icli dışlı olan kişiler her zaman bilirler.

$eval(text,N) tanımı genellikle değişkenlerin verilerini değerlendirmek icin kullanılır. Bunun haricinde, herhangi bir text-ide değerlendirebilir. N kısmına 0 girilirse, text kısmı değerlendirilmez. Eğer N kısmı girilmezse, otomatik "1" olarak tanımlanır.

Bu konu altında $eval tanımının ne gibi değişiklikler ve bazende cok farklı sonuclar verdiğini goreceksiniz.

Ornekler


Kod:


Kod:
//var %loop = a b c d | echo -> $(%loop,1)


Sonuc:


-> a b c d
Genişletmek icin tıkla ...


-


Kod:


Kod:
//var %loop = a b c d | echo -> $(%loop,0)


Sonuc:


-> %loop
Genişletmek icin tıkla ...


-


Kod:


Kod:
//var %loop = a b c d | echo -> $([ %loop ],1)


Sonuc:


-> a b c d
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a b c d | echo -> $([[ %loop ]],1)


Sonuc:


-> [ a b c d ]
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a b, c d | echo -> $([ [ %loop ] ],1)


Sonuc:


-> a b c d
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a b, c d | echo -> $([ [ %loop ] ],$*)


Sonuc:


Sonuc yok.
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a b,, $+ c d | echo -> $([ [ %loop ] ],1)


Sonuc:


-> a b c d
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a b $+ c d | echo -> $([ [ %loop ] ],0)


Sonuc:


-> [ a bc d ]
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = $!(a b, $+ ,c d) | echo -> $([ [ %loop ] ],1)


Sonuc:


-> a b c d
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = $calc(1 + 5) / 2 | echo -> $([ [ %loop ] ],1)


Sonuc:


-> 3
Genişletmek icin tıkla ...

-


Kod:


Kod:
//var %loop = a $+ , % $+ loop $+ , $calc(6-1) | echo -> $(,$([ [ %loop ] ],1))


Sonuc:


-> a
Genişletmek icin tıkla ...




Yukarıda gorduğunuz ornekler gibi, binlerce ornek daha yazılabilir.


Bu ornekler sayesinde $eval tanımının(kısa hali $() tanımıdır) değerlendirme bazındaki etkilerini gormuş olursunuz.

Eval($eval) hakkında bir kac bilgi daha verelim.
Aşağıdaki bilgilerde kullanımların aynı olduğu gosterilir.

$eval(text,1) = $(text,1)
$eval(text,0) = $(text,)
$eval(text,1) = $(,text)
$eval(text,1) = $evalnext(text)
$eval(text,0) = $(text,$+)
Genişletmek icin tıkla ...

Evaluation hakkında soyleyeceklerim bu kadar.



11- Timer Sabitleme Ozelliğini Devre Dışı Bırakma Yolları

Bildiğiniz gibi /timer, değişken bir yapısı olan tanımları veya değişkenleri, sabitler. Bu durum coğu zaman kod yazımında istenilen sonucların alınmamasına sebep olabilir.

Ornek:

Kod:
//.timer 5 1 echo -> $ticks

Sonuc:

-> 6141385
-> 6141385
-> 6141385
-> 6141385
-> 6141385
Genişletmek icin tıkla ...

Gorulduğu gibi, $ticks tanımı /timer komutunu ilk actığımız an sabitlendi. Ve devamlı aynı veriyi bize verdi.


Bunun sebebi /timer kullanım icerisinde olan kısmını girilen veri ile sabitler. Yani size /echo ile $ticks tanımının verisini almaya kalksanız dahi, o anki $ticks tanımına ait olan veriyi echo-latır.
Bunun onune daha oncede nasıl gecilebileceğini soylemiştik.

Ornek:

Kod:
//.timer 5 1 echo -> $!ticks

Sonuc:

-> 6301380
-> 6302394
-> 6303408
-> 6304422
-> 6305436
Genişletmek icin tıkla ...

Gorulduğu gibi $ticks tanımının verileri doğru bir şekilde yansıtıldı.
Şimdi daha acık yanlış ve doğru olan bir ornekle anlayalım.

Yanlış kullanıma ornek:

Kod:
//.timer_ex 5 1 noop $ticks | echo -> $timer(_ex).com

Sonuc:

-> noop 6616533
Genişletmek icin tıkla ...

Gorulduğu gibi, $ticks sabitlenmiş.


-


Doğru kullanıma ornek:

Kod:
//.timer_ex 5 1 noop $!ticks | echo -> $timer(_ex).com

Sonuc:

-> noop $ticks
Genişletmek icin tıkla ...

Gorulduğu gibi $ticks tanımı, doğru olarak sonuc verecektir. Cunki /timer her defasında, tanıma ait olan veriyi sabitleyerek değilde, tanıma ait olan veriyi online olarak verecektir.

Şimdi, daha farklı yollar ile bu sabitlemenin onune gecilebilirmi?
Evet gecilebilir. Aşağıdaki kullanımlar $identifier -lar icin orneklerdir.


Kod:

Kod:
//.timer_ex 5 1 noop $ $+ ticks | echo -> $timer(_ex).com


Sonuc:


=> noop $ticks
Genişletmek icin tıkla ...

-


Kod:


Kod:
//.timer_ex 5 1 noop $[$,ticks) | echo -> $timer(_ex).com


Sonuc:


=> noop $ticks
Genişletmek icin tıkla ...


-


Kod:


Kod:
//.timer_ex 5 1 noop $($ticks,0) | echo -> $timer(_ex).com


Sonuc:


=> noop $ticks
Genişletmek icin tıkla ...

Bu vb. yollar ile tanımlar icin olan sabitleme ozelliğini devre dışı bırakabiliriz.


Soz konusu %loops (değişkenler) olduğunda yapmamız gerekenler aşağıdaki gibidir.

Doğru kullanımlara ornekler:

Kod:
//set %loop deneme | .timer_ex 5 1 echo -a % $+ loop | echo -> $timer(_ex).com ;- //set %loop deneme | .timer_ex 5 1 echo -a $(%loop,0) | echo -> $timer(_ex).com ;- //set %loop deneme | .timer_ex 5 1 echo -a $var(%loop,1) | echo -> $timer(_ex).com

Timer sabitleme ozelliği hakkında soyleyeceklerim bu kadar.



12- Regsub(Ex) Hakkında Bazı Kullanımlar

Regsubex bilindiği gibi belirtilen text-i, yine belirtilen kombinasyonlarla değiştirmenize ve bircok daha işlev yapmanıza olanak sağlayan ileri duzey bir tanımdır.
Regex zaten mIRC icerisinde ayrı bir kutuphane olup, mIRC icin biraz daha farklı uyarlanmış, metin icerisinde altmetinler elde etmek veya sorgular yapmak icin kullanılan mukemmel bir tanımdır.
Daha fazla uzatmadan, $regsubex ile alt-metinler nasıl elde edilir bir goz atalım.


Yazının devamında ilk oncelikle normal bir scripting kodlayıcısının rahatlıkla anlayabileceği bilgiler verilecektir. Devamında biraz daha ileri duzey orneklerle dersimize son vereceğim.

Standart, $regsubex kullanımı: $regsubex([name], text, re, subtext)


Acıklaması:


[name]: Bu kısım girilmesi mecburi bir alan değildir. LÂkin cok ic ice kullanılan regsubex-larda isim belirtmek $regml veya belirleyici ile yakalanan veriyi almak icin daha iyi olur. Bunun dışında evaluation bracket-lar kullanılabilir tabii, onu ilerleyen kısımlarda anlatacağım.

text: Bu kısım altmetin elde edilecek esas metindir.

re: Bu kısım değiştirilmesi gereken daha doğrusu alt metini belirleyen kısımdır-ki herşey burada konuşulur- .)

subtext: Bu kısım ise "alt metin" dediğimiz kısımdır. Yani bize geri donuş yaptıran yer.

Buraya kadar anlaşılmayan birşey olmadığını varsayıp orneklere geciyorum.

Ornek:

Kod:
//echo -> $regsubex(deneme,/(e)/g,-)


Sonuc:


=> d-n-m-
Genişletmek icin tıkla ...

Acıklaması: İlk olarak "/" kısmı karşılaştırmadır. Yani /g(coklu arama) kullanabilmemiz icin bu kısmın girilmesi gerekmektedir. Yani kısacası bir karşılaştırma şu şekilde tanımlayabilirsiniz: /text/parametre
Yukarıda kullanılan (e) kısmımız yakalama işlemi icin kullanılır. Bu şekilde "e" harfi yakalanan kısım olmuştur.

Bunu daha iyi anlamak icin:

Kod:
//echo -> $regsubex(deneme,/(e)/g,-) - Yakalanan: $regml(0) | while ($true)

Sonuc:

-> d-n-m- - Yakalanan: 3
-> 1. yakalanan: e - Pos: 2
-> 2. yakalanan: e - Pos: 4
-> 3. yakalanan: e - Pos: 6
Genişletmek icin tıkla ...

Sanırım buraya kadar anlaşılmayan birşey yok. Şimdi gelişmiş kullanımlara gecelim.

Ornekler


Kod:


Kod:
//echo -> $regsubex(deneme,/(e)/g,n)


Sonuc:


-> d1n2m3
Genişletmek icin tıkla ...

Acıklaması: n anahtarı yakalanan verileri sayıyla gosterir.

-


Kod:


Kod:
//echo -> $regsubex(deneme,/(e)/g, $+ n)


Sonuc:


-> dnnnmn
Genişletmek icin tıkla ...


Acıklaması: $+ n kullandığımız icin, sabitlenen bir text olarak goruldu.

-


Kod:


Kod:
//echo -> $regsubex(deneme,/(e)/g,[ [ $+ n ] ])


Sonuc:


-> d1n2m3
Genişletmek icin tıkla ...


Acıklaması: Evaluation brackets kullandığımız icin sabitleme ozelliği goz ardı edildi. Yukarıda daha detaylı bilgi alabilirsiniz eva-brackets hakkında.

-


Kod:


Kod:
//echo -> $regsubex(deneme,/(e)/g,$*)


Sonuc:


-> d`~$*n`~$*m`~$*
Genişletmek icin tıkla ...


Acıklaması: $* tanımının /tokenize kullanmasak bile internal olarak `~$ şeklinde donduğunu soylemiştik.
Yukarıdaki ornekler ilk ornek hakkında detaylı kullanımlar icin verilmiştir.


Şimdi seviyeyi biraz daha yukselterek "subtext" kısmında sorgulamar yapabileceğimizi gorelim.

Ornekler


Kod:


Kod:
//echo -> $regsubex(scripting tutorial,/(i)/g,$iif(n != 1,-,$v1))


Sonuc:


-> scr1pt-ng tutor-al
Genişletmek icin tıkla ...

Acıklaması: n parametresinin yakalanan verilerin kac adet olduğunu sayı olarak verdiğini soylemiştik. Burada yaptığımız işlev, n eğer 1-e eşit değilse "-" karakteri olarak donsun diyoruz. Gorulduğu gibi $regsubex icerisinde sorgu kullanabiliyoruz $iif() ile.

-

Kod:


Kod:
//echo -> $regsubex(scripting tutorial,/(i)/g,$iif(n != 1 && n != 3,-,$v1))


Sonuc:


-> scr1pt-ng tutor3al
Genişletmek icin tıkla ...

Acıklaması: n 1-e veya 3-e eşit değilse, "-" karakteri olarak donsun. Aksi halde $v1(kendisi) olarak donebilir.


Regsubex ile hic external dongu kullanmadan alfabedeki harfleri sıralayalım mesela.


Not: Normalde bu tur bir işlev icin /while /goto vb. donguler kullanılabilir.

Kod:


Kod:
//echo -> $regsubex($str(-,26),/(.)/g,$chr($calc(96+ n)) $chr(32))

Sonuc:

-> a b c d e f g h i j k l m n o p q r s t u v w x y z
Genişletmek icin tıkla ...

Acıklaması: "-" karakterinden(ki bu ornektir) 26 adetlik bir text icerisinde, (.) herhangi bir karakteri yakaladık. Buda bize 26 karakterin tumunude yakalamıza olanak sağladı. Devamında $calc(96+ n) ile n ile alınan sayıları +96 olarak değiştirdik. Devamında $chr() ile bu sayıların ascii karakterini goruntuledik. Son olarak $chr(32) kullanarak her harf arasına boşluk koyduk.

Peki şimdi, yukarıdaki kullanımda ortaya cıkan text icerisinde, harflerden birisi kucuk, diğeri buyuk nasıl yapabiliriz?


Deneyelim.


Kod:


Kod:
//echo -> $regsubex($str(-,26),/(.)/g,$iif(2 // n,$chr($calc(96+ n)),$upper($chr($calc(96+ n)))) $chr(32))

Sonuc:

-> A b C d E f G h I j K l M n O p Q r S t U v W x Y z
Genişletmek icin tıkla ...

Gorulduğu gibi ek bir $iif() sorgusu ile bu işlemi gercekleştirdik. Mantık gayet basittir. Burada denilen şey; eğer n sayısı, 2 sayısının katları ise karakter normal donsun. Eğer değilse, karakterler $upper() ile harf(ler) buyutulsun.

Boyle bir işlemi /while ile yapmaya kalktığımızda, soyle bir kod yazılabilir.

Kod:
alias char echo -> %loop2 }

Şimdi her iki koda baktığımızda aradaki fark nedir? Kısa bir bechmark yapalım.

Regsubex-li kodumuz: Internal Loop + $iif() sorgusu + Internal Sorgular


Dongulu kodumuz: External Loop + $iif() sorgusu + /if sorgusu + Variables-lar + Harici echo cıktısı
Genişletmek icin tıkla ...

Aradaki farkı gordunuz. Unutmayınki mIRC bir external loop bitmeden, diğerini asla gercekleştirmez. LÂkin aynı anda birden fazla internal loop kullanabilir.

İki kullanım arasında 10.000 tekrarlı bir dongu ile bench yapıldığında sonuclar:

Regsubex: 12.963 ms
Normal kodumuz: 16.489 ms

Gorduğunuz gibi $regsubex kullandığımız kod daha hızlı calışıyor.

Sanırım buraya kadar anlaşılmayan birşey yok. Konu cizgisinden daha fazla cıkmadan $regsubex tanımımıza geri donelim.

Orneklere Devam

Kod:


Kod:
//echo -> $regsubex(scripting tutorial,/(i)/g,[t])


Sonuc:


-> scr[$1]pt[$1]ng tutor[$1]al
Genişletmek icin tıkla ...

Acıklaması: Evaluation bracket tek kullandığımız icin, alt-metin $1 şeklinde dondu.

-

Kod:


Kod:
//echo -> $regsubex(scripting tutorial,/(i)/g,[[ t ]])


Sonuc:


-> scr[ i ]pt i ng tutor i al
Genişletmek icin tıkla ...

Acıklaması: Evaluation bracket iki tane yan yana kullandığımız icin, ilki karakter olarak doner. 2.-si oncelik tanıma işlemini yapar.

-

Kod:


Kod:
//echo -> $regsubex(scripting tutorial,/(i)/g, t )


Sonuc:


-> scripting tutorial
Genişletmek icin tıkla ...

Acıklaması: t(toplam karşılaştırma) olması gerektiği gibi dondu. Cunku evaluation bracket-lar işlemini tam manası ile gormuş bulunmaktadır. Yani




Regsubex hakkında soyleyeceklerim bu ders icin bu kadardır. Regsubex konusu ap ayrı bir konudur. Hakkında cok daha fazlası yazılabilir. Ki zaten bu ders-de gereğinden fazla uzun oldu. O yuzden bu dersin 2. surumunun buyuk bir bolumu sadece regsubex hakkında olacaktır.


Birkac Bilgi


/debug cıktıları her sunucu icin ayrı calışır. /rmdir komutunda, klasor eğer dosya iceriyorsa silinemez. /write komutu ile ini dosyasına birşey yazdıramazsınız. Herhangi bir veri yazdırdığınız taktirde, dosyanın işleyişi bozulabilir. $?*!="text" ve $input() tanımını hicbir olaya dayalı script kodları icerisinde kullanamazsınız. Calışmaz. /dcc fserve komutları IP adresi uzerinden iletişim kurar, IRC uzerinden calışmaz/gerek duymaz. /scid ve /scon komutlarında herhangi bir $identifier kullanmak istiyorsanız, $!identifier şeklinde kullanmalısınız. Bu şekilde tanımların ilk değerlerinden kurtulmasına olanak sağlar. Socket kullanırken belirttiğiniz socket ismi en fazla 90 karakter olabilir. Hash table oluştururken belirttiğiniz tablo ismi en fazla 90 karakter olabilir. Olaylar icerisinde(text, notice vb) $rawmsg kullanırsanız, gelen veri debug cıktısından gelen veri ile aynı olarak ham şekilde gelecektir.



Dersimiz 12 madde başlığı altında sona ermiştir. Biraz uzun olduğu icin soylenecek bir kac konuyu, bu dersin ikinci surumune bırakmış bulunmaktayım. Onuda ne zaman yazarım? Pek bilinmez. .)