Tokenize Identifiers

Eylül 19, 2008 at 11:05 pm Yorum bırakın

Token’lar sanırım mIRC de en çok işimize yarayan şeylerden biridir. Çok kapsamlı kullanım alanı vardır. En çok kullandığımdan en az kullandığıma doğru sırayla anlatayım.

Örneğin bir cümle var. Bu cümledeki toplam kelime sayısını nerden bulabilirsiniz? Ne önemi var demeyin. Mesela whois çektiğinizde karşınızdaki kişinin kanallarını görürsünüz. Peki bu kanallara sırayla girebilir misiniz? Girersiniz ama nasıl? Önce kanal sayısını bulacaksınız, sonra da 1er 1er arttırarak gireceksiniz. Veya bir kişiyi tüm kanallarda deop edeceksiniz, nasıl yaparsınız? İşte bu noktada token’lar yardımımıza yetişiyorlar. Bunlar en basitinden örnekler. Mesela $numtok $gettok kullanımına bu bahsettiğim örneklerin kodlarını yazarak başlayalım.

;319 numaralı raw kullanıcının bulunduğu kanalları gösterir. Bu raw’da $2 nicki,
;$3 $4 $5 … yani $3- de kullanıcının kanallarını gösterir. Önce yapmamız
;gereken raw’ı ayarlamak.

raw 319:* {

;Burada 319 no’lu rawı kontrölümüze alıyoruz. Şimdi yapacağımız şey buradaki
;nicki ve o nickin kanallarını bir variable’a kaydetmek.

set %nick $2

;Burada nick’i setliyoruz. $2 nick’e denk geliyor o raw’da.
;haltdef de kullanılabilir burada kanallar gözükmesin, sadece setlensin diye.
;Ama bu sadece bir örnek.

set %kanallar $remove($3-,@)

;Burada da nick’in kanallarını setliyoruz. Ama setlemeden önce @ işaretlerini
;temizlememiz gerekiyor. Burada da $remove kullanıyoruz.
;Ve bu raw ile işimiz bitiyor. Kapatıyoruz.

}

;Şimdi gelelim bu bu setlediğimiz kanallarda o kişiyi deop etmeye.
;alias’ımıza başlıyoruz.

alias tamdeop {

;Şimdi setlediğimiz kanalların sayısını buluyoruz önce. İşte bu noktada token
;kullanmak zorunda kalıyoruz. $numtok kullanacağız. setlediğimiz bir değer
;içinde kaç tane parça olduğunu bulmamız için önce ayraçın ne olduğunu
;bilmemiz gerekiyor. Her kanalın arasında boşluk olduğu için burada boşluğu
;ayraç olarak kullanacağız. Boşluğun ascii değeri 32′dir. Yani $chr(32) boşluğa
;denk gelir. Token’larda ayraç mutlaka kullanılır. Bu nedenle ascii kodlara çok
;ihtiyacını olacak. Şimdi $numtok kullanımına geliyoruz.

var %toplam = $numtok(%kanallar,32)

;Ascii kodu 32 olan karakteri yani boşluk işaretini ayraç olarak belirliyoruz ve
;%kanallar değeri içinde kaç tane bu ayraç ile ayırılmış değer olduğunu görmek
;için ise $numtok kullanıyoruz. %toplam değerine de kanal sayısını setliyoruz.

var %x = 1

;Burada yine while kullanacağımız için herhangi bir değer kullanıyoruz. İsim hiç
;önemli değil. Önemli olan bu değerin başlangıçta 1 olması.

while %x <= %toplam {

;Diyoruz ki x değeri toplam değerden küçük olduğu sürece ve eşit olana kadar
;(eşit olması durumu da dahil) ve while’a başlıyoruz. Burada $gettok
;kullanmamız gerekecek. $gettok kullanırken de bir değer içinde yine ayraç
;sayesinde verdiğimiz sıradaki değeri (1. değer 2. değer vs gibi) buluyoruz.

samode $gettok(%kanallar,%x,32) -o %nick

;Burada $gettok(değer,değer sıra numarası,ayracın ascii kodu) şeklinde
;kullanıyoruz. samode ile %nick değerindeki nicki deop ettikten sonra %x
;değerini 1 arttırıyoruz.

inc %x

;Sonra while’ı kapatıyoruz.

}

;Alias’ı da kapatıyoruz

}

