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

 Kayıt ol  Topluluk
36Beğeni(ler)

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 27 Ağustos 2015, 13:43   #11
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (2)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Feragat Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Başta söyleyeyim amaç "bilgi paylaşmak". Ara sıra tekrar etmekte fayda var. Kısa ve daha düzenli yazmak açısından..

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
raw 318:*:if (%hmm == ok) { unset %hmm | .disable #w | return } | elseif (%nck) { operserv killclones %nck | msg #admin Bilgi: %nck sunucudan uzaklaştırıldı. | unset %nck | .disable #w }

1-
(%hmm == ok) yerine %hmm = ok kullanılabilir.
mirc.chm de yer almasada == operatörü = ile aynı işlemi görmektedir.

2-
if (koşul) { kodlar }
elseif (koşul) { kodlar }

Bu mantıkta return edip, boş sonuç döndürüp sonlandırmaya gerek yok. Sadece uyan koşulu çalıştırır.
Eğer
if (koşul) { kodlar }
if (koşul) { kodlar }
if (koşul) { kodlar }
yapılmış olsaydı sonunda return veya halt edebilirdiniz.

3-
Eğer byte olarak kısa kod yazmak istiyorsanız

{ komut | komut | komut | komut | komut }

yerine

{
komut
komut
komut
komut
}
kullanın.

yan yana yazdığınız da komut(boşluk)(ayırıcı karakter)(boşluk)komut düzeninde byte miktarı fazla olacaktır.

4-
regex'te /i kullanıyorsanız [a-zA-Z yerine [a-z veya [A-Z yeteri olacaktır. İkisinin yazılmasına gerek yok.

5-
burada herhangi bir stringi modifiye etmeyecekseniz (/ixsmgAZ vs.) $regex(text,/regex/) yerine sadece $regex(text,regex) kullanabilirsiniz.

(!$regex($2,/^#)) yerine !$regex($2,^#) gibi. (sadece /() başlangıç kullanılmış bu da hatalı.)

Eğer daha kısa yazmaksa maksat #* !iswm $2 veya $2 !ischan (ischan'ı denemek lazım :p) kullanabilirsiniz.

6-
on $*:text:/^(!opekle)/iS:#:{

gereksiz Back Reference (Geriye Dönük Referans) kullanmaya da gerek yok (yakalamak yerine eşleştirmek yeterli). /(!opekle)/ yerine /!opekle/ gibi.

7- Bilindiği üzere pek çok event'ta matchtext aranan/yakalanan veri kısmı mevcut. Onu kullanmak sizi gereksiz bir veya bir çok koşuldan kurtarır.

on *:notice:*:?:{
if (!$regex($nick,/^ChanServ$/i)) return
if ($regex($1-,/kanal[ıiİ]\skayitl[ıiİ]\sde[gğĞ][ıiİ]l/Si) || $regex($1-,/erisim\slistesi.+kayitli.+nick/Si) || $regex($1-,/Erisim\sseviyesi.+ve.+arasinda/Si) || $regex($1-,/nick.+kanalindaki\serisim.+zaten/Si) || $regex($1-,/nick.+kanalindaki\serisim\sseviyesi.+degisti/Si) || $regex($1-,/nick.+kanalinin\serisim.+seviyeden.+eklendi/Si) { msg %kanal $1- | .disable #opekle }
}

Bunun yerine

on $*:notice:/kanal[ıiİ]\skayitl[ıiİ]\sde[gğĞ][ıiİ]|erisim\slistesi.+kayitli.+nick|Erisim\sseviyesi.+ ve.+arasinda/Si:*:

şeklinde bir matchtext işi kısaltır gibi.

Khaled amca 7.42 de regex kütüphanesini güncellemiş
-
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
11.Updated libraries to PCRE v8.37.

-
- Güzel işler çıkar bundan
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Şuan iş yerinde olduğum için fazlaca örneklendirme ve detaylama fırsatım olmadı. Yardım edilen kodları elinizden geldiğince açıklayın. Kullanıcı sadece hazırı alıp gitmesin, alırken öğrensin. Başta söylediğim gibi bu anlatımın amacı bilgi paylaşmak ve bunun kimseye zararı olacağını düşünmüyorum. Kolay gele.

Öncelikle teşekkür ederim. @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] (Hasan abi)'in bir iletisinde yeni jenerasyonun işi çok ilerlettiğini okumuştum ama ne yalan söyleyeyim, bu kadarını beklemiyordum. Ben 6 yıldır mIRC Scripting'den uzağım. Dolayısıyla geri dönüş safhasında bazı noktaları kaçırabilirim. Hatta geçen gün $lines identifierını kullanmayı bile unutmuştum dosyadan okutmalı bir kodda.

Benim amacım kısa kod yazmayla ilgiliydi evet, ama buna kalkışma nedenim koddaki { yapılacaklar } kısmının 4-5 satırda da aynı olması ve çok fazla if koşulu kullanılmasıydı. Esasında bunların tek bir if koşulu içerisinde de kullanılabileceğini göstermek için düzenledim o kodu. on TEXT içerisinde regular expression kullanılabileceği gibi on NOTICE içerisinde de kullanılabilirdi ama bunu yaparsam o zaman || kullanmanın önemini vurgulayamazdım diye düşündüğüm için bu yola gitmedim. Diğer söylediklerinde haklısın.

Ayrıca if/elseif kullanımı olan kodum tamamen @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]'in mantığı anlamasına yönelikti, o kodda zaten kısa yazmaya ya da hızlı çalışmasına önelik bir kullanım yapmadım. @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...], mantığı daha iyi anlayabilsin diye o şekilde yazdım.

Bilgilendirmelerin için tekrar teşekkür ederim @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]. Daha önce de açıklamalı yardım iletilerini okuma fırsatı buldum, gerçekten bu işte hem uzmanlaşmış hem de nasıl yardım edileceğinin etiği konusunda bilinçli bir codersın.

__________________
iz bırakanlar, unutulmaz.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Alt 27 Ağustos 2015, 14:30   #12
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Tşk ederim. Scripting betiklerinde genel özellik, alternatif kısa,uzun yolların fazlalığı. Söylediğin gibi ilk öğrenim, anlama, kavrama etaplarında kodu çalıştırabilmek önemli. short code (kısalık) veya speed performance (hız performansı) artık iş hobiye dönüştüğünde devreye giriyor. Yinede ms'e merak salan arkadaşların bunları da bilmesinde öğrenmesinde fayda var. Belli kalıplara bağlı kalmamak keyifli. Ne kadar geliştirebilirsek yapılabilecek işler o kadar güzelleşiyor. Kolaylıklar dilerim.

__________________
The Ghost of Christmas Past...

i'm here sometimes
 
Alıntı ile Cevapla

Alt 27 Ağustos 2015, 20:09   #13
Çevrimiçi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (1)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.





Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Regex buyur;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
on *:notice:*:?:{ if !$regex($nick,/^ChanServ$/i) return if $regex($1-,/(kanal[ıiİ]\skayitl[ıiİ]\sde[gğĞ][ıiİ]l|erisim\slistesi.+kayitli.+nick|erisim\sseviyesi.+ve.+arasinda|nick.+kanalindaki\serisim.+zaten|nick.+kanalindaki\serisim\sseviyesi.+degisti|nick.+kanalinin\serisim.+seviyeden.+eklendi)/Si) { msg %kanal $1- | .disable #opekle } }

|| kullanmaya gerek yok regex'de (veri|veri) olarak kullanabiliriz
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Bilgi amaçlı.

Ayrıca kodda her koşulu düşünerek ayarladım.

Access eklemede kanal ismi doğru girilmezse uyar.
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($2,/^#.+/) { msg # Lütfen kanal belirtiniz. | return }

Access eklenen nick doğru yazılmadı ise uyar.
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($3,/^([a-zA-ZĞğıİöÖüÜşŞçÇ_^\133\135}{][a-zA-ZĞğıİöÖüÜşŞçÇ0-9_|^}\{\133\135`-]{0,30})$/i) { msg # Lütfen nick belirtiniz. | return }

Yetki seviyesi sayıdan oluşmuyorsa uyar..
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($4,\d) { msg # Lütfen Yetki seviyesini giriniz. | return }

Gibi bütün koşullar düşünerek yazmıştım..

 
Alıntı ile Cevapla

Alt 27 Ağustos 2015, 21:12   #14
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (2)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Toprak Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Regex buyur;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
on *:notice:*:?:{ if !$regex($nick,/^ChanServ$/i) return if $regex($1-,/(kanal[ıiİ]\skayitl[ıiİ]\sde[gğĞ][ıiİ]l|erisim\slistesi.+kayitli.+nick|erisim\sseviyesi.+ve.+arasinda|nick.+kanalindaki\serisim.+zaten|nick.+kanalindaki\serisim\sseviyesi.+degisti|nick.+kanalinin\serisim.+seviyeden.+eklendi)/Si) { msg %kanal $1- | .disable #opekle } }

|| kullanmaya gerek yok regex'de (veri|veri) olarak kullanabiliriz
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Bilgi amaçlı.

Ayrıca kodda her koşulu düşünerek ayarladım.

Access eklemede kanal ismi doğru girilmezse uyar.
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($2,/^#.+/) { msg # Lütfen kanal belirtiniz. | return }

Access eklenen nick doğru yazılmadı ise uyar.
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($3,/^([a-zA-ZĞğıİöÖüÜşŞçÇ_^\133\135}{][a-zA-ZĞğıİöÖüÜşŞçÇ0-9_|^}\{\133\135`-]{0,30})$/i) { msg # Lütfen nick belirtiniz. | return }

Yetki seviyesi sayıdan oluşmuyorsa uyar..
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if !$regex($4,\d) { msg # Lütfen Yetki seviyesini giriniz. | return }

Gibi bütün koşullar düşünerek yazmıştım..

Ben seni anladım, ama sen bu kodu yazdığında zaten raw üzerinden @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] istenilen kodu yazmıştı; onun yazdığını görmeden on NOTICE üzerinden de ben yazmıştım. Bunun üzerine sen $regex kullanarak daha işlevsel ve hızlı çalışan bir kod yazmayı amaçladın diye düşündüm, zaten @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] de mantığı anladı ve sorun çözüldü; dolayısıyla biraz kod jimnastiği yapalım istedim. Ortada hâlâ sorununun çözülmesini isteyen birisi olsaydı yaptığım yanlış olabilirdi ya da senin koduna laf atsaydım, ama dediğim gibi amacım hazır aynı işi yapan 3 farklı kod yazılmışken biraz daha işi nasıl ileri götürebilirizi tartışmaktı. Kaldı ki @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] da hızlı ve işlevsel kod yazmak için güzelce maddeler saymış, benimle aynı doğrultuda düşündüğünü sanıyorum, kendisine de bir kez daha teşekkür ediyorum.

Yani amaç sidik yarıştırmak veya gövde gösterisi yapmak değildi, ben zaten 6 yıl mIRC Scripting'den uzak kaldım, web ile uğraştım. En ufak ayrıntıları bile yeni döndüğüm için kaçırmam doğaldır ki gerçekten amacım koduna saygısızlık etmek değildi. Kurduğun if koşullarının tümünde { msg ile bilgi gönder | grubu disable et } yer aldığından hepsini tek bir if koşulunda da toplayabilirizi göstermeye çalışmıştım, bunu farklı anladıysan kusura bakma. Böyle şeyler bana göre değil.

Ayrıca o zaman @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]'ın uyarılarını da göz önünde bulundurarak event içerisinde $regex'i kurabiliriz, yani daha kısa olarak || ayracını kullanmadığımız gibi if koşulu da kurmayabiliriz, özetle şöyle de olabilirdi:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
on $*:text:/^(!opekle)/iS:#:{ if (!$regex($2,/^#)) { msg # Lütfen kanal belirtiniz. | return } if (!$regex($3,/^([a-zA-ZĞğıİöÖüÜşŞçÇ_^\133\135}{][a-zA-ZĞğıİöÖüÜşŞçÇ0-9_|^}\{\133\135`-]{0,30})$/i)) { msg # Lütfen nick belirtiniz. | return } if (!$regex($4,\d)) { msg # Lütfen Yetki seviyesini giriniz. | return } else { .enable #opekle | set %kanal # | cs access $2 add $3- } } #opekle off on $*:notice:/kanal[ıiİ]\skayitl[ıiİ]\sde[gğĞ][ıiİ]l|erisim\slistesi.+kayitli.+nick|erisim\sseviyesi.+ve.+arasinda|nick.+kanalindaki\serisim.+zaten|nick.+kanalindaki\serisim\sseviyesi.+degisti|nick.+kanalinin\serisim.+seviyeden.+eklendi/iS:*:{ if (!$regex($nick,/^ChanServ$/i)) return msg %kanal $1- .disable #opekle } #opekle end

Not: Olumsuz koşullardaki uyarı kısmının mantığı güzel olmuş ama sanırım atlamışsın, on TEXT eventında benim kodumda da var senin yazdığın koddaki satırlar. Kodu kısaltmak adına onlara dokunmadım, yukarıda yine var.

__________________
iz bırakanlar, unutulmaz.
 
Alıntı ile Cevapla

Alt 27 Ağustos 2015, 21:15   #15
Çevrimiçi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (1)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Biz de zaten "sidik" yarıştırmıyoruz sadece "||" yı $regex'de kullandık
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

 
Alıntı ile Cevapla

Alt 27 Ağustos 2015, 21:18   #16
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (2)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Toprak Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Biz de zaten "sidik" yarıştırmıyoruz sadece "||" yı $regex'de kullandık
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Ben senin sidik yarıştırdığını söylemedim, beni yanlış anlayıp bu şekilde yaklaştığımı düşündüğünü sezimledim ve bunu söyledim. Bu çıkarımı da "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Regex buyur" şeklinde başlamandan dolayı yaptım. Sorun yoksa eyvallah.

__________________
iz bırakanlar, unutulmaz.
 
Alıntı ile Cevapla

Alt 01 Eylül 2015, 09:16   #17
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Etiketlemişsiniz bundan dolayı gördüm konuyu. Değerinizi bilin, venezuelladan yazıyorum .) Birazda can sıkıntısı.

Regex'ın cılkını çıkartmışsınız.
Normal /if operatorlerini kullanmaktan bu kadar uzaklaşmayın yahu.

İlk olarak;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
!$regex($4,\d)

Bu kullanım stabil çalışmaz.
a1a, b1, 1c, qwqwe23sasdd vb. olan textlere de işlem yapacaktır.
-
$4 !isnum kullanmanız en mantıklısı olacaktır. Karışıklığa gerek yok.

TEXT eventinde regex kullanmışsınız. Buna da gerek yok. Ayrıca kanal girdisi için external sorgu yöntemi ile ayriyeten /if kullanmışsınız, hali hazır da event içerisinde kullanın, olsun bitsin.

Örnek:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
on *:text:!opekle #?* &:#:

/set işleminde zaten veriable'a bir veri atarsanız(ok atanmış), sorgulama yaparken /if %hmn =|== ok vs. yapmanıza gerek yok.
/if %hmn { bla bla.. } yapmanız yeterli olur.

Aynı script dosyası içinde iki aynı eventi kullanmassanız daha iyi olur.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
raw *:*: { if $numeric = 401 { bla bla.. } if $numeric = 318 { bla bla.. } }

Gereğinden fazla regex kullanmak, kodları karmaşık hale getirmekten başka bir işe yaramaz.(bana bakmayın, ben yaparım siz yapmayın) .)
Özellikle yardım edilirken kodlar en basit ve açık şekilde yazılırsa, arz eden kişiler tarafında öğrenme hevesi doğacaktır.

Neyse sağlıcakla kalın. Dağılın şimdi .)

Not: Feragat ischan yemez.

 
Alıntı ile Cevapla

Alt 01 Eylül 2015, 11:54   #18
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Nihayet Regexi Sadece Karmasık İşlemlerde, Regex Harici Yazimlarda Çok Uzun Kodlamalar Gerektiren Durumlarda, Normal Yazimin İçine Serpiştirerek Kullanılması Gerektiğini Söyleyen Birisi Çıktı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Aynen Bahsettiğin Gibi @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] Bu Şekilde Olursa Anlaşılması Daha Kolay Oluyor.

 
Alıntı ile Cevapla

Alt 01 Eylül 2015, 13:13   #19
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: kontrol edip op ekletme hk.




Regex sonuçta mirc içinde bir öğe. Tamamen onu kullanarak kod yazılmasa da öğrenmekte fayda var. Bazı durumlarda yapılan işi bir hayli kısalttığı da aşikar. Adam akıllı anlatımlar örnekler olmadığı için araştırıp sınırları zorlamak insanlara zor geliyor. "IF THEN ELSE" de hiç anlamayana göre zor gelebilecek bir konu. Bu konuda kızdığım nokta insanların yerinde saymakta ısrar etmesi.
File handling - comobject - binary - Bitsel tanımlar ve hatta /tokenize bile kaç kodda var ki. Onlar kötü onlar zor sakın onlarla uğraşmayın aman!!! gibi bir bilinç var maalesef. Korkacak bir şey yok. Araştırmaktan öğrenmekten korkmayın. Eğer korkmaya devam ederseniz, mIRC Scripting Sorunları kategorisi şuanda da olduğu gibi HAZIR İSTEK dışında bir potansiyelden başkasına sahip olamaz.

__________________
The Ghost of Christmas Past...

i'm here sometimes
 
Alıntı ile Cevapla

Cevapla


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
txt ye veriyi * * arasına ekletme cashmare mIRC Scripting Sorunları 1 04 Haziran 2011 00:14
Kelime Kısaltması Ekletme Tapanx mIRC Scripting Sorunları 3 03 Ocak 2009 16:02
bot'a IP akick ekletme Erdem mIRC Scripting Sorunları 3 25 Ekim 2008 23:07
Mesaj ekletme Leader_19 Eggdrop, NeoStats, BNC 0 22 Eylül 2007 15:19
! ile maske ekletme KiLL mIRC Scripting Sorunları 6 03 Mart 2007 15:14