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:
Kod:
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

| 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)
(Abi gözlerim yoruldu sonra devam ederim gerisine)
To be continued...
