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


Eggdrop, NeoStats, BNC Sunucu botları, kurulumları ve ayalarına 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 →
1Beğeni(ler)
  • 1 Gönderen Daemon


 
 
Seçenekler Stil
Alt 16 Ağustos 2026, 02:03   #1
W r i t e r
KivanC - ait Kullanıcı Resmi (Avatar)

Standart [TCL] Pro-Master v6.3 – Gelişmiş Sosyal Medya, Profil Sistemi

[TCL] Pro-Master v6.3 – Gelişmiş Sosyal Medya & Profil Sistemi (Nick Takibi, Rozetler, Flood Koruması)

Selamlar mIRC ve Eggdrop kullanıcıları!

Kanalınızda kullanıcıların birbirini takip edebileceği, profiller oluşturabileceği, beğeni atıp rozet kazanabileceği tam kapsamlı sosyal medya tarzı TCL scripti Pro-Master v6.3 sürümüyle sizlerle. Kod tamamen modüler yapıda olup veri kaybına karşı gelişmiş veritabanı ve yedekleme sistemine sahiptir.

---

### ✨ Öne Çıkan Özellikler

* **Gelişmiş Profil & Kayıt Sistemi* 8 aşamalı interaktif kayıt sihirbazı (Yaş, şehir, burç, hobiler, renk, müzik, yemek, biyografi).
* **Nick Değişim Takibi* Kullanıcılar nick değiştirdiğinde; takipçileri, takip ettikleri, beğenileri, rozetleri ve bildirim ayarları otomatik olarak yeni nickine aktarılır (Veri kaybı olmaz).
* **Rozet Sistemi* Takipçi ve beğeni sayılarına göre otomatik rozet kazanma (🌱 Yeni Üye, ⭐ Popüler, 🔥 Ünlü, ❤️ Beğenilen, 💎 Efsane).
* **Sosyal Etkileşimler* Başka kullanıcıları takip etme (!takip), profil beğenme (!begen), durum mesajı ayarlama (!durum) ve keşfet sistemi (!kesfet).
* **Gelişmiş Bildirimler & Geçmiş* Takip, beğeni ve online bildirimlerini kişiselleştirme (!bildirim), kaçırılan son bildirimleri görüntüleme (!bildirimgecmisi).
* **Güvenlik & Flood Koruması* Komut spam'lerini önlemek için entegre flood koruması.
* **Yedekleme & Admin Paneli* Belirli aralıklarla otomatik veritabanı yedeği alma, manuel yedekleme ve yetkili admin komutları.

---

### 📌 Komut Listesi

**Profil Komutları*
* !kayit / /msg bot kayit – Profil oluşturma sihirbazını başlatır.
* !profil [nick] – Belirtilen kişinin profilini, rozetlerini ve istatistiklerini gösterir.
* !durum <mesaj> – Profilinize durum mesajı eklersiniz.
* !begen <nick> – Kullanıcının profilini beğenirsiniz.

**Sosyal Komutlar*
* !takip nick <kisi> – Kullanıcıyı takibe alırsınız.
* !takip sil <kisi> – Takipten çıkarsınız.
* !takiplerim / !takipcilerim – Liste görüntüleme.
* !kesfet – Rastgele başka bir profili incelersiniz.

**Diğer Komutlar*
* !bildirim – Bildirim ayarlarınızı açıp kapatırsınız.
* !bildirimgecmisi – Son gelen bildirimlerinizi listelersiniz.
* !istatistik – Botun genel verilerini gösterir.
* !komutlar – Tüm komut listesini özel mesaja alır.

---

### 📥 Kurulum

1. Script kodunu botunuzun dizinine (scripts/promaster.tcl gibi) kaydedin.
2. eggdrop.conf dosyanıza source scripts/promaster.tcl satırını ekleyin.
3. Botunuza .rehash atarak aktif edin.

HTML-Kodu

# ==============================================================================
# Pro-Master v6.3 - Geliştirilmiş Sürüm
# Nick takip + Flood + İstatistik + Yedek + Durum + Bildirim Geçmişi + Admin + Rozet
# ==============================================================================

namespace eval proMaster {
    variable profileData
    variable following
    variable followers
    variable likes
    variable notifySettings
    variable status
    variable badges
    variable notifyHistory
    variable dbFile "promaster_v6.db"
    variable backupDir "promaster_backups"
    variable opersChan "#opers"
    variable flood
    variable lastBackup 0

    variable reklam {
✦ \002Pro-Master v6.3\002 Sistemine Hoş Geldin!

Yeni özellikler:
• Otomatik nick değişim takibi
• Flood koruması
• Durum mesajı + Rozetler
• Bildirim geçmişi
• İstatistik ve Yedekleme
• Gelişmiş Admin paneli

\002Profil oluşturmak için:\002  !kayit
\002Komutlar için:\002           !komutlar
    }

    proc log_to_opers {message} {
        variable opersChan
        putserv "PRIVMSG $opersChan :⚙️ \002\[BOTLOG\]\002 $message"
    }

    proc loadData {} {
        variable dbFile profileData following followers likes notifySettings status badges notifyHistory
        if {![file exists $dbFile]} { return }
        set f [open $dbFile r]
        array set allData [read $f]
        close $f
        foreach key {profiles following followers likes notifySettings status badges notifyHistory} {
            if {[info exists allData($key)]} {
                array set $key $allData($key)
            }
        }
    }

    proc saveData {} {
        variable dbFile profileData following followers likes notifySettings status badges notifyHistory
        set f [open $dbFile w]
        puts $f[list \
            profiles       [array get profileData] \
            following      [array get following] \
            followers      [array get followers] \
            likes          [array get likes] \
            notifySettings [array get notifySettings] \
            status         [array get status] \
            badges         [array get badges] \
            notifyHistory  [array get notifyHistory] \
        ]
        close $f
    }

    proc is_registered {nick} {
        set hand [nick2hand $nick]
        expr {$hand ne "*" && $hand ne ""}
    }

    proc has_profile {nick} {
        variable profileData
        set nick [string tolower $nick]
        info exists profileData($nick)
    }

    proc get_notify {nick key} {
        variable notifySettings
        set nick [string tolower $nick]
        if {![info exists notifySettings($nick)]} { return 1 }
        if {[dict exists $notifySettings($nick) $key]} {
            return [dict get $notifySettings($nick) $key]
        }
        return 1
    }

    proc set_notify {nick key value} {
        variable notifySettings
        set nick [string tolower $nick]
        if {![info exists notifySettings($nick)]} {
            set notifySettings($nick) [dict create takip 1 begeni 1 online 1 reklam 1]
        }
        dict set notifySettings($nick) $key $value
        saveData
    }

    # Flood koruması
    proc check_flood {nick cmd {limit 4} {seconds 12}} {
        variable flood
        set nick [string tolower $nick]
        set now [clock seconds]
        set key "$nick:$cmd"

        if {![info exists flood($key)]} {
            set flood($key)[list $now]
            return 0
        }

        set times $flood($key)
        set times [lsearch -all -inline -glob $times *]
        set newtimes {}
        foreach t $times {
            if {$now - $t < $seconds} { lappend newtimes $t }
        }
        if {[llength $newtimes] >= $limit} {
            return 1
        }
        lappend newtimes $now
        set flood($key) $newtimes
        return 0
    }

    # Rozet kontrolü
    proc update_badges {nick} {
        variable badges followers likes
        set nick [string tolower $nick]
        set takipci 0
        set begeni 0
        if {[info exists followers($nick)]} { set takipci [llength $followers($nick)] }
        if {[info exists likes($nick)]}     { set begeni  [llength $likes($nick)] }

        set list {}
        if {$takipci >= 5}  { lappend list "⭐ Popüler" }
        if {$takipci >= 20} { lappend list "🔥 Ünlü" }
        if {$begeni >= 10}  { lappend list "❤️ Beğenilen" }
        if {$begeni >= 50}  { lappend list "💎 Efsane" }
        if {[llength $list] == 0} { set list[list "🌱 Yeni Üye"] }

        set badges($nick) $list
        saveData
    }

    # Bildirim geçmişine ekle
    proc add_notify_history {nick message} {
        variable notifyHistory
        set nick [string tolower $nick]
        if {![info exists notifyHistory($nick)]} {
            set notifyHistory($nick) {}
        }
        set notifyHistory($nick) [linsert $notifyHistory($nick) 0 $message]
        if {[llength $notifyHistory($nick)] > 15} {
            set notifyHistory($nick) [lrange $notifyHistory($nick) 0 14]
        }
        saveData
    }
}

proMaster::loadData

# Otomatik yedekleme (her 6 saatte bir)
bind time - "00 * * * *" pro_auto_backup
proc pro_auto_backup {min hour day month year} {
    variable proMaster::lastBackup
    set now [clock seconds]
    if {$now - $proMaster::lastBackup < 20000} { return }
    set proMaster::lastBackup $now
    pro_do_backup "otomatik"
}

proc pro_do_backup {{tip "manuel"}} {
    variable proMaster::dbFile proMaster::backupDir
    if {![file exists $proMaster::backupDir]} {
        file mkdir $proMaster::backupDir
    }
    set tarih [clock format [clock seconds] -format "%Y-%m-%d_%H-%M"]
    set hedef "$proMaster::backupDir/promaster_$tarih.db"
    file copy -force $proMaster::dbFile $hedef
    proMaster::log_to_opers "Yedek alındı ($tip): $hedef"
}