Kodun tamamı şu şekilde oluyor:

raw 319:* {
set %nick $2
set %kanallar $remove($3-,@)
}

alias tamdeop {
var %toplam = $numtok(%kanallar,32)
var %x = 1
while %x <= %toplam {
samode $gettok(%kanallar,%x,32) -o %nick
inc %x
}
}

Burada asıl olan $numtok kullanımıydı. $gettok daha farklı şeylerde de kullanılır.
Mesela socks kullanıyoruz.

:asd!~asd@81.123.123.123= PRIVMSG #asd :aleyküm selam

Buradan sadece nick kısmını almak istediğimizde yine $gettok kullanabiliriz. Nasıl derseniz, nick kısmı gördüğünüz gibi ! işaretiyle bitiyor. Biz de bu yazının ! işaretine kadar olan kısmını alacağız.

$gettok($1,1,33)

Burada $1 :asd!~asd@81.123.123.123= olarak çıkacak. 1 de 33. karakteri ayraç olarak kullandığımızda ilk parçayı alacağımızı yani 1 numaralı parçayı alacağız. ! işaretinin ascii kodu 33′dür. Yani geri dönecek değer “:asd” dir.
Eğer 1 yerine 2 yazarsak :asd den sonraki kısmı bize verir. Ayracın görevi ve önemi budur. Her karakteri ayraç olarak kullanabilirsiniz. Mesela @ işaretinin ascii kodu 64′tür. Eğer 33 yerine 64 yazsaydık, @ işaretini ayraç olarak kullanacaktı ve geri dönen yazı :asd!~asd olacaktı. 2. parçayı almak istediğimizde de kullanıcının IP adresini yani @ işaretinden sonraki kısmı verecekti.

Şimdi $addtok $remtok ve $istok kullanımına örnek verelim.

Örneğin bir dokunulmazlık listesi yapıyoruz:

;Önce listeye eklemek için alias oluşturuyoruz.

alias ekle {

;Şimdi $istok ile bu ekleyeceğimiz kişinin daha önce listede olup olmadığını
;kontrol ediyoruz.

if ($istok(%dokunulmazlar,$1,46) == $true) { echo -a $1 zaten listede var. | halt }

;$istok kullanımı şu şekilde:
;$istok(değer,değer içinde aranacak parça,ayracın ascii kodu)
;Geriye $true ya de $false olarak döner.
;Burada ayraç olarak 46. karakteri yani . (nokta) kullanıyoruz diyelim.
;”Eğer %dokunulmazlar içinde $1 parçası varsa aktif pencereye $1 zaten
;listede var diye echola” dedikten sonra eğer yoksa ne yapılacağına geliyoruz.

else { set %dokunulmazlar $addtok(%dokunulmazlar,$1,46) | echo -a $1 dokunulmazlık listesine eklendi. | halt }

;if kısmı geçerli olmadığı zaman else kısmına atlıyor ve %dokunulmazlar değerini
;verdiğimiz değerle birleştirip tekrar setliyor ve işlemin gerçekleştiğine dair
;bilgi veriyor echo ile. Şimdi alias’ı kapatıyoruz

}

;Ekle alias’ımız bu kadar. /ekle xxx yaptığımızda %dokunulmazlar değerine xxx
;nickini ekleyebiliyoruz. Şimdi silme işlemine gelelim.

alias sil {

;yine önce listede olup olmadığını kontrol ediyoruz.

if ($istok(%dokunulmazlar,$1,46) == $true) { set %dokunulmazlar $remtok(%dokunulmazlar,$1,1,46) | echo -a $1 dokunulmazlık listesinden silindi. | halt }

;Eğer listede yoksa olmadığına dair bilgi gelmesini sağlıyoruz.

else { echo -a $1 listede zaten yok ki nereye çıkartıyorsun :p | halt }

;Alias’ı kapatıyoruz.

}

deltok ile remtok aynı görevi yaparlar, fakat remtok içinde x olan parçaları çıkartır ve değerin kalanın gösterir. deltok ise x numaralı parçayı çıkartıp değerin kalanını gösterir. Yani deltok kullanmak için parçanın kaçıncı sırada olduğu bilmek gerekir. remtok kullanımı ise şu şekildedir:

$remtok(deger,deger içinden silinecek parça,parça numarası,ayraç kodu)

Buradaki parça numarası, silinecek parça yerine yazılan metin ile çakışan (yani tanıma uyan) parça numarasını ifade eder. Mesela x yazdığınızda, içinde x geçen kaçıncı parçayı sileceğinizi belirtir. Bunun nedeni ise remtok’un da if ile kullanılan “isin” gibi çalışmasıdır. Yani içinde silinecek parça kısmına a yazarsanız içinde a harfi olan tüm parçalar etkilenecektir. Bu nedenle etkilenen parçaların arasından kaçıncının silineceğini belirtmeniz gerekir. Ama;

Eğer bir değer silecekseniz ve değerle çakışan başka değerler de varsa, kafanız karışıyorsa, remtok u case sensitive(yani büyük küçük harf duyarlı, === gibi) olarak kullanabilirsiniz:

$remtokcs(deger,silinecek parça, çakışan parçalardan silinecek olanın sıra numarası,ayraç kodu)

Token Identifierları

$addtok(metin,eklenecek parça,ayraç kodu)

Değerin en sonunda bir parça ekler. Ama değerin içinde o parça zaten ekliyse eklemez.

Örneğin %deger a.b.c olsun

$addtok(%deger,d,46)

yaptığımızda %deger a.b.c.d olur. Ama;

$addtok(%deger,c,46) yaptığınızda %deger değişmez. Çünkü %deger içinde c zaten vardı.

$deltok(metin,silinecek parça numarası,ayraç kodu)

Verdiğiniz sıra numarasındaki parçayı siler.

%deger = a.b.c.d

$deltok(%deger,3,46) a.b.d olur. 3. sıradaki değer c olduğu için c silinir ve diğerleri geri döner.

$deltok(%deger,2-3,46) a.d olur. 2den başlayarak 3 de dahil olmak üzere parçaları silerek kalanı bize gösterir.

$findtok(metin , parça , aranan parça numarası , ayraç kodu)

%deger = a.b.c.d

$findtok(%deger,c,1,46) yazdığımızda %deger içinde c parçası 3. sırada olduğu için 3 olarak geri döner.

$findtok(%deger,e,1,46) yazdığımızda ise %deger içinde e parçası olmadığı için

$null olarak geri döner.

Eğer aranan parça numarası yerine 0 (sıfır) yazarsak aranan parçanın kaç tane parça ile çakıştığını görürüz.

%deger = ahmet.mehmet.recep

$findtok(%deger,e,1,46) içinde e olan ilk parçayı verir. Yani ahmet’i.

$findtok(%deger,e,0,46) ise içinde e harfi olan parçaların sayısını verir. Yani 3.

Eğer belirli bir parçayı arıyorsanız ve başka parçalarla çakışmasını istemiyorsanız $findtokcs kullanabilirsiniz.

Gettok kullanımına ek olarak;

%deger = a.b.c.d.e

$gettok(%deger,2-,46) yazdığınızda 2. de dahil olmak üzere 2. parçadan itibaren en sonuncuya kadar olan parçaları geri verir. Yani b.c.d.e döner geriye.

$gettok(%deger,2-4,46) yazdığızda da 2. de dahil olmak üzere 2. parçadan itibaren 4. parça da dahil olmak üzere 4. parçaya kadar olan kısmı alır. Yani b.c.d döner geriye.

$instok(metin,eklenecek parça,ekleneceği yerin sıra numarası,ayraç kodu)

Bu da belirttiğimiz parçayı belirttiğimiz sıraya eklemeye yarayan bir token identifier’ı. Eğer eklenecek parça metinde zaten mevcut olsa bile eklenir. $addtok’tan bu yönüyle ayrılabilir. Ayrıca ekleneceği yeri belirtmek zorundasınız.

%deger = a.b.d

$instok(%deger,c,3,46) yazdığımızda 3. sıraya c parçasını ekler. Ve bize a.b.c.d olarak döner.

$instok(%deger,c,9,46) yaptığımızda ise zaten 3 parça olduğu için 9 10 11 12 farketmeyeceğinden en sona eklenir ve a.b.d.c olarak döner.

