Ders: Debug

L4roXyL

Profesyonel
Katılım
16 Eki 2011
Mesajlar
124
Beğeniler
1
#1
Ders: Debug
Tarih: 01/10/2009 - Perşembe
Yazan: L4roXyL - (Hasan AYDENİZ)
Not: Bu ders bir www.mIRCScripting.net dökümanıdır.

-

Evet arkadaşlar bu dersimizde mIRC-de varolan /debug komutunu ve getirilerini ele alacağız.
Ben debug konusunu kendimce "alternatif scripting" diye adlandırıyorum. Çünki neredeyse event(on olay?) kullanmadan bir script dahi yazabilirsiniz.
mIRC-de çok önceki sürümlerden beri varolmasına rağmen, pek kimsenin bilmediği ve kullanmadığı bir konudur.
Ki zaten mIRC Help dosyasını hazırlayan "Kjerk" bu kadar önemli bir konunun üzerinde neden kısaca durmuş orasıda bir mechul.
Socket ile aldığımız verileri bilirsiniz. HAM/İŞLENMEMİŞ veri şeklinde gelir tüm veriler. Biz /tokenize komutu ile gelen veriyi parçalar ona göre işlev yaparız.
Debug -da hemen hemen aynı şekildedir. Online olarak yaptığınız veya yapılan tüm işlevleri debug ile görebilir ve gördüğünüz verilere işlev yapabilirsiniz.
Ve hatta bu verileri belirlediğiniz dosyaya otomatik depolayabilirsiniz.

-

Daha fazla uzatmadan artık konumuza başlayalım.
mIRC Help dosyasında debug komutu aşağıdaki gibidir.
Komut: /debug [-cinpt] [N] [on | off | @window | filename] [identifier]
En basitinden bir debug penceresi açmak için: /debug @deneme

-

Parametreler:
-n: Pencereyi minimize konumundan açmak için kullanılır.
Örnek: /debug -n @deneme

-c: Debug ile gelen verileri durdurma işleminde(off) bu anahtarı kullanırsanız, gelen verilerin açılmış olduğu pencerede kapatılır.
Örnek: /debug -c off

-t: Gelen verilerin başında timestamp(zaman) gösterilir. Yani -t komutu ile bir debug getirisi açarsanız, gelen her verinin başında verinin geldiği zamanı $timestamp tanımının döneceği şekilde görebilirsiniz.
Örnek: /debug -t @deneme

-i: İŞTE debug-la gelen verileri işleyebilmemizin yolu bu anahtardan geçer. Bu anahtar ile gelen verileri belirlediğimiz "alias" -a çağırabiliyoruz. Yani bir nevi belirlediğimiz alias artık debug verilerini algılıyor ve yansıtabiliyor-da.
Örnek: /debug -i on d_alias
Not: Buradaki d_alias ismine takılmayın. İstediğiniz bir isim belirleyebilirsiniz.

-

Debug identifier: $debug
Açıklaması: Bu identifier/tanım debug verilerinin yansıtıldığı pencerenin veya alias -ın ismini verir.
Örnek: //echo -: $debug
-
Debug mIRC help dosyasında anlatıldığı gibi aslında bu verdiğim bilgilerden ibaret gibi gözüksede, gelen verileri "işlemek istediğiniz" an farklı bir boyuta geçiş yaparsınız.

-

Debug ile alternatif scripting - Verileri işleme

Debug ile gelen verilerin başında her zaman için; "<-" karakteri vardır.
Giden veriler(sizin tarafınızda gönderilen veri veya isteklerin başında) ise; "->" karakteri vardır.
-
İlk öncelikle debug-ın algıladığı verileri işlemek için belirlediğiniz bir "alias" -a debug-ı çağırmalısınız.
Şöyleki: /debug -i on d_alias
Alacağımız yanıt: * Debug output on (d_alias)
Türkçesi: Debug çıkışı d_alias üzerine açıldı.

Sanırım buraya kadar anlaşılmayan birşey yok.
Belirlediğimiz alias üzerine debug verisini çağırdığımızı anlamanın yolu, tabiki belirlediğimiz isimdeki(çağırdımız isimdeki) alias-ı oluşturmaktan geçer.
Örnek:

Kod:
alias d_alias echo $1-
Artık d_alias ismindeki aliasımızın verileri algılayabildiğini görüyoruz.
Bundan sonraki yapmamız işlev aynen socket mantığında oldığu gibi gelen verileri parçalamaktan geçer.
Çünki şu konumda, $1- yerine $1 de yapmış olsak veriler HAM ve AYIKLANMAMIŞ olduğu için yine TAM olarak gelecektir.
Gelen verileri belirlediğimiz biçimde ayıklamaya/parçalamaya ayırmanın yolu /tokenize komutundan geçer.
Örnek:

Kod:
alias d_alias {
 tokenize 32 $1-
 echo $1
}
Burada yaptığımız işlev; 32(white-space/boşluk) karakterini parçalayan veri olarak belirliyoruz.
Yani bildiğiniz $1 (1. kelime) $2 (2. kelime) vs. bu şekilde konumlandırıyoruz. Artık $1 yanıtı sadece 1. kelimeyi verecektir.
Kısacası aynen socket-de yaptığımız işlev gibi.
NOT: Yukarıda söylediğim gibi veri şeklini tespit etmek için her zaman "$1" tanımını kullanmalısınız. Çünki $1 tanımı sadece "<- veya ->" şeklinde dönecektir.
Sizde bu bilgiden yola çıkarak sizin tarafınızdan gönderilen verileri ve online şekilde gelen verileri ayırt edebilirsiniz.

Sanırım buraya kadar anlaşılmayan birşey yok.
Debug scripting diye adlandırdığım şey bundan ibarettir. Tabiki sizin isteklerinize ve hayal gücünüze göre geliştirmenize kalmış.

-

Neden debug scripting?

Debug sunucu üzerinden gelen veya gönderilen, kısacası yapılan her işlevi ÇOK HIZLI BİR BİÇİMDE algılar.
Ve siz debug-a gelen verileri işleyerek kod yazmak istediğinizde size sonuçları hatasız/kusursuz verir.
Debug-ın EN BÜYÜK ÖZELLİĞİ normal scripting-den çok çok daha HIZLI çalışmasıdır. Yani yabancı olmadığınız socket gibi.
Debug kullanarak normalinden çok daha hızlı kodlar ve işlevler yazabilir/yapabilirsiniz.
Ve buna ek olarak socket-de kullanamadığınız local olmayan bir çok $identifier/tanımı kullanabilirsiniz.(hemen hemen hepsi)
-
UNUTMAYIN: Açtığınız her bir event(on olay) veya oluşturduğunuz her bir "alias" belirli bir miktarda RAM-da yer kaplar.

-

Debug ile neler yapılabilir?

i) Neredeyse event(on olay) kullanmadan script yazabilirsiniz.
ii) Normalinden çok çok daha HIZLI kodlar veya uzun işlevli korumalar yazabilirsiniz.
iii) Sunucunuz için çok daha HIZLI (hemen hemen socket kadar) koruma botu veya farklı işlevler gören botlar yazabilirsiniz.

-

Ek bilgiler:
Debug verimini kapatmak için: /debug off
Debug verimini herhangi bir dosyaya kayıt etmek için: /debug dosya-adı.uzantısı
Debug verisini belirlediğiniz pencereye belirlediğiniz renk-de yansıtmak için: /debug [renk kodu] @pencere

-

Dersimiz burada sona ermiştir.
Daha iyi anlamanız için basit bir küfür koruması yazacağım.(kelimeler dosya.txt dosyasından okutulacak)

-

Kod:
[B]alias d_alias {[/B]
  ;alias-a gelen verileri tokenize ile parçalıyoruz.
[B]  tokenize 32 $1- [/B]
  ;eğer 1. kelime <- ise(yani bize DIŞARIDAN gelen veri ise) ve(&&) 3. kelime PRIVSMG ise
 [B] if ($1 = <- && $3 = PRIVMSG) {[/B]
    ;4. kelime bulunduğumuz herhangi bir kanal ise
    [B]if ($4 ischan) {[/B]
      ;%_n değişkenine kanala yazı yazan nick-i ata(tabi ayıklama   işlemini yaparak), %_t değişkenine ise kanala gönderilen mesajı ata
      ;burada $2 yani 2. kelime :Nick!ident@host olarak döner. biz burada sadece nick-i ayıklayarak %_n değişkenine atıyoruz.
      ;son olarak %1 değişkenine 1 değeri veriyoruz.
      [B]var %_n = $right($token($2,1,33),-1),%_t = $right($5-,-1),%1 = 1[/B]
      ;while ile dosya.txt dosyasındaki satırları işliyoruz
      [B]while ($read(dosya.txt,%1)) {[/B]
        ;eğer %_t değişkeni yani kanala gelen text içerisinde dosya.txt dosyasındaki kelimelerden herhangi birisi varsa
        ;ve(&&) $4 4. kelime(kanal oluyor) kanalında ben @, %, &, ~ prefixlerinden herhangi birisine SAHİBSEM
        [B]if ($regex(%_t,/ $+ $v1 $+ /i) && $regex($nick($4,$me).pnick,[@&~%])) { [/B]
          ;algılanan kanaldan($4) belirtilen nick-i(%_n) banla.
          [B]ban -k $4 %_n 2 sebeb.[/B]
          ;while döngüsünü sonlandır.
         [B] break [/B]
      [B]  }
        inc %1 
      }
    }
  }
}[/B]
Kodu denemek için ilk öncelikle: /debug -i on d_alias

-

Umarım artık alternatif kodlar yazmaya başlarsınız.
Saygılarımla.

-

L4roXyL - (Hasan AYDENİZ)
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

Üst