IRCRehberi.Net- Türkiyenin En iyi IRC ve Genel Forum Sitesi  
 sohbet
seviyeli sohbet


mIRC Scripting Hazır Kodlar mIRC Scriptinglerinizde kullanabileceğiniz hazır kodlara bu başlık altından ulaşabilirsiniz.

🎙️ LAFZONA Sesli ve görüntülü konuşma • İnteraktif yayıncılık • Müzik ve sohbet bir arada Katıl →
 
Seçenekler Stil
Alt 21 Ağustos 2026, 14:14   #1
W r i t e r
KivanC - ait Kullanıcı Resmi (Avatar)

Standart */*Botunuz Arabanızı Evinizi Sizin Yerinize Bulsun*/*

🚗 ARAÇ:
!araba [marka] [model] [min-max]
!araba bmw 3.20 300000-500000

🏠 SATILIK:
!satilik [il] [ilce] [min-max]
!satilik istanbul kadikoy 500000-1000000

🏠 KİRALIK:
!kiralik [il] [ilce] [min-max]
!kiralik istanbul besiktas 5000-15000

🏡 ARSA:
!arsa [il] [ilce] [min-max]
!arsa istanbul silivri 100000-500000

🏰 VİLLA:
!villa [il] [ilce] [min-max]
!villa istanbul sariyer 2000000-5000000

🏢 İŞ YERİ:
!isyeri [il] [ilce] [min-max]
!isyeri istanbul kadikoy 500000-2000000

📊 DURUM:
!durum - Kullanım durumunuz
!cooldown - Cooldown durumunuz
!yardim - Yardım menüsü

-------------
🔹 mIRC Script
🔹 Socket (HTTPS)
🔹 Regex (Veri çekme)
🔹 Hash Tablo (Cache/Log)
🔹 SSL (Güvenli bağlantı)

------------------

HTML-Kodu

; ============================================
;  SAHIBINDEN ARAMA BOTU - TAM SÜRÜM
;  Geliştirici: [SİZİN ADINIZ]
;  Sürüm: 2.0
;  Tarih: 2026
; ============================================

; ---- KONFIGÜRASYON ----
alias bot_config {
  ; Proxy ayarları
  set %proxy.host 127.0.0.1
  set %proxy.port 8080
  
  ; Cache süresi (saniye)
  set %cache.timeout 300
  
  ; Max sonuç sayısı
  set %max.results 10
  
  ; ---- LİMİT SİSTEMİ ----
  set %limit.window 7200          ; 2 saat
  set %limit.max_requests 10      ; Max 10 sorgu
  set %limit.block_time 7200      ; 2 saat blok
  
  ; ---- COOLDOWN AYARLARI ----
  set %cooldown.global 3
  set %cooldown.max_attempts 5
  set %cooldown.block_time 300
  
  ; ---- KOMUT COOLDOWN SÜRELERİ ----
  set %cd.araba 30
  set %cd.satilik 45
  set %cd.kiralik 45
  set %cd.ev 45
  set %cd.arsa 60
  set %cd.villa 60
  set %cd.isyeri 60
  
  ; ---- YETKİLİLER ----
  set %admin.hosts *!*@*.example.com,*!*@192.168.*
  set %admin.nicks Admin,Root
  set %oper.hosts *!*@*.oper.com
  set %oper.nicks Oper,Helper
  set %oper.limit 25
  set %user.limit 10
  
  ; ---- KATEGORİ URL'LERİ ----
  set %kategori.otomobil /vasita/otomobil
  set %kategori.satilik_daire /konut/satilik-daire
  set %kategori.kiralik_daire /konut/kiralik-daire
  set %kategori.arsa /arsa
  set %kategori.villa /konut/villa
  set %kategori.isyeri /is-yeri
  
  ; ---- USER AGENT ----
  set %ua.list Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36|Chrome/120.0.0.0|Safari/537.36
  set %ua.list %ua.list $+ $chr(124) $+ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15|KHTML|Gecko|Safari/605.1.15
  set %ua.list %ua.list $+ $chr(124) $+ Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36|Chrome/119.0.0.0|Safari/537.36
}

; ---- BOT BAŞLAT ----
on *:START:{
  bot_config
  
  ; Hash tabloları
  hmake bot_cache 1000
  hmake bot_cooldown 500
  hmake bot_identify 100
  hmake bot_log 2000
  hmake bot_limits 500
  
  echo -a ✅ Sahibinden.com Bot başlatıldı!
  echo -a ⏱️ Limit: %limit.max_requests sorgu / %limit.window sn
  echo -a 🛡️ Admin: %admin.nicks
  echo -a 🔧 Oper: %oper.nicks (Limit: %oper.limit)
  echo -a 👤 Kullanıcı limiti: %user.limit
  echo -a 📢 Geliştirici: [SİZİN ADINIZ]
}

; ---- YETKİ KONTROLÜ ----
alias get_user_level {
  var %nick = $1
  var %host = $2
  
  ; Admin kontrolü
  var %i = 1
  while ($gettok(%admin.nicks, %i, 44) != $null) {
    if ($v1 == %nick) return ADMIN
    inc %i
  }
  
  %i = 1
  while ($gettok(%admin.hosts, %i, 44) != $null) {
    var %mask = $v1
    if ($wildcard(%mask, %nick $+ ! $+ %host)) return ADMIN
    inc %i
  }
  
  ; Oper kontrolü
  %i = 1
  while ($gettok(%oper.nicks, %i, 44) != $null) {
    if ($v1 == %nick) return OPER
    inc %i
  }
  
  %i = 1
  while ($gettok(%oper.hosts, %i, 44) != $null) {
    var %mask = $v1
    if ($wildcard(%mask, %nick $+ ! $+ %host)) return OPER
    inc %i
  }
  
  return USER
}