$matchtok(metin,aranan parça,çakışan parçanın sıra numarası,ayraç)

İçinde e harfi olan kaç tane parça olduğunu görmek için çakışan parçalardan kaçıncı olanı alacağımızı belirttiğimiz yere 0 yazarız.

$matchtok(one two three, e, 0, 32) yaptığımızda içinde e harfi olan 2 parça olduğu için geriye 2 olarak döner.

$matchtok(one two three, e, 2, 32) yaptığımızda ise içinde e harfi olan 2. parçayı almak istediğimizi belirttiğimiz için geriye three döner.

Eğer aradığımız parçayı tam olarak almak istiyorsak ve sıra numarasında tereddüt ediyorsak $matchtokcs kullanırız.

$puttok(metin,parça,sıra numarası,ayraç)

Sıra numarasını verdiğimiz parçayı belirttiğimiz parça ile değiştirir.

Örneğin;

%deger = a.b.c.d

$puttok(%deger,x,3,46) yazdığımızda 3. parçayı x harfi ile değiştireceği için geriye a.b.x.d döner.

$reptok(metin,değiştirlecek parça,değiştirileceği parça,sıra numarası,ayraç)

puttok’tan tek farkı sıra numarasını bilmediğimiz parçaları silmek için kullanabilmemizdir. reptok’ta ise sıra numarasını kesin olarak bilmemize gerek yok, sadece eşleşen parçalardan kaçıncının değiştirileceğini ve değiştirilecek parçayı bilmemiz yeterli.

%deger = ahmet1.ahmet2.ahmet3.ahmet11.ahmet22.ahmet33

$reptok(%deger,ahmet,mehmet,1,46) yazdığımızda içinde ahmet olan parçalar arasından 1. parça mehmet ile değiştirilir. yani mehmet.ahmet2.ahmet3.ahmet11.ahmet22.ahmet33 olarak geri döner. Eğer 1 yerine 2 yazarsak ahmet2 silinir ve yerine mehmet yazılır.

Ama biz ahmet2 yi sileceğiz diyelim ve sıra numarasını bilmiyoruz diyelim.

(Sıra numarasını bilmiyoruz derken ahmet2 2. sırada olur tabi ama 2. sırada değil diyelim :P)

$reptokcs(%deger,ahmet2,mehmet,1,46) yaptığımızda ahmet22 ile çakışmadan ahmet2 silinir ve yerine mehmet geçer.

$sorttok(metin,ayraç,ncra)

Metin içindeki parçaları büyükten küçüğe veya küçükten büyüğe olarak sıralar.

%deger = e.d.c.b.a

$sorttok(%deger,46) = a.b.c.d.e olur.

%deger = 1.3.5.2.4

$sorttok(%deger,46,nr) = 5.4.3.2.1 olur.

Varsayılanı (yani sıralama anahtarı kullanılmamış hali) alfabetik olarak sıralama yapar.

n = Numaralara göre sıralar.

c = Kanal ve nick olarak sıralar.

r = Sıralamayı tam tersine çevirir ve diğer anahtarlarla birlikte kullanılabilir.

a = Alfanumerik sıralama. Sıralamayı harf-rakam şeklinde düzenler.

$wildtok(metin,aranan wildcard,çakışan parçalardan alınacak olanın sıra numarası,ayraç)

Bunun da diğer arama identifier’larından farkı ? ve * (wildcard) kullanabilme özelliğidir.

%deger = ahmet.mehmet.hismet

$wildtok(%deger,*met*,0,46) yaptığımızda içinde met olan kaç parça olduğunu görürüz. Yani 3 olarak geri döner.

$wildtok(%deger,*met*,1,46) yaptığımızda ise içinde met olan 1. numaralı parça döner. Yani ahmet olarak geri döner.

Entry filed under: mIRC Dersleri. Tags: .

Hazır Kodlar Nasıl Eklenir? Hash Tablosu İle İşlem Yapmak

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Takvim

Eylül 2008
P S Ç P C C P
    Eki »
1234567
891011121314
15161718192021
22232425262728
2930  

Most Recent Posts


%d blogcu bunu beğendi: