IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 28 Mart 2005, 22:14   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Tokenize Identifiers ($gettok v.s.)




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


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
onra while'ı kapatıyoruz.

}

;Alias'ı da kapatıyoruz

}

Kodun tamamı şu şekilde oluyor:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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)

(Abi gözlerim yoruldu sonra devam ederim gerisine)

To be continued... :P

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Alt 29 Mart 2005, 18:57   #2
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



hazırladığın bu bilgi verici ve öğretici mesajlar için teşekkürler. yararlı olacağından eminim.

 
Alıntı ile Cevapla

Alt 29 Mart 2005, 21:39   #3
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



Aciklayici bilgilerin icin tesekkurler MephisTo. Yararli olacaktir. Fakat ben bir konuya deginmek istiyorum. Anlatimda kullandigimiz kelimeler...

Token nedir? Dilin yapisinda mevcut olan ve anlam tasiyan en kucuk birime token (atom) denir. mIRC Scripting'te bu tokenize'dan gelir. Kucuk birimlere ayirma islevi oldugu icin. 'if' te bir atomdur (tokendir), while'da, var'da, set'te...
Turk programcilar olarak "atom" demeyi yegliyoruz. Zira anlatimlarimizda da boyle kullaniriz. Boyle kullanilmadiginda ilk defa okuyan birisi icin (veya bir edebiyat ogretmeni icin) eziyet olur.

Bir baska ornek, variable yerine nesne kelimesini kullaniriz. Bellekte yer kaplayan ve iceriklerine erisilebilen alanlara nesne denir. Nesne denildiginde programcinin, scripterin anlayacagi bu olacagi icin, kaynak olusturmak icin anlatim yaparken de zengin dil secenekleriniz olur. Turkcemizin zenginligi iste
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Tekrar tesekkur ediyorum. Saygilar.

Dipnot: genel anlatim veya kaynak hazirlamada boyle yapilmasinin iyi olacagini dile getirdim. Kisisel yardim gibi durumlarda biz de nesne yerine variable diyebiliyoruz. Ki herkesin daha iyi anlayacagi bir anlatim bicimi vardir.

 
Alıntı ile Cevapla

Alt 01 Nisan 2005, 21:03   #4
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



Teşekkürler DefauLt, ama ben mIRC'in help dosyasında geçen terimlerle ve buradaki herkesin bildiği anlayacağı şekilde anlatayım istedim
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Sözde devam edecektim ama bir sürü dert sorun iş güç vs...

Bari mIRC.hlp dosyasını paste edip tercümesini yapayım çünkü hala vaktim yok. Ama yarım kalmasını istemem.

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. (Bunu bilmiyorum ne demekse
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
)

$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.

Umarım işinize yarar.

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 08:48   #5
goXXip
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)



MephisTo bu yazdıklarından yola çıkarak bir kanala girmeden tüm opları deop yapmak istedim...


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
raw 353:* { unset %_oplar unset %_kanal set %_oplar $remove($4-,@) set %_kanal $3 } alias massdeop { var %_topnick = $numtok(%_oplar,32) var %i = 1 while %i <= %_topnick { samode %_kanal -o $gettok(%_oplar,%i,32) inc %i } }

kodlar böyle fakat tüm kanaldaki kullanıcılara deop çekiyor.. yani op olan deop oluyor olmayanda
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Yardımcı olursan sevinirim..

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 11:14   #6
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



Ben şeyi Anlayamadım..

Mass deop Komutunun Anlamı : "Herkesi Deop Et"
Yani Bir Problem Yok Dostum Aslında..

Bu Komutu Genellerde Bir Opun Şifresi Çalındığında (Biz Sop/Aop`sak Sopun şifresi veya Biz Opsak Başka Bir Opun Şifresi), Kanala Yapılan Saldırıları Engellemek İçin Kullanılır..
Yani Bir Problem Göremedim Ben..

Yardım Gerçekten Güzel Olmuş Elinize Sağlık..

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 11:27   #7
goXXip
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)
.




Ben Bir sunucuda yetkiliyim ve sunucu Unreal.. OperServ de Massdeop komutu yok.. Kısacası kanala girmeden Kanalı massdeop yapabilmeliyim... kod şu şekilde çalışıyor... örn: /names #kanal | /massdeop yazdığında bu komutu uyguluyor... Benim burada istediğim @ Prefix i olan kişileri deop etsin. Ama kanaldaki tüm herkese deop uyguluyor... Kanalda 100 kişi olduğunu düşünün 12 ci de Excess Flood dan düşerim
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
yardımcı olursanız sevinirim...

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 13:18   #8
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



variable'lerini kodu çalıştırdığında altlarına echo ekyerek, kod çalıştığında nerede hata yaptığını daha iyi anlarsın.

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 13:21   #9
goXXip
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)



hımm. neyse MephisTo yu bekleyelim bari

 
Alıntı ile Cevapla

Alt 02 Nisan 2005, 13:55   #10
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



set %_oplar $remove($4-,@)

şunu bidaha düşün

 
Alıntı ile Cevapla

Cevapla

Etiketler
$gettok, gettok, identifiers, mirc, mirc download, mirc indir, tokenize


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Bitwise Identifiers (Bitsel Tanımlar) Feragat mIRC Scripting Dersleri 2 26 Kasım 2014 23:23
gettok sorunu Spectral mIRC Scripting Sorunları 13 20 Ekim 2013 12:43
whois identifiers'i Lord_Raiden mIRC Scripting Sorunları 2 25 Aralık 2008 14:26
gettok sorunu RedLine mIRC Scripting Sorunları 1 14 Nisan 2008 01:57
Tokenize 32 and Tokenize 46 ...? Sw33t mIRC Scripting Sorunları 1 23 Ocak 2007 03:52