; ---- LİMİT KONTROLÜ ----
alias check_limits {
  var %nick = $1
  var %level = $2
  var %now = $ctime
  
  if (%level == ADMIN) return OK
  
  var %max_limit = $iif(%level == OPER, %oper.limit, %user.limit)
  var %window = %limit.window
  var %key = limits| $+ %nick
  var %log = $hget(bot_limits, %key)
  
  if (%log == $null) {
    var %new_log = $+($now, $chr(1), 1)
    hadd bot_limits %key %new_log
    return OK
  }
  
  var %log_count = 0
  var %clean_log = $null
  var %i = 1
  
  while ($gettok(%log, %i, $chr(1)) != $null) {
    var %entry = $v1
    var %time = $gettok(%entry, 1, 44)
    var %count = $gettok(%entry, 2, 44)
    
    if ($calc(%now - %time) < %window) {
      %log_count = $calc(%log_count + %count)
      if (%clean_log == $null) {
        %clean_log = %entry
      }
      else {
        %clean_log = %clean_log $+ $chr(1) $+ %entry
      }
    }
    inc %i
  }
  
  if (%log_count >= %max_limit) {
    var %block_key = block| $+ %nick
    var %block_until = $calc(%now + %limit.block_time)
    hadd bot_limits %block_key %block_until
    hdel bot_limits %key
    
    var %remain = $calc(%limit.block_time / 60)
    return $+(BLOCKED:, %remain)
  }
  
  var %new_count = $calc(%log_count + 1)
  var %new_entry = $+($now, 44, %new_count)
  
  if (%clean_log == $null) {
    %clean_log = %new_entry
  }
  else {
    %clean_log = %clean_log $+ $chr(1) $+ %new_entry
  }
  
  hadd bot_limits %key %clean_log
  
  var %remaining = $calc(%max_limit - %new_count)
  return $+(REMAINING:, %remaining)
}

; ---- COOLDOWN KONTROLÜ ----
alias check_cooldown {
  var %komut = $1
  var %nick = $2
  var %level = $3
  var %now = $ctime
  
  if (%level == ADMIN) return OK
  
  var %cd_sure = $iif(%level == OPER, $calc($hget(bot_cooldown, cd. $+ %komut) / 2), $hget(bot_cooldown, cd. $+ %komut))
  if (%cd_sure == $null) {
    %cd_sure = $iif(%level == OPER, 15, 30)
  }
  
  var %key = %komut $+ | $+ %nick
  var %last_use = $hget(bot_cooldown, %key)
  var %attempts = $hget(bot_cooldown, %key $+ .attempts)
  var %block_until = $hget(bot_cooldown, %key $+ .block)
  
  if (%block_until != $null && %now < %block_until) {
    var %remain = $calc(%block_until - %now)
    return $+(BLOCKED:, %remain)
  }
  
  if (%last_use == $null) {
    hadd bot_cooldown %key %now
    hadd bot_cooldown %key $+ .attempts 1
    return OK
  }
  
  if (%attempts >= %cooldown.max_attempts) {
    var %block_time = $calc(%now + %cooldown.block_time)
    hadd bot_cooldown %key $+ .block %block_time
    hdel bot_cooldown %key
    hdel bot_cooldown %key $+ .attempts
    return $+(BLOCKED:, %cooldown.block_time)
  }
  
  var %diff = $calc(%now - %last_use)
  if (%diff < %cd_sure) {
    var %remain = $calc(%cd_sure - %diff)
    inc %attempts
    hadd bot_cooldown %key $+ .attempts %attempts
    return $+(WAIT:, %remain)
  }
  
  hadd bot_cooldown %key %now
  hadd bot_cooldown %key $+ .attempts 1
  return OK
}

; ---- GLOBAL COOLDOWN ----
alias check_global_cooldown {
  var %level = $1
  var %now = $ctime
  
  if (%level == ADMIN || %level == OPER) return OK
  
  var %last_global = $hget(bot_cooldown, GLOBAL)
  
  if (%last_global == $null) {
    hadd bot_cooldown GLOBAL %now
    return OK
  }
  
  var %diff = $calc(%now - %last_global)
  if (%diff < %cooldown.global) {
    var %remain = $calc(%cooldown.global - %diff)
    return $+(WAIT:, %remain)
  }
  
  hadd bot_cooldown GLOBAL %now
  return OK
}

; ---- LOG SİSTEMİ ----
alias log_search {
  var %nick = $1
  var %komut = $2
  var %arama = $3
  var %sonuc = $4
  var %now = $ctime
  
  var %log_key = log| $+ $date
  var %log_entry = $+($now, |, %nick, |, %komut, |, %arama, |, %sonuc, |, $network, |, $chan)
  
  var %existing = $hget(bot_log, %log_key)
  if (%existing == $null) {
    hadd bot_log %log_key %log_entry
  }
  else {
    hadd bot_log %log_key %existing $+ $chr(10) $+ %log_entry
  }
}

; ---- KOMUT YAKALAMA ----
on *:TEXT:!*:#:{
  ; Identify kontrolü
  if (!$is_identified($nick, $host)) {
    msg $chan 🔐 $nick $+ , lütfen önce identify olun! (/msg NickServ IDENTIFY şifre)
    halt
  }
  
  var %komut = $1
  
  if (%komut == !araba) {
    komut_araba $nick $1-
    halt
  }
  elseif (%komut == !ev) {
    komut_ev $nick $1-
    halt
  }
  elseif (%komut == !satilik) {
    komut_satilik $nick $1-
    halt
  }
  elseif (%komut == !kiralik) {
    komut_kiralik $nick $1-
    halt
  }
  elseif (%komut == !arsa) {
    komut_arsa $nick $1-
    halt
  }
  elseif (%komut == !villa) {
    komut_villa $nick $1-
    halt
  }
  elseif (%komut == !isyeri) {
    komut_isyeri $nick $1-
    halt
  }
  elseif (%komut == !durum) {
    komut_durum $nick
    halt
  }
  elseif (%komut == !cooldown) {
    komut_cooldown $nick
    halt
  }
  elseif (%komut == !yardim) {
    komut_yardim $nick
    halt
  }
  elseif (%komut == !admin) {
    komut_admin $nick $host $1-
    halt
  }
  elseif (%komut == !temizle) {
    komut_temizle $nick $host
    halt
  }
}