# ==============================================================================
# Nick Değişim Takibi
# ==============================================================================
bind nick - * pro_nick_change
proc pro_nick_change {nick uhost hand chan newnick} {
    set old [string tolower $nick]
    set new [string tolower $newnick]
    if {$old eq $new} { return }

    # Profiller
    if {[info exists proMaster::profileData($old)]} {
        set proMaster::profileData($new) $proMaster::profileData($old)
        unset proMaster::profileData($old)
    }
    # Following
    if {[info exists proMaster::following($old)]} {
        set proMaster::following($new) $proMaster::following($old)
        unset proMaster::following($old)
    }
    # Followers listelerinde eski nicki yenisiyle değiştir
    foreach n [array names proMaster::followers] {
        set idx [lsearch -exact $proMaster::followers($n) $old]
        if {$idx != -1} {
            set proMaster::followers($n) [lreplace $proMaster::followers($n) $idx $idx $new]
        }
    }
    if {[info exists proMaster::followers($old)]} {
        set proMaster::followers($new) $proMaster::followers($old)
        unset proMaster::followers($old)
    }
    # Likes
    foreach n [array names proMaster::likes] {
        set idx [lsearch -exact $proMaster::likes($n) $old]
        if {$idx != -1} {
            set proMaster::likes($n) [lreplace $proMaster::likes($n) $idx $idx $new]
        }
    }
    if {[info exists proMaster::likes($old)]} {
        set proMaster::likes($new) $proMaster::likes($old)
        unset proMaster::likes($old)
    }
    # Diğerleri
    foreach arr {notifySettings status badges notifyHistory} {
        if {[info exists proMaster::${arr}($old)]} {
            set proMaster::${arr}($new) [set proMaster::${arr}($old)]
            unset proMaster::${arr}($old)
        }
    }
    proMaster::saveData
    proMaster::log_to_opers "Nick değişimi: $old → $new"
}

# ==============================================================================
# Bildirimler
# ==============================================================================
proc pro_notify_follow {from target} {
    set target [string tolower $target]
    if {[proMaster::get_notify $target takip]} {
        set msg "🔔 $from seni takibe aldı."
        putserv "NOTICE $target :$msg"
        proMaster::add_notify_history $target $msg
    }
}

proc pro_notify_like {from target} {
    set target [string tolower $target]
    if {[proMaster::get_notify $target begeni]} {
        set msg "❤️ $from profilini beğendi."
        putserv "NOTICE $target :$msg"
        proMaster::add_notify_history $target $msg
    }
}

proc pro_notify_online {nick follower} {
    set follower [string tolower $follower]
    if {[proMaster::get_notify $follower online]} {
        set msg "🟢 Takip ettiğin $nick sunucuya girdi."
        putserv "NOTICE $follower :$msg"
        proMaster::add_notify_history $follower $msg
    }
}

# ==============================================================================
# !bildirim + !bildirimgecmisi
# ==============================================================================
bind pub - !bildirim pro_bildirim
bind msg - bildirim pro_bildirim_msg
bind pub - !bildirimgecmisi pro_bildirim_gecmis
bind msg - bildirimgecmisi pro_bildirim_gecmis_msg

proc pro_bildirim {nick uhost hand chan text} { pro_handle_bildirim $nick $chan $text }
proc pro_bildirim_msg {nick uhost hand text} { pro_handle_bildirim $nick $nick $text }

proc pro_handle_bildirim {nick dest text} {
    if {[proMaster::check_flood $nick "bildirim"]} {
        putserv "PRIVMSG $dest :⚠️ Çok hızlı komut kullanıyorsun. Biraz bekle."
        return
    }
    set nick [string tolower $nick]
    set args [split $text]
    set alt   [string tolower [lindex $args 0]]
    set durum [string tolower [lindex $args 1]]

    if {$alt eq ""} {
        putserv "PRIVMSG $dest :🔔 \002Bildirim Ayarların\002"
        putserv "PRIVMSG $dest :Takip  : [expr {[proMaster::get_notify $nick takip] ? "Açık" : "Kapalı"}]"
        putserv "PRIVMSG $dest :Beğeni : [expr {[proMaster::get_notify $nick begeni] ? "Açık" : "Kapalı"}]"
        putserv "PRIVMSG $dest :Online : [expr {[proMaster::get_notify $nick online] ? "Açık" : "Kapalı"}]"
        putserv "PRIVMSG $dest :Reklam : [expr {[proMaster::get_notify $nick reklam] ? "Açık" : "Kapalı"}]"
        putserv "PRIVMSG $dest :Değiştirmek için: !bildirim takip kapat"
        return
    }
    if {$alt eq "kapat"} {
        foreach k {takip begeni online reklam} { proMaster::set_notify $nick $k 0 }
        putserv "PRIVMSG $dest :🔕 Tüm bildirimlerin kapatıldı."
        return
    }
    if {$alt eq "ac" || $alt eq "aç"} {
        foreach k {takip begeni online reklam} { proMaster::set_notify $nick $k 1 }
        putserv "PRIVMSG $dest :🔔 Tüm bildirimlerin açıldı."
        return
    }
    if {$durum ne "ac" && $durum ne "aç" && $durum ne "kapat"} {
        putserv "PRIVMSG $dest :⚠️ Kullanım: !bildirim takip kapat"
        return
    }
    set value [expr {$durum eq "kapat" ? 0 : 1}]
    switch $alt {
        takip  { proMaster::set_notify $nick takip  $value; putserv "PRIVMSG $dest :Takip bildirimleri [expr {$value?"açıldı":"kapatıldı"}]." }
        begeni { proMaster::set_notify $nick begeni $value; putserv "PRIVMSG $dest :Beğeni bildirimleri [expr {$value?"açıldı":"kapatıldı"}]." }
        online { proMaster::set_notify $nick online $value; putserv "PRIVMSG $dest :Online bildirimleri [expr {$value?"açıldı":"kapatıldı"}]." }
        reklam { proMaster::set_notify $nick reklam $value; putserv "PRIVMSG $dest :Reklam bildirimleri [expr {$value?"açıldı":"kapatıldı"}]." }
        default { putserv "PRIVMSG $dest :⚠️ Seçenekler: takip, begeni, online, reklam" }
    }
}

proc pro_bildirim_gecmis {nick uhost hand chan text} { pro_show_history $nick $chan }
proc pro_bildirim_gecmis_msg {nick uhost hand text} { pro_show_history $nick $nick }

proc pro_show_history {nick dest} {
    set nick [string tolower $nick]
    if {![info exists proMaster::notifyHistory($nick)] || [llength $proMaster::notifyHistory($nick)] == 0} {
        putserv "PRIVMSG $dest :📭 Bildirim geçmişin boş."
        return
    }
    putserv "PRIVMSG $dest :📜 Son bildirimlerin:"
    set i 1
    foreach msg $proMaster::notifyHistory($nick) {
        putserv "PRIVMSG $dest :$i. $msg"
        incr i
        if {$i > 10} break
    }
}

# ==============================================================================
# Kayıt Sihirbazı
# ==============================================================================
array set pro_reg_step {}
array set pro_reg_data {}
array set pro_reg_timer {}

bind pub - !kayit pro_pub_kayit
bind msg - kayit  pro_msg_kayit

proc pro_pub_kayit {nick uhost hand chan text} { pro_start_register $nick $chan }
proc pro_msg_kayit  {nick uhost hand text}     { pro_start_register $nick $nick }

proc pro_start_register {nick target} {
    set nick [string tolower $nick]
    if {[proMaster::check_flood $nick "kayit" 2 30]} {
        putserv "PRIVMSG $target :⚠️ Çok hızlı deniyorsun."
        return
    }
    if {![proMaster::is_registered $nick]} {
        putserv "PRIVMSG $target :⚠️ Profil oluşturmak için nick’inin \002şifreli\002 olması zorunlu."
        return
    }
    if {[proMaster::has_profile $nick]} {
        putserv "PRIVMSG $target :⚠️ Zaten profilin var."
        return
    }
    set pro_reg_step($nick) 1
    set pro_reg_data($nick)[list]
    set pro_reg_timer($nick) [utimer 180[list pro_reg_timeout $nick]]
    putserv "PRIVMSG $target :✅ Profil oluşturma başladı (8 soru). İptal için \002iptal\002 yaz."
    putserv "PRIVMSG $target :\0021/8\002 Yaşın kaç?"
}

proc pro_reg_timeout {nick} {
    global pro_reg_step pro_reg_data pro_reg_timer
    set nick [string tolower $nick]
    if {[info exists pro_reg_step($nick)]} {
        unset -nocomplain pro_reg_step($nick) pro_reg_data($nick) pro_reg_timer($nick)
        putserv "PRIVMSG $nick :⌛ Süre doldu, kayıt iptal edildi."
    }
}

