Eggdrop

Eggdrop Seen Özelliği: "Bu Kişiyi En Son Ne Zaman Gördün?"

· Güncelleme: · 5 dk okuma

Eggdrop Seen Özelliği: "Bu Kişiyi En Son Ne Zaman Gördün?"
İçindekiler
  1. Seen Nasıl Çalışır?
  2. Seçenek 1: Yerleşik seen Modülü
  3. Seçenek 2: Seen Scriptleri
  4. Kendi Basit Seen Scriptinizi Yazmak
  5. Veri Saklama ve Performans
  6. Gizlilik Boyutu
  7. Kötüye Kullanıma Karşı Önlemler
  8. Gerçek Bir Senaryo
  9. Sonuç

IRC'de en sık sorulan sorulardan biri şudur: "Ahmet'i en son ne zaman gördünüz?" Kanaldaki insanlar bunu hatırlamayabilir, ama bot hatırlar. Eggdrop seen özelliği, kanaldaki her kullanıcının en son ne zaman görüldüğünü, ne yaptığını ve hangi mesajla ayrıldığını kaydeder. Bir kullanıcı !seen Ahmet yazdığında bot "Ahmet 3 saat 12 dakika önce #kanal kanalından 'iyi geceler' mesajıyla çıktı" gibi bir cevap verir. Bu küçük özellik, topluluk kanallarının en sevilen bot işlevlerinden biri hâline gelmiştir.

Seen Nasıl Çalışır?

Seen sistemi temelde bir olay kaydedicidir. Bot kanaldaki giriş, çıkış, nick değişikliği, atılma ve bağlantı kopması gibi olayları izler. Her olayda kullanıcının nickini, host bilgisini, olayın türünü, zamanı ve varsa mesajı kaydeder. Bir kullanıcı sorgu yaptığında bot bu kayıtlardan ilgili nicke ait en son girdiyi bulur ve okunabilir bir cümleye dönüştürür. Zamanı "3 saat 12 dakika önce" gibi göreli bir ifadeyle göstermek, kullanıcıların saat dilimi farklarıyla uğraşmasını önler.

Kaydedilen olay türleri genellikle şunlardır:

OlayÖrnek cevap
joinKanala 10 dakika önce girdi ve hâlâ burada
part2 saat önce kanaldan "görüşürüz" diyerek ayrıldı
quit1 gün önce IRC'den çıktı: "Ping timeout"
nick5 dakika önce nickini Ahmet_ olarak değiştirdi
kick3 saat önce Moderatör tarafından atıldı
splitBir sunucu bölünmesi sırasında kayboldu

Seçenek 1: Yerleşik seen Modülü

Eggdrop'la birlikte gelen seen modülü, kullanıcı listesindeki kayıtlı kullanıcılar için temel bir seen işlevi sunar. eggdrop.conf'ta modülü yükleyerek etkinleştirebilirsiniz:

loadmodule seen

Bu modülün sınırlılığı, yalnızca botun userfile'ında kayıtlı kullanıcıları takip etmesidir. Kanaldaki rastgele bir ziyaretçiyi sorguladığınızda cevap alamazsınız. Kayıtlı kullanıcıların son görülme zamanı ise zaten userfile'da tutulur ve partyline'da .whois ile de görülebilir. Küçük ve kapalı topluluklar için bu yeterli olabilir, ama genel kanallar için genellikle daha kapsamlı bir çözüm gerekir. Modüllerin genel yapılandırması için eggdrop.conf ayarları yazımıza bakın.

Seçenek 2: Seen Scriptleri

IRC topluluğu yıllar içinde çok sayıda seen scripti üretmiştir. Bunların en bilinenleri, kanalda görülen herkesi kaydeden ve gelişmiş arama özellikleri sunan scriptlerdir. Bu scriptler genellikle şu özellikleri sunar:

  • Kanalda görülen bütün kullanıcıları kaydetme,
  • Joker karakterle arama, örneğin !seen *ahmet*,
  • Host maskesine göre arama,
  • Bir kullanıcının farklı nicklerle görülme geçmişi,
  • Kanal bazlı açma ve kapama,
  • Eski kayıtları otomatik temizleme.

Bir script seçerken son güncellenme tarihine, kullandığınız Eggdrop sürümüyle uyumluluğuna ve verilerin nasıl saklandığına dikkat edin. Yıllardır güncellenmemiş scriptler güncel Tcl sürümlerinde uyarı veya hata verebilir. Script yükleme adımları Tcl script yükleme yazımızda anlatılıyor.

Kendi Basit Seen Scriptinizi Yazmak

Seen mantığını anlamak için küçük bir örnek yazabilirsiniz. Temel fikir, her çıkışta kullanıcının bilgilerini bir dizide saklamaktır:

bind part - * seen_part

proc seen_part {nick uhost hand chan msg} {
  global seen
  set seen([string tolower $nick]) [list [unixtime] part $chan $msg]
}

Sorgu komutu ise diziden kaydı okuyup duration komutuyla geçen süreyi okunabilir hâle getirir. Bu örnek, verileri yalnızca bellekte tuttuğu için bot yeniden başladığında kayıtlar kaybolur. Gerçek bir script, verileri düzenli aralıklarla dosyaya yazmalıdır. Dizilerin dosyaya nasıl kaydedileceğini Tcl değişkenler ve listeler yazımızda, düzenli kaydetme için zamanlayıcı kullanımını ise timer ve utimer yazımızda anlattık.

Veri Saklama ve Performans

Kalabalık kanallarda seen veritabanı hızla büyür. Günde binlerce farklı kullanıcının girip çıktığı bir kanalda birkaç ay içinde yüz binlerce kayıt birikebilir. Bu, hem bellek kullanımını hem de arama süresini artırır. Bunu kontrol altında tutmak için birkaç yöntem vardır:

  1. Süre sınırı: Örneğin 90 günden eski kayıtları otomatik olarak silmek.
  2. Kayıt sayısı sınırı: Veritabanında en fazla belirli sayıda kaydı tutmak.
  3. Kanal sınırlaması: Seen'i yalnızca gerçekten ihtiyaç duyulan kanallarda açmak.
  4. Arama sınırı: Joker karakterli aramalarda dönen sonuç sayısını sınırlamak.

Bu ayarların çoğu hazır scriptlerde yapılandırma değişkeni olarak sunulur. Botunuzun çalıştığı sunucunun kaynakları sınırlıysa bu değerleri düşük tutmak iyi bir fikirdir.

Gizlilik Boyutu

Seen özelliği masum görünse de bir gizlilik boyutu vardır. Bot, kullanıcıların ne zaman çevrimiçi olduğunu, hangi host'tan bağlandığını ve hangi mesajla çıktığını kaydeder. Bu bilgiler, birinin günlük alışkanlıklarını takip etmek için kötüye kullanılabilir. Sorumlu bir bot sahibi olarak şunlara dikkat edin:

  • Host bilgisini göstermeyin: Seen cevabında kullanıcının tam host bilgisini paylaşmak, IP gizleme özelliklerini anlamsız kılabilir. Host bazlı aramayı yalnızca op'lara açın.
  • Gizli kanalları dahil etmeyin: Gizli veya özel kanallardaki hareketleri genel kanallarda sorgulanabilir hâle getirmeyin.
  • Kayıtları süresiz tutmayın: Eski kayıtları düzenli olarak temizleyin.
  • Kullanıcıları bilgilendirin: Kanal kurallarında veya karşılama mesajında botun seen kaydı tuttuğunu belirtin.

Ağınızın IP gizleme özelliklerinin nasıl çalıştığını UnrealIRCd cloaking yazımızda anlattık.

Kötüye Kullanıma Karşı Önlemler

Seen komutu, kanaldaki herkesin kullanabildiği bir komut olduğu için flood aracına dönüşebilir. Birisi art arda onlarca !seen komutu göndererek botun kanalı mesajlarla doldurmasına yol açabilir. Önlemler:

  • Aynı kullanıcının komutu belirli bir sürede yalnızca bir kez kullanabilmesi,
  • Kanal genelinde dakikadaki toplam sorgu sayısının sınırlanması,
  • Uzun cevapların kanala değil, özel mesaj veya notice ile gönderilmesi,
  • Joker karakterli aramalarda en fazla birkaç sonuç gösterilmesi.

Bu tür sınırlamalar genel kanal koruması stratejinizin bir parçası olmalıdır; ayrıntılar için kanal koruması yazımıza bakın.

Gerçek Bir Senaryo

Bir oyun topluluğunun kanalında üyeler sık sık "Klan lideri en son ne zaman buradaydı?" diye soruyor. Kanalın botu yalnızca yerleşik seen modülünü kullandığı için yalnızca kayıtlı kullanıcılar hakkında cevap verebiliyor. Bot sahibi, kanalda görülen herkesi kaydeden bir seen scripti yüklüyor, kayıt süresini 60 gün ile sınırlıyor, host aramasını yalnızca op'lara açıyor ve her kullanıcı için 15 saniyelik bir komut sınırı koyuyor. Birkaç gün içinde !seen kanalın en çok kullanılan komutu hâline geliyor, ama sınırlamalar sayesinde hiçbir zaman flood'a dönüşmüyor.

Sonuç

Seen, bir topluluk kanalının hafızasıdır. Kapalı topluluklar için yerleşik modül yeterli olabilir; genel kanallar için güncel ve bakımlı bir script tercih edin. Veritabanını sınırlı tutun, gizliliğe saygı gösterin ve komutu flood'a karşı koruyun. Kanalınızı saldırılara karşı korumak için sıradaki rehberimiz Eggdrop kanal koruması.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

Seen özelliği ne işe yarar?

Bir kullanıcının kanalda en son ne zaman görüldüğünü, ne yaptığını (çıktı, nick değiştirdi, atıldı) ve nereden ayrıldığını gösterir.

Seen verileri ne kadar süre saklanmalı?

Kanalın ihtiyacına göre değişir, ancak birkaç ay sonra eski kayıtları temizlemek hem veritabanını küçük tutar hem de gizliliğe saygı gösterir.

Seen komutunun flood'a neden olmasını nasıl önlerim?

Komut başına kullanıcı ve kanal bazlı zaman sınırı koyun, cevapları uzun listeler yerine tek satırla verin.