; ---- ARABA KOMUTU ----
alias komut_araba {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!araba\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !araba bmw 3.20 300000-500000
    return
  }
  
  var %marka = $trim($regml(1))
  var %model = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(araba, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , araba komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %marka %model * aranıyor...
  
  ; Cache kontrolü
  var %cache_key = araba| $+ %marka $+ | $+ %model $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!araba" "%marka %model" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /vasita/otomobil %marka %model %fiyat_alt %fiyat_ust $nick %cache_key araba
}

; ---- EV KOMUTU ----
alias komut_ev {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!ev\s+(satilik|kiralik)\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !ev satilik istanbul kadikoy 500000-1000000
    return
  }
  
  var %tur = $regml(1)
  var %il = $trim($regml(2))
  var %ilce = $trim($regml(3))
  var %fiyat_alt = $iif($regml(4) != $null, $regml(4), 0)
  var %fiyat_ust = $iif($regml(5) != $null, $regml(5), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(ev, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , ev komutu için %remain saniye bekleyin!
    return
  }
  
  var %kategori = $iif(%tur == satilik, /konut/satilik-daire, /konut/kiralik-daire)
  var %tur_text = $iif(%tur == satilik, SATILIK, KİRALIK)
  
  msg $chan 📡 $nick $+ , sahibinden.com'da %tur_text daire * %il %ilce * aranıyor...
  
  ; Cache kontrolü
  var %cache_key = ev| $+ %tur $+ | $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!ev" "%tur %il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara %kategori %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key ev
}

; ---- SATILIK KOMUTU ----
alias komut_satilik {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!satilik\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !satilik istanbul kadikoy 500000-1000000
    return
  }
  
  var %il = $trim($regml(1))
  var %ilce = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(satilik, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , satilik komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %il %ilce * satılık daire aranıyor...
  
  ; Cache kontrolü
  var %cache_key = satilik| $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!satilik" "%il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /konut/satilik-daire %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key satilik
}

; ---- KİRALIK KOMUTU ----
alias komut_kiralik {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!kiralik\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !kiralik istanbul besiktas 5000-15000
    return
  }
  
  var %il = $trim($regml(1))
  var %ilce = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(kiralik, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , kiralik komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %il %ilce * kiralık daire aranıyor...
  
  ; Cache kontrolü
  var %cache_key = kiralik| $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!kiralik" "%il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /konut/kiralik-daire %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key kiralik
}

; ---- ARSA KOMUTU ----
alias komut_arsa {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!arsa\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !arsa istanbul silivri 100000-500000
    return
  }
  
  var %il = $trim($regml(1))
  var %ilce = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(arsa, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , arsa komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %il %ilce * arsa aranıyor...
  
  ; Cache kontrolü
  var %cache_key = arsa| $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!arsa" "%il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /arsa %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key arsa
}

; ---- VİLLA KOMUTU ----
alias komut_villa {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!villa\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !villa istanbul sariyer 2000000-5000000
    return
  }
  
  var %il = $trim($regml(1))
  var %ilce = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(villa, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , villa komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %il %ilce * villa aranıyor...
  
  ; Cache kontrolü
  var %cache_key = villa| $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!villa" "%il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /konut/villa %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key villa
}

; ---- İŞ YERİ KOMUTU ----
alias komut_isyeri {
  var %nick = $1
  var %text = $2-
  var %level = $get_user_level(%nick, $host)
  
  if (!$regex(%text, /^!isyeri\s+([^\d]+?)\s+([^\d]+?)(?:\s+(\d+)\s*-\s*(\d+))?$/i)) {
    msg $chan ❌ Hatalı format! Örnek: !isyeri istanbul kadikoy 500000-2000000
    return
  }
  
  var %il = $trim($regml(1))
  var %ilce = $trim($regml(2))
  var %fiyat_alt = $iif($regml(3) != $null, $regml(3), 0)
  var %fiyat_ust = $iif($regml(4) != $null, $regml(4), 10000000)
  
  ; Limit kontrolü
  var %limit_result = $check_limits(%nick, %level)
  if ($left(%limit_result, 7) == BLOCKED) {
    var %dakika = $right(%limit_result, -8)
    msg $chan 🚫 $nick $+ , 2 saatlik limit doldu! %dakika dakika sonra tekrar deneyin.
    return
  }
  
  ; Global cooldown
  var %global = $check_global_cooldown(%level)
  if ($left(%global, 4) == WAIT) {
    var %remain = $right(%global, -5)
    msg $chan ⏳ Sistem yoğun, %remain saniye bekleyin!
    return
  }
  
  ; Kullanıcı cooldown
  var %cd_result = $check_cooldown(isyeri, %nick, %level)
  if ($left(%cd_result, 7) == BLOCKED) {
    var %remain = $right(%cd_result, -8)
    msg $chan 🚫 $nick $+ , çok fazla deneme! %remain saniye bloklandınız.
    return
  }
  if ($left(%cd_result, 4) == WAIT) {
    var %remain = $right(%cd_result, -5)
    msg $chan ⏳ $nick $+ , isyeri komutu için %remain saniye bekleyin!
    return
  }
  
  msg $chan 📡 $nick $+ , sahibinden.com'da * %il %ilce * iş yeri aranıyor...
  
  ; Cache kontrolü
  var %cache_key = isyeri| $+ %il $+ | $+ %ilce $+ | $+ %fiyat_alt $+ | $+ %fiyat_ust
  var %cache_data = $hget(bot_cache, %cache_key)
  var %cache_time = $hget(bot_cache, %cache_key $+ .time)
  
  if (%cache_data != $null && $calc($ctime - %cache_time) < %cache.timeout) {
    msg $chan 💾 Cache'den okunuyor...
    msg $nick %cache_data
    msg $chan ✅ $nick $+ , sonuçlar özel mesaj olarak gönderildi! (Cache)
    log_search %nick "!isyeri" "%il %ilce" "Cache"
    return
  }
  
  ; Sorgula
  sahibinden_ara /is-yeri %il %ilce %fiyat_alt %fiyat_ust $nick %cache_key isyeri
}