bind msgm - * pro_reg_answer
proc pro_reg_answer {nick uhost hand text} {
    global pro_reg_step pro_reg_data pro_reg_timer
    set nick [string tolower $nick]
    if {![info exists pro_reg_step($nick)]} { return 0 }

    set text  [string trim $text]
    set textl [string tolower $text]

    if {$textl eq "iptal"} {
        if {[info exists pro_reg_timer($nick)]} { killutimer $pro_reg_timer($nick) }
        unset -nocomplain pro_reg_step($nick) pro_reg_data($nick) pro_reg_timer($nick)
        putserv "PRIVMSG $nick :❌ Kayıt iptal edildi."
        return 1
    }

    if {[info exists pro_reg_timer($nick)]} { killutimer $pro_reg_timer($nick) }
    set pro_reg_timer($nick) [utimer 180[list pro_reg_timeout $nick]]
    set step $pro_reg_step($nick)

    switch $step {
        1 {
            if {![string is integer -strict $text] || $text < 10 || $text > 80} {
                putserv "PRIVMSG $nick :⚠️ 10-80 arası yaş gir."; return 1
            }
            lappend pro_reg_data($nick) yaş $text
            set pro_reg_step($nick) 2
            putserv "PRIVMSG $nick :\0022/8\002 Hangi şehirdesin?"
        }
        2 {
            if {[string length $text] < 2 || [string length $text] > 25} {
                putserv "PRIVMSG $nick :⚠️ Şehir 2-25 karakter olmalı."; return 1
            }
            lappend pro_reg_data($nick) şehir $text
            set pro_reg_step($nick) 3
            putserv "PRIVMSG $nick :\0023/8\002 Burcun nedir?"
        }
        3 {
            if {[string length $text] < 3 || [string length $text] > 15} {
                putserv "PRIVMSG $nick :⚠️ Geçerli bir burç yaz."; return 1
            }
            lappend pro_reg_data($nick) burç $text
            set pro_reg_step($nick) 4
            putserv "PRIVMSG $nick :\0024/8\002 Hobilerin neler?"
        }
        4 {
            if {[string length $text] < 3 || [string length $text] > 60} {
                putserv "PRIVMSG $nick :⚠️ 3-60 karakter arasında yaz."; return 1
            }
            lappend pro_reg_data($nick) hobiler $text
            set pro_reg_step($nick) 5
            putserv "PRIVMSG $nick :\0025/8\002 Favori rengin?"
        }
        5 {
            if {[string length $text] < 2 || [string length $text] > 20} {
                putserv "PRIVMSG $nick :⚠️ Renk adını düzgün yaz."; return 1
            }
            lappend pro_reg_data($nick) renk $text
            set pro_reg_step($nick) 6
            putserv "PRIVMSG $nick :\0026/8\002 Favori müzik türün?"
        }
        6 {
            if {[string length $text] < 2 || [string length $text] > 30} {
                putserv "PRIVMSG $nick :⚠️ 2-30 karakter yaz."; return 1
            }
            lappend pro_reg_data($nick) müzik $text
            set pro_reg_step($nick) 7
            putserv "PRIVMSG $nick :\0027/8\002 Favori yemeğin?"
        }
        7 {
            if {[string length $text] < 2 || [string length $text] > 30} {
                putserv "PRIVMSG $nick :⚠️ Yemek adını düzgün yaz."; return 1
            }
            lappend pro_reg_data($nick) yemek $text
            set pro_reg_step($nick) 8
            putserv "PRIVMSG $nick :\0028/8\002 Kendini kısaca tanıt (5-100 karakter):"
        }
        8 {
            if {[string length $text] < 5 || [string length $text] > 100} {
                putserv "PRIVMSG $nick :⚠️ 5-100 karakter arasında yaz."; return 1
            }
            lappend pro_reg_data($nick) hakkında $text
            set proMaster::profileData($nick) $pro_reg_data($nick)
            proMaster::update_badges $nick
            proMaster::saveData
            proMaster::log_to_opers "Yeni Kayıt: $nick"
            if {[info exists pro_reg_timer($nick)]} { killutimer $pro_reg_timer($nick) }
            unset -nocomplain pro_reg_step($nick) pro_reg_data($nick) pro_reg_timer($nick)
            putserv "PRIVMSG $nick :✅ \002Profilin oluşturuldu!\002"
            putserv "PRIVMSG $nick :Komutlar için \002komutlar\002 yaz."
        }
    }
    return 1
}

# ==============================================================================
# Takip + Beğeni + Profil + Durum + Rozet
# ==============================================================================
bind pub - !takip pro_pub_follow
bind pub - !begen pro_begen
bind msg - begen pro_begen_msg
bind pub - !profil pro_pub_profil
bind msg - profil pro_msg_profil
bind pub - !durum pro_durum
bind msg - durum pro_durum_msg
bind pub - !takiplerim pro_takiplerim
bind pub - !takipcilerim pro_takipcilerim
bind msg - takiplerim pro_takiplerim_msg
bind msg - takipcilerim pro_takipcilerim_msg
bind pub - !kesfet pro_kesfet
bind msg - kesfet pro_kesfet_msg
bind pub - !istatistik pro_istatistik
bind msg - istatistik pro_istatistik_msg

proc pro_pub_follow {nick uhost hand chan text} {
    if {[proMaster::check_flood $nick "takip"]} {
        putserv "PRIVMSG $chan :⚠️ Flood koruması aktif."
        return
    }
    set nick [string tolower $nick]
    set sub    [string tolower [lindex [split $text] 0]]
    set target [string tolower [lindex [split $text] 1]]

    if {$sub eq "nick"} {
        if {$target eq ""} { putserv "PRIVMSG $chan :⚠️ Kullanım: !takip nick <kullanıcı>"; return }
        if {$nick eq $target} { putserv "PRIVMSG $chan :⚠️ Kendini takip edemezsin."; return }
        if {![proMaster::has_profile $target]} { putserv "PRIVMSG $chan :⚠️ Profil yok."; return }

        if {![info exists proMaster::following($nick)] || [lsearch -exact $proMaster::following($nick) $target] == -1} {
            lappend proMaster::following($nick) $target
            lappend proMaster::followers($target) $nick
            proMaster::update_badges $target
            proMaster::saveData
            pro_notify_follow $nick $target
            proMaster::log_to_opers "Takip: $nick → $target"
            putserv "PRIVMSG $chan :🤝 $nick artık $target kullanıcısını takip ediyor."
        } else {
            putserv "PRIVMSG $chan :⚠️ Zaten takip ediyorsun."
        }
    } elseif {$sub eq "sil"} {
        if {$target eq ""} { putserv "PRIVMSG $chan :⚠️ Kullanım: !takip sil <kullanıcı>"; return }
        if {![info exists proMaster::following($nick)] || [lsearch -exact $proMaster::following($nick) $target] == -1} {
            putserv "PRIVMSG $chan :⚠️ Zaten takip etmiyorsun."; return
        }
        set idx [lsearch -exact $proMaster::following($nick) $target]
        set proMaster::following($nick) [lreplace $proMaster::following($nick) $idx $idx]
        if {[info exists proMaster::followers($target)]} {
            set idx2 [lsearch -exact $proMaster::followers($target) $nick]
            if {$idx2 != -1} { set proMaster::followers($target) [lreplace $proMaster::followers($target) $idx2 $idx2] }
            if {[llength $proMaster::followers($target)] == 0} { unset proMaster::followers($target) }
        }
        if {[llength $proMaster::following($nick)] == 0} { unset proMaster::following($nick) }
        proMaster::update_badges $target
        proMaster::saveData
        putserv "PRIVMSG $chan :👋 $target takipten çıkıldı."
    }
}

proc pro_begen {nick uhost hand chan text} { pro_like_profil $nick [lindex [split $text] 0] $chan }
proc pro_begen_msg {nick uhost hand text} { pro_like_profil $nick [lindex [split $text] 0] $nick }

proc pro_like_profil {nick target dest} {
    if {[proMaster::check_flood $nick "begen"]} {
        putserv "PRIVMSG $dest :⚠️ Flood koruması."
        return
    }
    set nick [string tolower $nick]
    set target [string tolower $target]
    if {$target eq ""} { putserv "PRIVMSG $dest :⚠️ Kullanım: !begen <nick>"; return }
    if {$nick eq $target} { putserv "PRIVMSG $dest :⚠️ Kendi profilini beğenemezsin."; return }
    if {![proMaster::has_profile $target]} { putserv "PRIVMSG $dest :⚠️ Profil yok."; return }
    if {[info exists proMaster::likes($target)] && [lsearch -exact $proMaster::likes($target) $nick] != -1} {
        putserv "PRIVMSG $dest :⚠️ Zaten beğenmişsin."; return
    }
    lappend proMaster::likes($target) $nick
    proMaster::update_badges $target
    proMaster::saveData
    pro_notify_like $nick $target
    putserv "PRIVMSG $dest :❤️ $target profilini beğendin."
}

proc pro_pub_profil {nick uhost hand chan text} {
    set target [lindex [split $text] 0]
    if {$target eq ""} { set target $nick }
    pro_show_profil $target $chan
}
proc pro_msg_profil {nick uhost hand text} {
    set target [lindex [split $text] 0]
    if {$target eq ""} { set target $nick }
    pro_show_profil $target $nick
}

proc pro_show_profil {target dest} {
    set target [string tolower $target]
    if {![proMaster::has_profile $target]} {
        putserv "PRIVMSG $dest :⚠️ $target adlı kullanıcının profili yok."
        return
    }
    set data $proMaster::profileData($target)
    set takipci 0
    set takip 0
    set begeni 0
    if {[info exists proMaster::followers($target)]} { set takipci [llength $proMaster::followers($target)] }
    if {[info exists proMaster::following($target)]} { set takip   [llength $proMaster::following($target)] }
    if {[info exists proMaster::likes($target)]}     { set begeni  [llength $proMaster::likes($target)] }

    set durum "Yok"
    if {[info exists proMaster::status($target)]} { set durum $proMaster::status($target) }

    set rozet "🌱 Yeni Üye"
    if {[info exists proMaster::badges($target)]} {
        set rozet [join $proMaster::badges($target) " | "]
    }

    putserv "PRIVMSG $dest :━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    putserv "PRIVMSG $dest :✦ \002$target\002  $rozet"
    putserv "PRIVMSG $dest :📅 Yaş: [dict get $data yaş] | 📍 [dict get $data şehir] | ♈ [dict get $data burç]"
    putserv "PRIVMSG $dest :🎨 [dict get $data renk] | 🎵 [dict get $data müzik] | 🍕 [dict get $data yemek]"
    putserv "PRIVMSG $dest :💫 [dict get $data hobiler]"
    putserv "PRIVMSG $dest :📝 [dict get $data hakkında]"
    putserv "PRIVMSG $dest :📢 Durum: $durum"
    putserv "PRIVMSG $dest :👥 $takipci takipçi | ➕ $takip takip | ❤️ $begeni beğeni"
    putserv "PRIVMSG $dest :━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}

proc pro_durum {nick uhost hand chan text} { pro_set_status $nick $chan $text }
proc pro_durum_msg {nick uhost hand text} { pro_set_status $nick $nick $text }

proc pro_set_status {nick dest text} {
    set nick [string tolower $nick]
    if {![proMaster::has_profile $nick]} {
        putserv "PRIVMSG $dest :⚠️ Önce profil oluşturmalısın."
        return
    }
    set text [string trim $text]
    if {$text eq ""} {
        if {[info exists proMaster::status($nick)]} {
            putserv "PRIVMSG $dest :Mevcut durumun: $proMaster::status($nick)"
        } else {
            putserv "PRIVMSG $dest :Durumun ayarlı değil. Kullanım: !durum <mesaj>"
        }
        return
    }
    if {[string length $text] > 60} {
        putserv "PRIVMSG $dest :⚠️ Durum en fazla 60 karakter olabilir."
        return
    }
    set proMaster::status($nick) $text
    proMaster::saveData
    putserv "PRIVMSG $dest :✅ Durumun güncellendi: $text"
}

proc pro_takiplerim {nick uhost hand chan text} { pro_list_following $nick $chan }
proc pro_takiplerim_msg {nick uhost hand text}  { pro_list_following $nick $nick }
proc pro_takipcilerim {nick uhost hand chan text} { pro_list_followers $nick $chan }
proc pro_takipcilerim_msg {nick uhost hand text}  { pro_list_followers $nick $nick }

proc pro_list_following {nick dest} {
    set nick [string tolower $nick]
    if {![info exists proMaster::following($nick)] || [llength $proMaster::following($nick)] == 0} {
        putserv "PRIVMSG $dest :Henüz kimseyi takip etmiyorsun."
        return
    }
    putserv "PRIVMSG $dest :➕ Takip ettiklerin ([llength $proMaster::following($nick)]): [join $proMaster::following($nick) ", "]"
}

proc pro_list_followers {nick dest} {
    set nick [string tolower $nick]
    if {![info exists proMaster::followers($nick)] || [llength $proMaster::followers($nick)] == 0} {
        putserv "PRIVMSG $dest :Henüz takipçin yok."
        return
    }
    putserv "PRIVMSG $dest :👥 Takipçilerin ([llength $proMaster::followers($nick)]): [join $proMaster::followers($nick) ", "]"
}

proc pro_kesfet {nick uhost hand chan text} { pro_random_profil $nick $chan }
proc pro_kesfet_msg {nick uhost hand text}  { pro_random_profil $nick $nick }

proc pro_random_profil {nick dest} {
    set nick [string tolower $nick]
    set liste [array names proMaster::profileData]
    if {[llength $liste] < 2} { putserv "PRIVMSG $dest :⚠️ Yeterli profil yok."; return }
    set liste [lsearch -all -inline -not -nocase $liste $nick]
    if {[llength $liste] == 0} { putserv "PRIVMSG $dest :⚠️ Başka profil yok."; return }
    set secilen [lindex $liste [expr {int(rand()*[llength $liste])}]]
    putserv "PRIVMSG $dest :🔍 Keşfet: \002$secilen\002"
    pro_show_profil $secilen $dest
}

proc pro_istatistik {nick uhost hand chan text} { pro_show_stats $chan }
proc pro_istatistik_msg {nick uhost hand text} { pro_show_stats $nick }

proc pro_show_stats {dest} {
    set toplam_profil [llength [array names proMaster::profileData]]
    set toplam_takip 0
    set toplam_begeni 0
    foreach n [array names proMaster::following] { incr toplam_takip [llength $proMaster::following($n)] }
    foreach n [array names proMaster::likes]     { incr toplam_begeni [llength $proMaster::likes($n)] }

    putserv "PRIVMSG $dest :📊 \002Pro-Master İstatistikleri\002"
    putserv "PRIVMSG $dest :• Toplam Profil : $toplam_profil"
    putserv "PRIVMSG $dest :• Toplam Takip  : $toplam_takip"
    putserv "PRIVMSG $dest :• Toplam Beğeni : $toplam_begeni"
}

# ==============================================================================
# Online + Reklam
# ==============================================================================
bind join - * pro_online_notification
proc pro_online_notification {nick uhost hand chan} {
    if {[isbotnick $nick]} { return }
    set nick [string tolower $nick]
    if {![info exists proMaster::followers($nick)]} { return }
    foreach follower $proMaster::followers($nick) {
        pro_notify_online $nick $follower
    }
}

bind join - * pro_join_advertise
proc pro_join_advertise {nick uhost hand chan} {
    if {[isbotnick $nick]} { return }
    set nick [string tolower $nick]
    if {![proMaster::get_notify $nick reklam]} { return }
    global pro_ad_sent
    if {[info exists pro_ad_sent($nick)]} { return }
    set pro_ad_sent($nick) 1
    utimer 3600[list unset -nocomplain pro_ad_sent($nick)]
    utimer [expr {7 + int(rand()*5)}][list pro_send_join_ad $nick]
}

proc pro_send_join_ad {nick} {
    putserv "NOTICE $nick :────────────────────────────"
    foreach line [split $proMaster::reklam \n] {
        if {[string trim $line] ne ""} { putserv "NOTICE $nick :$line" }
    }
    putserv "NOTICE $nick :────────────────────────────"
}

# ==============================================================================
# Admin Paneli
# ==============================================================================
bind pub - !admin pro_admin
bind msg - admin pro_admin_msg

proc pro_admin {nick uhost hand chan text} {
    if {![matchattr $hand n|n $chan] && ![matchattr $hand m|m $chan]} {
        putserv "PRIVMSG $chan :⚠️ Bu komut sadece adminler içindir."
        return
    }
    pro_handle_admin $nick $chan $text
}
proc pro_admin_msg {nick uhost hand text} {
    if {![matchattr $hand n] && ![matchattr $hand m]} {
        putserv "PRIVMSG $nick :⚠️ Yetkin yok."
        return
    }
    pro_handle_admin $nick $nick $text
}

proc pro_handle_admin {nick dest text} {
    set args [split $text]
    set cmd [string tolower [lindex $args 0]]
    set hedef [string tolower [lindex $args 1]]

    switch $cmd {
        yedek {
            pro_do_backup "admin"
            putserv "PRIVMSG $dest :✅ Yedek alındı."
        }
        silprofil {
            if {$hedef eq ""} { putserv "PRIVMSG $dest :Kullanım: !admin silprofil <nick>"; return }
            if {![proMaster::has_profile $hedef]} { putserv "PRIVMSG $dest :Profil yok."; return }
            unset -nocomplain proMaster::profileData($hedef)
            unset -nocomplain proMaster::following($hedef)
            unset -nocomplain proMaster::followers($hedef)
            unset -nocomplain proMaster::likes($hedef)
            unset -nocomplain proMaster::status($hedef)
            unset -nocomplain proMaster::badges($hedef)
            unset -nocomplain proMaster::notifySettings($hedef)
            unset -nocomplain proMaster::notifyHistory($hedef)
            proMaster::saveData
            proMaster::log_to_opers "Admin $nick profil sildi: $hedef"
            putserv "PRIVMSG $dest :✅ $hedef profili silindi."
        }
        istatistik {
            pro_show_stats $dest
        }
        default {
            putserv "PRIVMSG $dest :📌 Admin Komutları:"
            putserv "PRIVMSG $dest :!admin yedek"
            putserv "PRIVMSG $dest :!admin silprofil <nick>"
            putserv "PRIVMSG $dest :!admin istatistik"
        }
    }
}

# ==============================================================================
# Komutlar + Bilgi
# ==============================================================================
bind msg - komutlar pro_msg_komutlar
bind msg - bilgi    pro_msg_bilgi
bind pub - !bilgi   pro_pub_bilgi

proc pro_msg_komutlar {nick uhost hand text} {
    putserv "PRIVMSG $nick :📌 \002Pro-Master v6.3 Komutları\002"
    putserv "PRIVMSG $nick : "
    putserv "PRIVMSG $nick :\002Profil\002"
    putserv "PRIVMSG $nick :  !kayit / kayit          → Profil oluştur"
    putserv "PRIVMSG $nick :  !profil [nick]          → Profil gör"
    putserv "PRIVMSG $nick :  !durum <mesaj>          → Durum ayarla"
    putserv "PRIVMSG $nick :  !begen <nick>           → Beğen"
    putserv "PRIVMSG $nick : "
    putserv "PRIVMSG $nick :\002Sosyal\002"
    putserv "PRIVMSG $nick :  !takip nick/sil <kisi>  → Takip et / çık"
    putserv "PRIVMSG $nick :  !takiplerim / !takipcilerim"
    putserv "PRIVMSG $nick :  !kesfet                 → Rastgele profil"
    putserv "PRIVMSG $nick : "
    putserv "PRIVMSG $nick :\002Diğer\002"
    putserv "PRIVMSG $nick :  !bildirim               → Bildirim ayarları"
    putserv "PRIVMSG $nick :  !bildirimgecmisi        → Son bildirimler"
    putserv "PRIVMSG $nick :  !istatistik             → Genel istatistik"
    putserv "PRIVMSG $nick :  !admin                  → Admin paneli (yetkililer)"
}

proc pro_msg_bilgi {nick uhost hand text} {
    foreach line [split $proMaster::reklam \n] {
        if {[string trim $line] ne ""} { putserv "PRIVMSG $nick :$line" }
    }
}
proc pro_pub_bilgi {nick uhost hand chan text} {
    putserv "PRIVMSG $chan :$nick, bilgi özel mesajına gönderildi."
    pro_msg_bilgi $nick $uhost $hand $text
}

set realname "Pro-Master v6.3 | Sosyal + Rozet + Admin + Flood"
bind ctcp - VERSION pro_ctcp_version
proc pro_ctcp_version {nick uhost hand dest keyword text} {
    putserv "NOTICE $nick :\001VERSION Pro-Master v6.3 - Geliştirilmiş Sosyal Sistem\001"
}
________________

"Sevilmenin kıymeti bilinmiyorsa, Uzaklaşmak En güzeli ki üzülen sen olmayasın"
 
Alt 16 Ağustos 2026, 12:18   #2
Standart

Egg emojileri kabul etmez, ek olarak buna sql db olusturup web'e yansitsan daha tatli olur ( dusunce )

👍 1
________________

Hersey icin fazla sanalsiniz.
 
Alt 16 Ağustos 2026, 13:29   #3
W r i t e r
KivanC - ait Kullanıcı Resmi (Avatar)

Standart

Alıntı:
Daemon Nickli Üyeden Alıntı Mesajı göster
Egg emojileri kabul etmez, ek olarak buna sql db olusturup web'e yansitsan daha tatli olur ( dusunce )

Tatlisini deneriz baby ;)

________________

"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: 02:34.