« Hash Tablosu İle İşlem Yapmak | mIRCMerkez | YeÅŸil Renkli Toolbar »
Tokenize Identifiers
Yazar admin | Åžubat 1, 2008
->
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
| 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.
Kategori: mIRC Dersleri | Tokenize Identifiers
|Bugun 0 toplam 48 kere okundu.
Benzer mIRC Konulari;
- Nick Değişim Saldırı Koruması
- Hash Tablosu İle İşlem Yapmak
- Event Dersleri
- Küfür Koruma Addonu
- mIRCMerkez Kanal Diyalogu