; ---- DURUM KOMUTU ----
alias komut_durum {
  var %nick = $1
  var %level = $get_user_level(%nick, $host)
  
  var %mesaj = 📊 $nick $+ , KULLANIM DURUMUNUZ:
  %mesaj = %mesaj $+ $chr(10) $+ ─────────────────────────
  %mesaj = %mesaj $+ $chr(10) $+ 🔰 Yetki: %level
  
  if (%level == ADMIN) {
    %mesaj = %mesaj $+ $chr(10) $+ ✅ Sınırsız kullanım!
  }
  else {
    var %max_limit = $iif(%level == OPER, %oper.limit, %user.limit)
    var %key = limits| $+ %nick
    var %log = $hget(bot_limits, %key)
    var %now = $ctime
    var %count = 0
    
    if (%log != $null) {
      var %i = 1
      while ($gettok(%log, %i, $chr(1)) != $null) {
        var %entry = $v1
        var %time = $gettok(%entry, 1, 44)
        if ($calc(%now - %time) < %limit.window) {
          var %cnt = $gettok(%entry, 2, 44)
          %count = $calc(%count + %cnt)
        }
        inc %i
      }
    }
    
    var %remaining = $calc(%max_limit - %count)
    %mesaj = %mesaj $+ $chr(10) $+ 📊 Son 2 saat: %count / %max_limit sorgu
    %mesaj = %mesaj $+ $chr(10) $+ 💫 Kalan: %remaining sorgu
    
    var %block_key = block| $+ %nick
    var %block_until = $hget(bot_limits, %block_key)
    if (%block_until != $null && %now < %block_until) {
      var %remain = $calc(($block_until - %now) / 60)
      %mesaj = %mesaj $+ $chr(10) $+ 🚫 Bloklu: %remain dakika kaldı
    }
  }
  
  ; Son 5 arama
  %mesaj = %mesaj $+ $chr(10) $+ ─────────────────────────
  %mesaj = %mesaj $+ $chr(10) $+ 📜 Son 5 aramanız:
  
  var %log_key = log| $+ $date
  var %log_data = $hget(bot_log, %log_key)
  var %found = 0
  var %i = $numtok(%log_data, 10)
  
  while (%i > 0 && %found < 5) {
    var %line = $gettok(%log_data, %i, 10)
    if ($gettok(%line, 2, 124) == %nick) {
      var %time = $asctime($gettok(%line, 1, 124), HH:NN)
      var %komut = $gettok(%line, 3, 124)
      var %arama = $gettok(%line, 4, 124)
      %mesaj = %mesaj $+ $chr(10) $+ %time $+ - $+ %komut $+ %arama
      inc %found
    }
    dec %i
  }
  
  if (%found == 0) {
    %mesaj = %mesaj $+ $chr(10) $+ ⚠️ Henüz arama yapmamışsınız.
  }
  
  msg %nick %mesaj
}

; ---- COOLDOWN KOMUTU ----
alias komut_cooldown {
  var %nick = $1
  var %level = $get_user_level(%nick, $host)
  
  var %mesaj = 📊 COOLDOWN DURUMUNUZ:
  %mesaj = %mesaj $+ $chr(10) $+ ─────────────────────────
  
  var %komutlar = araba,satilik,kiralik,arsa,villa,isyeri
  var %i = 1
  while ($gettok(%komutlar, %i, 44) != $null) {
    var %komut = $v1
    var %durum = $get_cooldown_status(%komut, %nick, %level)
    var %cd_sure = $hget(bot_cooldown, cd. $+ %komut)
    if (%cd_sure == $null) %cd_sure = 30
    
    ; Günlük limit
    var %day_key = %komut $+ | $+ %nick $+ | $+ $date
    var %today_count = $hget(bot_limits, %day_key)
    if (%today_count == $null) %today_count = 0
    var %limit = $iif(%level == ADMIN, Sınırsız, $iif(%level == OPER, %oper.limit, %user.limit))
    
    var %icon = $iif(%komut == araba, 🚗, $iif(%komut == satilik, 🏠, $iif(%komut == kiralik, 🏠, $iif(%komut == arsa, 🏡, $iif(%komut == villa, 🏰, 🏢)))))
    %mesaj = %mesaj $+ $chr(10) $+ %icon %komut $+ : %durum
    inc %i
  }
  
  %mesaj = %mesaj $+ $chr(10) $+ ─────────────────────────
  %mesaj = %mesaj $+ $chr(10) $+ ⏱️ Global cooldown: $iif($hget(bot_cooldown, GLOBAL) == $null, ✅ Hazır, ⏳ Bekle: $calc(%cooldown.global - ($ctime - $hget(bot_cooldown, GLOBAL))) sn)
  
  msg %nick %mesaj
}

; ---- COOLDOWN DURUMU AL ----
alias get_cooldown_status {
  var %komut = $1
  var %nick = $2
  var %level = $3
  var %key = %komut $+ | $+ %nick
  var %last_use = $hget(bot_cooldown, %key)
  var %block_until = $hget(bot_cooldown, %key $+ .block)
  var %now = $ctime
  
  if (%level == ADMIN) return ✅ Sınırsız
  
  if (%block_until != $null && %now < %block_until) {
    var %remain = $calc(%block_until - %now)
    return 🚫 Blok: %remain sn
  }
  
  if (%last_use == $null) return ✅ Hazır
  
  var %cd_sure = $iif(%level == OPER, $calc($hget(bot_cooldown, cd. $+ %komut) / 2), $hget(bot_cooldown, cd. $+ %komut))
  if (%cd_sure == $null) %cd_sure = $iif(%level == OPER, 15, 30)
  
  var %diff = $calc(%now - %last_use)
  if (%diff < %cd_sure) {
    var %remain = $calc(%cd_sure - %diff)
    return ⏳ Bekle: %remain sn
  }
  
  return ✅ Hazır
}

; ---- YARDIM KOMUTU ----
alias komut_yardim {
  var %nick = $1
  var %level = $get_user_level(%nick, $host)
  
  msg %nick 📖 SAHIBINDEN BOT KULLANIMI:
  msg %nick ──────────────────────────────────────
  msg %nick 🔰 Yetki Seviyeniz: %level
  
  if (%level == ADMIN) {
    msg %nick ✅ Sınırsız kullanım hakkınız var!
    msg %nick 👑 Admin komutları: !admin
  }
  elseif (%level == OPER) {
    msg %nick ✅ %oper.limit sorgu / 2 saat (Yarı cooldown)
  }
  else {
    msg %nick ✅ %user.limit sorgu / 2 saat
  }
  
  msg %nick ──────────────────────────────────────
  msg %nick 🚗 ARABA:
  msg %nick   !araba [marka] [model] [min-max]
  msg %nick   Örnek: !araba bmw 3.20 300000-500000
  msg %nick   ⏱️ Cooldown: %cd.araba sn
  msg %nick ──────────────────────────────────────
  msg %nick 🏠 SATILIK DAİRE:
  msg %nick   !satilik [il] [ilce] [min-max]
  msg %nick   !ev satilik [il] [ilce] [min-max]
  msg %nick   Örnek: !satilik istanbul kadikoy 500000-1000000
  msg %nick   ⏱️ Cooldown: %cd.satilik sn
  msg %nick ──────────────────────────────────────
  msg %nick 🏠 KİRALIK DAİRE:
  msg %nick   !kiralik [il] [ilce] [min-max]
  msg %nick   !ev kiralik [il] [ilce] [min-max]
  msg %nick   Örnek: !kiralik istanbul besiktas 5000-15000
  msg %nick   ⏱️ Cooldown: %cd.kiralik sn
  msg %nick ──────────────────────────────────────
  msg %nick 🏡 ARSA:
  msg %nick   !arsa [il] [ilce] [min-max]
  msg %nick   Örnek: !arsa istanbul silivri 100000-500000
  msg %nick   ⏱️ Cooldown: %cd.arsa sn
  msg %nick ──────────────────────────────────────
  msg %nick 🏰 VİLLA:
  msg %nick   !villa [il] [ilce] [min-max]
  msg %nick   Örnek: !villa istanbul sariyer 2000000-5000000
  msg %nick   ⏱️ Cooldown: %cd.villa sn
  msg %nick ──────────────────────────────────────
  msg %nick 🏢 İŞ YERİ:
  msg %nick   !isyeri [il] [ilce] [min-max]
  msg %nick   Örnek: !isyeri istanbul kadikoy 500000-2000000
  msg %nick   ⏱️ Cooldown: %cd.isyeri sn
  msg %nick ──────────────────────────────────────
  msg %nick 📊 DURUM:
  msg %nick   !durum - Kullanım durumunuzu gösterir
  msg %nick   !cooldown - Cooldown durumunuzu gösterir
  msg %nick ──────────────────────────────────────
  msg %nick 🔐 Identify zorunlu!
  msg %nick ⏱️ Global cooldown: %cooldown.global sn
  msg %nick 🚫 Max deneme: %cooldown.max_attempts | Blok: %cooldown.block_time sn
  msg %nick ──────────────────────────────────────
  msg %nick 📌 Bot sahibi: [SİZİN ADINIZ]
  msg %nick 📧 İletişim: [MAİL ADRESİNİZ]
  msg %nick 🌐 Web: [SİTENİZ]
}

; ---- ADMIN KOMUTLARI ----
alias komut_admin {
  var %nick = $1
  var %host = $2
  var %text = $3-
  var %level = $get_user_level(%nick, %host)
  
  if (%level != ADMIN) {
    msg %nick 🚫 Bu komut sadece adminler içindir!
    return
  }
  
  var %komut = $3
  
  if (%komut == limit) {
    var %hedef = $4
    var %key = limits| $+ %hedef
    var %log = $hget(bot_limits, %key)
    var %now = $ctime
    var %count = 0
    
    if (%log != $null) {
      var %i = 1
      while ($gettok(%log, %i, $chr(1)) != $null) {
        var %entry = $v1
        var %time = $gettok(%entry, 1, 44)
        if ($calc(%now - %time) < %limit.window) {
          var %cnt = $gettok(%entry, 2, 44)
          %count = $calc(%count + %cnt)
        }
        inc %i
      }
    }
    
    var %level_hedef = $get_user_level(%hedef, $host)
    var %max_limit = $iif(%level_hedef == ADMIN, Sınırsız, $iif(%level_hedef == OPER, %oper.limit, %user.limit))
    
    msg %nick 📊 %hedef $+ , kullanım durumu:
    msg %nick 🔰 Yetki: %level_hedef
    msg %nick 📊 Son 2 saat: %count / %max_limit
  }
  elseif (%komut == unblock) {
    var %hedef = $4
    var %block_key = block| $+ %hedef
    hdel bot_limits %block_key
    msg %nick ✅ %hedef $+ , blok kaldırıldı!
  }
  elseif (%komut == reset) {
    var %hedef = $4
    var %key = limits| $+ %hedef
    hdel bot_limits %key
    msg %nick ✅ %hedef $+ , limiti sıfırlandı!
  }
  elseif (%komut == cooldown) {
    var %komut_adi = $4
    var %new_time = $5
    if (%new_time isdigit) {
      hadd bot_cooldown cd. $+ %komut_adi %new_time
      msg %nick ✅ %komut_adi cooldown süresi %new_time saniye olarak ayarlandı!
    }
    else {
      msg %nick ❌ Örnek: !admin cooldown araba 60
    }
  }
  elseif (%komut == log) {
    var %log_key = log| $+ $date
    var %log_data = $hget(bot_log, %log_key)
    if (%log_data == $null) {
      msg %nick ⚠️ Bugün için log kaydı yok.
      return
    }
    
    var %i = $numtok(%log_data, 10)
    var %count = 0
    var %mesaj = 📋 SON ARAMALAR: $+ $chr(10)
    %mesaj = %mesaj $+ ───────────────────────── $+ $chr(10)
    
    while (%i > 0 && %count < 20) {
      var %line = $gettok(%log_data, %i, 10)
      var %time = $asctime($gettok(%line, 1, 124), HH:NN)
      var %who = $gettok(%line, 2, 124)
      var %komut_log = $gettok(%line, 3, 124)
      var %arama = $gettok(%line, 4, 124)
      
      %mesaj = %mesaj $+ %time $+ | $+ %who $+ | $+ %komut_log $+ %arama $+ $chr(10)
      dec %i
      inc %count
    }
    
    msg %nick %mesaj
  }
  else {
    msg %nick 📋 Admin: limit, unblock, reset, cooldown, log
  }
}

; ---- TEMİZLE KOMUTU ----
alias komut_temizle {
  var %nick = $1
  var %host = $2
  var %level = $get_user_level(%nick, %host)
  
  if (%level != ADMIN) {
    msg %nick 🚫 Bu komut sadece adminler içindir!
    return
  }
  
  hfree bot_cache
  hmake bot_cache 1000
  msg %nick 🧹 Cache temizlendi!
}

; ---- SAHIBINDEN ANA ARAMA (SOCKET) ----
alias sahibinden_ara {
  var %kategori = $1
  var %anahtar1 = $2
  var %anahtar2 = $3
  var %fiyat_alt = $4
  var %fiyat_ust = $5
  var %nick = $6
  var %cache_key = $7
  var %tip = $8
  
  var %sockname = sah. $+ $ticks
  
  ; Arama sorgusu
  var %arama = %anahtar1 $+ %anahtar2
  var %encoded = $urlEncode(%arama)
  
  var %query = %kategori $+ ?q= $+ %encoded
  
  if (%fiyat_alt > 0 || %fiyat_ust < 10000000) {
    if (%fiyat_alt > 0) %query = %query $+ &min_price= $+ %fiyat_alt
    if (%fiyat_ust < 10000000) %query = %query $+ &max_price= $+ %fiyat_ust
  }
  
  ; Socket aç
  if (%proxy.host != $null && %proxy.host != 127.0.0.1) {
    sockopen -e %sockname %proxy.host %proxy.port
    hadd -m %sockname proxy 1
  }
  else {
    sockopen %sockname www.sahibinden.com 443
    hadd -m %sockname proxy 0
  }
  
  ; Verileri sakla
  hadd -m %sockname kategori %kategori
  hadd -m %sockname anahtar1 %anahtar1
  hadd -m %sockname anahtar2 %anahtar2
  hadd -m %sockname nick %nick
  hadd -m %sockname fiyat_alt %fiyat_alt
  hadd -m %sockname fiyat_ust %fiyat_ust
  hadd -m %sockname path %query
  hadd -m %sockname cache_key %cache_key
  hadd -m %sockname tip %tip
  hadd -m %sockname isSSL 1
  hadd -m %sockname page 1
  hadd -m %sockname results $null
}

; ---- SOCKET AÇILINCA ----
on *:sockopen:sah.*:{
  if ($sockerr) {
    var %nick = $hget($sockname,nick)
    msg %nick ❌ Bağlantı hatası! Proxy veya site ulaşılmaz.
    msg # ⚠️ %nick $+ , bağlantı hatası oluştu.
    sockclose $sockname
    return
  }
  
  ; SSL için
  if ($hget($sockname,isSSL) == 1 && $hget($sockname,proxy) == 0) {
    sockmark $sockname ssl
  }
  
  ; HTTP isteği
  var %path = $hget($sockname,path)
  var %host = $iif($hget($sockname,proxy) == 1, www.sahibinden.com, %path)
  var %ua = $gettok(%ua.list, $rand(1, $numtok(%ua.list, |)), |)
  
  sockwrite -n $sockname GET %host HTTP/1.1
  sockwrite -n $sockname Host: www.sahibinden.com
  sockwrite -n $sockname User-Agent: %ua
  sockwrite -n $sockname Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  sockwrite -n $sockname Accept-Language: tr-TR,tr;q=0.9,en;q=0.8
  sockwrite -n $sockname Connection: close
  sockwrite -n $sockname Upgrade-Insecure-Requests: 1
  sockwrite -n $sockname $crlf
}

; ---- SOCKET VERİ OKU ----
on *:sockread:sah.*:{
  if ($sockerr) {
    sockclose $sockname
    return
  }
  
  var %data
  sockread %data
  
  if ($hget($sockname,buffer) == $null) {
    hadd -m $sockname buffer %data
  }
  else {
    var %buffer = $hget($sockname,buffer) $+ %data
    hadd -m $sockname buffer %buffer
  }
}

; ---- SOCKET KAPANINCA ----
on *:sockclose:sah.*:{
  var %buffer = $hget($sockname,buffer)
  var %kategori = $hget($sockname,kategori)
  var %anahtar1 = $hget($sockname,anahtar1)
  var %anahtar2 = $hget($sockname,anahtar2)
  var %nick = $hget($sockname,nick)
  var %fiyat_alt = $hget($sockname,fiyat_alt)
  var %fiyat_ust = $hget($sockname,fiyat_ust)
  var %cache_key = $hget($sockname,cache_key)
  var %tip = $hget($sockname,tip)
  var %page = $hget($sockname,page)
  
  if (%buffer == $null) {
    msg %nick ❌ Veri alınamadı. Sayfa boş veya engellenmiş.
    msg # ⚠️ %nick $+ , veri alınamadı.
    sockclose $sockname
    hfree $sockname
    return
  }
  
  ; Parse et
  var %results = $parse_sahibinden(%buffer, %anahtar1, %anahtar2, %tip)
  
  if (%results == $null && %page == 1) {
    msg %nick ❌ * %anahtar1 %anahtar2 * için ilan bulunamadı.
    msg # ⚠️ %nick $+ , arama sonucu boş.
    log_search %nick "!arama" "%anahtar1 %anahtar2" "Boş"
    sockclose $sockname
    hfree $sockname
    return
  }
  
  ; Önceki sonuçları birleştir
  var %onceki = $hget($sockname,results)
  if (%onceki != $null) {
    %results = %onceki $+ $chr(10) $+ %results
  }
  
  ; Max sonuç kontrolü
  var %result_count = $numtok(%results, 10)
  if (%result_count >= %max.results) {
    sonuc_gonder %results %anahtar1 %anahtar2 %nick %fiyat_alt %fiyat_ust %cache_key %tip
    sockclose $sockname
    hfree $sockname
    return
  }
  
  ; Sonraki sayfa kontrolü
  if ($regex(%buffer, /<a[^>]*href="([^"]*page=(\d+))[^"]*"[^>]*>(\d+)<\/a>/)) {
    var %next_page = $regml(2)
    if (%next_page > %page) {
      inc %page
      hadd -m $sockname page %page
      hadd -m $sockname results %results
      
      var %path = $hget($sockname,path)
      if (!$regex(%path, /page=/)) {
        %path = %path $+ &page= $+ %next_page
      }
      else {
        %path = $regsubex(%path, /page=\d+/, page= $+ %next_page)
      }
      hadd -m $sockname path %path
      
      sockopen $sockname www.sahibinden.com 443
      return
    }
  }
  
  ; Sonuçları gönder
  if (%results == $null) {
    msg %nick ❌ * %anahtar1 %anahtar2 * için ilan bulunamadı.
    msg # ⚠️ %nick $+ , arama sonucu boş.
  }
  else {
    sonuc_gonder %results %anahtar1 %anahtar2 %nick %fiyat_alt %fiyat_ust %cache_key %tip
  }
  
  sockclose $sockname
  hfree $sockname
}

; ---- SONUÇ GÖNDER ----
alias sonuc_gonder {
  var %results = $1
  var %anahtar1 = $2
  var %anahtar2 = $3
  var %nick = $4
  var %fiyat_alt = $5
  var %fiyat_ust = $6
  var %cache_key = $7
  var %tip = $8
  
  var %baslik = $iif(%tip == araba, 🚗 ARABA, 
    $iif(%tip == ev, 🏠 DAİRE,
    $iif(%tip == satilik, 🏠 SATILIK DAİRE,
    $iif(%tip == kiralik, 🏠 KİRALIK DAİRE,
    $iif(%tip == arsa, 🏡 ARSA,
    $iif(%tip == villa, 🏰 VİLLA,
    $iif(%tip == isyeri, 🏢 İŞ YERİ, 🔍 SONUÇ)))))))
  
  var %mesaj = ✅ SAHIBINDEN.COM %baslik $+ $chr(10)
  %mesaj = %mesaj $+ ───────────────────────── $+ $chr(10)
  %mesaj = %mesaj $+ 🔍 Arama: %anahtar1 %anahtar2 $+ $chr(10)
  
  if (%fiyat_alt > 0 || %fiyat_ust < 10000000) {
    %mesaj = %mesaj $+ 💰 Fiyat: %fiyat_alt - %fiyat_ust TL $+ $chr(10)
  }
  
  %mesaj = %mesaj $+ 📊 Toplam: $numtok(%results, 10) ilan bulundu. $+ $chr(10)
  %mesaj = %mesaj $+ ───────────────────────── $+ $chr(10)
  %mesaj = %mesaj $+ %results
  
  ; Cache'e kaydet
  if (%cache_key != $null) {
    hadd bot_cache %cache_key %mesaj
    hadd bot_cache %cache_key $+ .time $ctime
  }
  
  ; Log'a kaydet
  log_search %nick "!arama" "%anahtar1 %anahtar2" "Başarılı"
  
  msg %nick %mesaj
  msg # ✅ %nick $+ , arama sonuçları özel mesaj olarak gönderildi!
}

