Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
eggdrop-tcl/seen/seen.tcl
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
518 lines (381 sloc)
18.7 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # +-------------------------------------------------------------------------------------+ | |
| # | | | |
| # | Seen Script v1.0.0 | | |
| # | | | |
| # +-------------------------------------------------------------------------------------+ | |
| # | | | |
| # | *** Website @ http://www.EggdropTCL.com | | |
| # | *** GitHub @ http://github.com/MadaliNTCL/eggdrop-tcl | | |
| # | | | |
| # +-------------------------------------------------------------------------------------+ | |
| # | *** IRC Support: | | |
| # | #EggdropTCL @ QuakeNET | | |
| # | #EggdropTCL @ UnderNET | | |
| # | #EggdropTCL @ EfNET | | |
| # | | | |
| # | *** Contact: | | |
| # | Yahoo Messenger/Mail: madalinmen28@yahoo.com | | |
| # | Google Mail : madalinmen28@gmail.com | | |
| # | Skype Messenger : madalinmen28 | | |
| # | | | |
| # +-------------------------------------------------------------------------------------+ | |
| # + *** Commands *** | | |
| # | +---------------+ | | |
| # | [ ADMIN - PUBLIC] | | |
| # | +---------------+ | | |
| # | | | |
| # | ++ !seen on | | |
| # | ++ !seen off | | |
| # | | | |
| # | +---------------+ | | |
| # | [ USER - PUBLIC ] | | |
| # | +---------------+ | | |
| # | | | |
| # | +++ !seen <nickname> | | |
| # | +++ !seen top | | |
| # | +++ !seen stats | | |
| # | | | |
| # +-------------------------------------------------------------------------------------+ | |
| bind PUBM - * seen:pub | |
| bind JOIN - * seen:join | |
| bind JOIN - * seen:check | |
| bind PART - * seen:part | |
| bind SIGN - * seen:sign | |
| bind KICK - * seen:kick | |
| bind SPLT - * seen:split | |
| bind NICK - * seen:nick | |
| setudef flag seen | |
| set seen-path "netbots/database/seen" | |
| if {![file exists ${seen-path}]} { | |
| putlog "\00405Instalam Seen Script.." | |
| file mkdir ${seen-path} | |
| set in [open ${seen-path}/seen.check w]; close $in | |
| set in [open ${seen-path}/seen w]; close $in | |
| } | |
| proc seen:pub {nick uhost hand chan arg} { | |
| global signore | |
| if {[lindex [split $arg] 1] eq "*!*@*"} { return } | |
| if {[lindex [split $arg] 1] eq ""} { return } | |
| if {[info exists signore($nick)]} { return } | |
| if {[string index $arg 0] in {! . `}} { | |
| set temp(cmd) [string range $arg 1 end] | |
| set temp(cmd) [lindex [split $temp(cmd)] 0] | |
| set arg [join [lrange [split $arg] 1 end]] | |
| } elseif {[isbotnick [lindex [split $arg] 0]]} { | |
| set temp(cmd) [lindex [split $arg] 1] | |
| set arg [join [lrange [split $arg] 2 end]] | |
| } else { return 0 } | |
| if {[info commands $temp(cmd):pubcmd] ne ""} { $temp(cmd):pubcmd $nick $uhost $hand $chan $arg } | |
| } | |
| proc seen:pubcmd {nick uhost hand chan arg} { | |
| global signore | |
| set floodtime 10 | |
| set value [lindex [split $arg] 0] | |
| switch -exact -- [lindex [split $arg] 0] { | |
| on { if {![matchattr $hand n]} { return }; seen on $value $chan $nick } | |
| off { if {![matchattr $hand n ]} { return }; seen off $value $chan $nick } | |
| stats { if {![matchattr $hand n ]} { return }; seen stats $value $chan $nick } | |
| top { if {![matchattr $hand n ]} { return }; seen top $value $chan $nick } | |
| reset { if {![matchattr $hand n ]} { return }; seen reset $value $chan $hand } | |
| default { seen search $value $chan $nick } | |
| } | |
| if {![matchattr $hand n]} { | |
| if {![info exists signore($nick)]} { | |
| set signore($nick) [unixtime] | |
| utimer $floodtime [list unset -nocomplain signore($nick)] | |
| } | |
| } | |
| } | |
| proc seen {cmd value chan nick} { | |
| global seen-path | |
| switch -exact -- $cmd { | |
| "on" { | |
| channel set $chan +seen | |
| putserv "PRIVMSG $chan :\002$nick\002 - \00302Set channel mode \00306+seen\00302 on \00304$chan" | |
| } | |
| "off" { | |
| channel set $chan -seen | |
| putserv "PRIVMSG $chan :\002$nick\002 - \00302Set channel mode \00306-seen\00302 on \00304$chan" | |
| } | |
| "reset" { | |
| if {![channel get $chan seen]} { return } | |
| set a [open ${seen-path}/seen w]; close $a | |
| set b [open ${seen-path}/seen.check w]; close $b | |
| putserv "NOTICE $nick :Am sters cu succes baza de date" | |
| } | |
| "top" { | |
| if {![channel get $chan seen]} { return } | |
| set temp(display) ""; set temp(say) ""; set temp(announce) "" | |
| array set times ""; | |
| set in [open "netbots/database/seen/seen.check" r] | |
| while {[gets $in line] != -1} { | |
| if {[lindex [split $line] 0] ne ""} { | |
| incr times([lindex [split $line] 0]) [lindex [split $line] 4] | |
| } | |
| } | |
| close $in | |
| foreach n [array names times] { lappend temp(display) "$n $times($n)" } | |
| set temp(say) [lsort -decreasing -index 1 $temp(display)] | |
| set place 0 | |
| foreach x $temp(say) { | |
| incr place | |
| lappend temp(announce) "\00310#$place: \00302[lindex [split $x] 0] \00304[lindex [split $x] 1]" | |
| } | |
| set top [join [lrange $temp(announce) 0 9]] | |
| putserv "PRIVMSG $chan :** \00312Top 10 \00304\002Most Wanted\002\003 ** [join $temp(announce) "\002,\002 "]" | |
| } | |
| "stats" { | |
| if {![channel get $chan seen]} { return } | |
| set temp(chans) "" | |
| set temp(users) "" | |
| set in [open "netbots/database/seen/seen" r] | |
| while {[gets $in line] != -1} { | |
| lappend temp(chans) [lindex [split $line] 1] | |
| lappend temp(users) [lindex [split $line] 2] | |
| } | |
| close $in | |
| set chans [llength [lsort -unique $temp(chans)]] | |
| set users [llength [lsort -unique $temp(users)]] | |
| putserv "PRIVMSG $chan :** Seen Statistics ** \00302Channels monitored: \00304\002$chans\002\003 -- \00302Users seen: \00304\002$users\002\003" | |
| set temp(chans) "" | |
| set temp(users) "" | |
| } | |
| "hostname" { | |
| set temp(list) "" | |
| set in [open "netbots/database/seen/seen" r] | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 1] $chan]} { | |
| set host [lindex [split $line] 3] | |
| if {[string match -nocase [lindex [split $host @] 1] [lindex [split $value @] 1]]} { | |
| set found 1 | |
| set host [string trim [lindex [split $line] 3] "*!~"] | |
| set date [clock format [lindex [split $line] 4] -format "%d.%m.%Y / %R-%p"] | |
| set output [duration [expr [unixtime] - [lindex [split $line] 4]]] | |
| set reason [lrange [split $line] 6 end] | |
| lappend temp(list) [lindex [split $line] 2] | |
| if {[lindex [split $line] 5] eq "0"} { | |
| set staymsg "I dont know how much he stayed." | |
| } else { set staymsg "after he stayed \00303[duration [lindex [split $line] 5]]\003 on $chan."} | |
| if {[lindex [split $line] 0] eq "PART"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304\00304$host\003\003) left \00302$chan\003 about \00306$output\003 (\00307$date\003) stating: \037\037$reason\037\037, $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "SIGN"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) left IRC about \00306$output\003 (\00307$date\003) stating: \037$reason\037, $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "JOIN"} { | |
| if {[onchan $value $chan]} { set nowon "$value is stil here."} else { set nowon "I dont see $value on $chan" } | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) joined $chan about \00306$output\003 (\00307$date\003). $nowon" | |
| } | |
| if {[lindex [split $line] 0] eq "SPLIT"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) left in *.net *.split about \00306$output\003 (\00307$date\003), $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "KICK"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) was kicked on $chan about \00306$output\003 (\00307$date\003) with the reason (\037$reason\037), $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "NICKCHANGE"} { | |
| if {[onchan $value $chan]} { set nowon "\00312$value\003 is stil here." } else { set nowon "I dont see $value on $chan" } | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) changed his NICK in \00304[lindex [split $line] 6]\003 about \00306$output\003 (\00307$date\003). $nowon" | |
| } | |
| } | |
| } | |
| } | |
| if {[info exists reply]} { putserv "NOTICE $nick :$reply" } | |
| if {![info exists found]} { putquick "NOTICE $nick :I dont remember $value." } | |
| close $in | |
| } | |
| "default" { | |
| if {![channel get $chan seen]} { return } | |
| if {[onchan $value $chan]} { putserv "PRIVMSG $chan :$value is already on $chan"; return} | |
| unset -nocomplain found | |
| set in [open "netbots/database/seen/seen" r] | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 1] $chan]} { | |
| if {[string match -nocase [lindex [split $line] 2] $value]} { | |
| set found 1 | |
| set host [string trim [lindex [split $line] 3] "*!~"] | |
| set date [clock format [lindex [split $line] 4] -format "%d.%m.%Y / %R-%p"] | |
| set output [duration [expr [unixtime] - [lindex [split $line] 4]]] | |
| set reason [lrange [split $line] 6 end] | |
| if {[lindex [split $line] 5] eq "0"} { | |
| set staymsg "I dont know how much he stayed." | |
| } else { set staymsg "after he stayed \00303[duration [lindex [split $line] 5]]\003 on $chan."} | |
| if {[lindex [split $line] 0] eq "PART"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304\00304$host\003\003) left \00302$chan\003 about \00306$output\003 (\00307$date\003) stating: \037\037$reason\037\037, $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "SIGN"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) left IRC about \00306$output\003 (\00307$date\003) stating: \037$reason\037, $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "JOIN"} { | |
| if {[onchan $value $chan]} { set nowon "$value is stil here."} else { set nowon "I dont see $value on $chan" } | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) joined $chan about \00306$output\003 (\00307$date\003). $nowon" | |
| } | |
| if {[lindex [split $line] 0] eq "SPLIT"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) left in *.net *.split about \00306$output\003 (\00307$date\003), $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "KICK"} { | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) was kicked on $chan about \00306$output\003 (\00307$date\003) with the reason (\037$reason\037), $staymsg" | |
| } | |
| if {[lindex [split $line] 0] eq "NICKCHANGE"} { | |
| if {[onchan $value $chan]} { set nowon "\00312$value\003 is stil here." } else { set nowon "I dont see $value on $chan" } | |
| set reply "\00312[lindex [split $line] 2]\003 (\00304$host\003) changed his NICK in \00304[lindex [split $line] 6]\003 about \00306$output\003 (\00307$date\003). $nowon" | |
| } | |
| } | |
| } | |
| } | |
| if {[info exists reply]} { putserv "NOTICE $nick :$reply" } | |
| if {![info exists found]} { seen hostname $value $chan $nick; return } | |
| close $in | |
| set a [open "netbots/database/seen/seen.check" r] | |
| set b [open "netbots/database/seen/seen.qcheck" w] | |
| unset -nocomplain checked | |
| while {[gets $a line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 1] $chan]} { | |
| if {[string match -nocase [lindex [split $line] 0] $value]} { | |
| set checked 1 | |
| set target [lindex [split $line] 0] | |
| set date [unixtime] | |
| set nick [lindex [split $line] 3] | |
| set times [lindex [split $line] 4] | |
| puts $b "$value $chan $date $nick [expr $times + 1] 0" | |
| } else { puts $b $line } | |
| } | |
| } | |
| if {![info exists checked]} { puts $b "$value $chan [unixtime] $nick 1 0" } | |
| close $a; close $b | |
| file rename -force netbots/database/seen/seen.qcheck netbots/database/seen/seen.check | |
| } | |
| } | |
| } | |
| proc seen:join {nick uhost hand chan} { | |
| if {[isbotnick $nick]} { return } | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| puts $out "JOIN $chan $nick $uhost [unixtime] 0" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "JOIN $chan $nick $uhost [unixtime] 0" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:part {nick uhost hand chan reason} { | |
| if {[isbotnick $nick]} { return } | |
| if {$reason eq ""} { set reason "No Reason"} | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| set jointime [lindex [split $line] 4] | |
| puts $out "PART $chan $nick $uhost [unixtime] [expr [unixtime] - $jointime] $reason" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "PART $chan $nick $uhost [unixtime] 0 $reason" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:sign {nick uhost hand chan reason} { | |
| if {[isbotnick $nick]} { return } | |
| if {$reason eq ""} { set reason "No Reason"} | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| set jointime [lindex [split $line] 4] | |
| puts $out "SIGN $chan $nick $uhost [unixtime] [expr [unixtime] - $jointime] $reason" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "SIGN $chan $nick $uhost [unixtime] 0 $reason" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:kick {nick uhost hand chan kicked reason} { | |
| if {[isbotnick $nick]} { return } | |
| if {$reason eq ""} { set reason "No Reason"} | |
| set kickhost [getchanhost $kicked $chan] | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| set jointime [lindex [split $line] 4] | |
| puts $out "KICK $chan $kicked $kickhost [unixtime] 0 $reason" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "KICK $chan $kicked $kickhost [unixtime] 0 $reason" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:split {nick uhost hand chan} { | |
| if {[isbotnick $nick]} { return } | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| set jointime [lindex [split $line] 4] | |
| puts $out "SPLIT $chan $nick $uhost [unixtime] [expr [unixtime] - $jointime]" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "SPLIT $chan $nick $uhost [unixtime] 0" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:nick {nick uhost hand chan newnick} { | |
| if {[isbotnick $nick]} { return } | |
| set in [open "netbots/database/seen/seen" r] | |
| set out [open "netbots/database/seen/qseen" w] | |
| unset -nocomplain found | |
| while {[gets $in line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick]} { | |
| set found 1 | |
| set jointime [lindex [split $line] 4] | |
| puts $out "NICKCHANGE $chan $nick $uhost [unixtime] 0 $newnick" | |
| } else { puts $out $line } | |
| } | |
| if {![info exists found]} { puts $out "NICKCHANGE $chan $nick $uhost [unixtime] 0 $newnick" } | |
| file rename -force netbots/database/seen/qseen netbots/database/seen/seen | |
| close $in; close $out | |
| } | |
| proc seen:check {nick uhost hand chan} { | |
| if {[isbotnick $nick]} { return } | |
| ## ++ Checking ... | |
| set a [open "netbots/database/seen/seen.check" r] | |
| set b [open "netbots/database/seen/seen.qcheck" w] | |
| while {[gets $a line] != -1} { | |
| ## ++ nickname check | |
| if {[string match -nocase [lindex [split $line] 0] $nick] && [string match -nocase [lindex [split $line] 1] $chan] && [lindex [split $line] 5] eq "0"} { | |
| set target [lindex [split $line] 0] | |
| set chan [lindex [split $line] 1] | |
| set date [clock format [lindex [split $line] 2] -format "%d.%m.%Y / %R-%p"] | |
| set nick [lindex [split $line] 3] | |
| set times [lindex [split $line] 4] | |
| set seened [lindex [split $line] 5] | |
| putserv "NOTICE [lindex [split $line] 0] :\00304$nick\003 looked for you with \00303!seen\003 on \00312$chan\003 about \00306[duration [expr [unixtime] - [lindex [split $line] 2]]]\003 ago (\00307$date\003). You have been searched so far \00304\002$times\003\002 times." | |
| puts $b "$target $chan [lindex [split $line] 2] $nick $times 1" | |
| } else { puts $b $line } | |
| } | |
| close $a; close $b | |
| file rename -force netbots/database/seen/seen.qcheck netbots/database/seen/seen.check | |
| } | |
| proc seen:parse {nick chan} { | |
| global temp | |
| set a [open "netbots/database/seen/seen" r] | |
| set temp(return) "" | |
| while {[gets $a line] != -1} { | |
| if {[string match -nocase [lindex [split $line] 2] $nick] && [string match -nocase [lindex [split $line] 1] $chan]} { | |
| set temp(return) "\00304[duration [expr [unixtime] - [lindex [split $line] 4]]]\003 (\00312[clock format [lindex [split $line] 4] -format "%d.%m.%Y / %R-%p"]\003)" | |
| } | |
| } | |
| close $a | |
| return $::temp(return) | |
| } | |
| putlog "++ \[ - \00304PUBLIC\003 - \00306loaded\003 * \00303Seen\003 \]" |