; ---- PARSE FONKSİYONU ----
alias parse_sahibinden {
  var %html = $1
  var %anahtar1 = $2
  var %anahtar2 = $3
  var %tip = $4
  var %results = $null
  var %i = 1
  
  while (%i <= 20) {
    var %title_pattern = /<a[^>]*class="[^"]*classifiedTitle[^"]*"[^>]*>([^<]*)<\/a>/gi
    var %price_pattern = /<span[^>]*class="[^"]*price[^"]*"[^>]*>([^<]*)<\/span>/gi
    var %detail_pattern = /<span[^>]*class="[^"]*detailInfo[^"]*"[^>]*>([^<]*)<\/span>/gi
    
    var %title = $regml($regex(%html, %title_pattern, 1))
    var %price = $regml($regex(%html, %price_pattern, 1))
    var %detail = $regml($regex(%html, %detail_pattern, 1))
    
    if (%title != $null && %price != $null) {
      if ($istok(%title, %anahtar1, 32) && $istok(%title, %anahtar2, 32)) {
        var %year = $regex(%detail, /\b(\d{4})\b/)
        var %km = $regex(%detail, /(\d+[\.,]\d+|\d+)\s*km/i)
        var %m2 = $regex(%detail, /(\d+[\.,]\d+|\d+)\s*m2/i)
        var %oda = $regex(%detail, /(\d+)\s*oda/i)
        
        var %ozellikler = $null
        if (%tip == araba) {
          %ozellikler = 📅 Yıl: $iif(%year != $null, %year, -) $+ , KM: $iif(%km != $null, %km, -)
        }
        elseif (%tip == ev || %tip == satilik || %tip == kiralik) {
          %ozellikler = 📐 m2: $iif(%m2 != $null, %m2, -) $+ , Oda: $iif(%oda != $null, %oda, -)
          if (%year != $null) %ozellikler = %ozellikler $+ , Yıl: %year
        }
        elseif (%tip == arsa) {
          %ozellikler = 📐 m2: $iif(%m2 != $null, %m2, -)
        }
        elseif (%tip == villa) {
          %ozellikler = 📐 m2: $iif(%m2 != $null, %m2, -) $+ , Oda: $iif(%oda != $null, %oda, -)
          if (%year != $null) %ozellikler = %ozellikler $+ , Yıl: %year
        }
        elseif (%tip == isyeri) {
          %ozellikler = 📐 m2: $iif(%m2 != $null, %m2, -)
        }
        
        var %ilan = 🏷️ %title $+ $chr(10)
        if (%ozellikler != $null) {
          %ilan = %ilan $+ %ozellikler $+ $chr(10)
        }
        %ilan = %ilan $+ 💰 Fiyat: %price TL $+ $chr(10)
        %ilan = %ilan $+ ─────────────────────────
        
        if (%results == $null) {
          %results = %ilan
        }
        else {
          %results = %results $+ $chr(10) $+ %ilan
        }
      }
    }
    inc %i
  }
  
  return %results
}

; ---- URL ENCODE ----
alias urlEncode {
  var %x = $1
  var %y
  while (%x != $null) {
    var %c = $left(%x, 1)
    if (%c isalnum || %c = - || %c = . || %c = _ || %c = ~) {
      %y = %y $+ %c
    }
    else {
      %y = %y $+ % $+ $base($asc(%c), 10, 16, 2)
    }
    %x = $mid(%x, 2)
  }
  return %y
}

; ---- IDENTIFY KONTROLÜ ----
alias is_identified {
  var %nick = $1
  var %host = $2
  
  var %level = $get_user_level(%nick, %host)
  if (%level == ADMIN) return 1
  
  if ($nick($chan, %nick) != $null) {
    var %mode = $nick($chan, %nick).mode
    if (r isin %mode || d isin %mode) {
      return 1
    }
  }
  
  .whois %nick
  return 0
}

; ---- TEMİZLİK ----
.timer 0 3600 bot_cleanup
alias bot_cleanup {
  ; Eski cache'leri temizle
  var %i = 1
  while ($hget(bot_cache, %i)) {
    var %key = $hget(bot_cache, %i).item
    var %time = $hget(bot_cache, %key $+ .time)
    if ($calc($ctime - %time) > %cache.timeout * 2) {
      hdel bot_cache %key
      hdel bot_cache %key $+ .time
    }
    inc %i
  }
  
  ; Eski cooldown'ları temizle
  %i = 1
  while ($hget(bot_cooldown, %i)) {
    var %key = $hget(bot_cooldown, %i).item
    if (%key != GLOBAL && $left(%key, 3) != cd. && $hget(bot_cooldown, %key) < $calc($ctime - 3600)) {
      hdel bot_cooldown %key
      hdel bot_cooldown %key $+ .attempts
      hdel bot_cooldown %key $+ .block
    }
    inc %i
  }
  
  ; Eski limitleri temizle
  %i = 1
  while ($hget(bot_limits, %i)) {
    var %key = $hget(bot_limits, %i).item
    if ($left(%key, 5) == limits) {
      var %log = $hget(bot_limits, %key)
      var %now = $ctime
      var %clean_log = $null
      var %j = 1
      
      while ($gettok(%log, %j, $chr(1)) != $null) {
        var %entry = $v1
        var %time = $gettok(%entry, 1, 44)
        if ($calc(%now - %time) < %limit.window) {
          if (%clean_log == $null) {
            %clean_log = %entry
          }
          else {
            %clean_log = %clean_log $+ $chr(1) $+ %entry
          }
        }
        inc %j
      }
      
      if (%clean_log == $null) {
        hdel bot_limits %key
      }
      else {
        hadd bot_limits %key %clean_log
      }
    }
    inc %i
  }
  
  ; Eski log'ları temizle (7 gün)
  %i = 1
  while ($hget(bot_log, %i)) {
    var %key = $hget(bot_log, %i).item
    if ($left(%key, 4) == log|) {
      var %date = $right(%key, -4)
      if ($calc($ctime - $ctime(%date)) > 604800) {
        hdel bot_log %key
      }
    }
    inc %i
  }
  
  echo -a 🧹 Bot temizlendi.
}

; ---- WHOIS YANITI ----
on *:WHOIS:{
  if ($1 == $me) return
  if ($hget(bot_identify, $1) != $null) {
    if ($regex($6-, /identified/i)) {
      hadd bot_identify $1 1
    }
    else {
      hadd bot_identify $1 0
    }
  }
}

; ---- KULLANICI GİRİŞİ ----
on *:JOIN:#:{
  if ($nick != $me) {
    .whois $nick
  }
}
________________

"Sevilmenin kıymeti bilinmiyorsa, Uzaklaşmak En güzeli ki üzülen sen olmayasın"
 
 


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 Kapalı
Refbacks are Kapalı





Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 01:42.