bind pub m|- !blacklist pub:search
proc pub:search {nick uhost hand chan text} {
global settings
set file "search.db"
if {![file exists $file]} {set fds [open $file w]; puts "# $file"; close $fds;}
set where $settings(suppchan)
set aqwzsx [lindex $text 0]
set lsn [lindex $text 1]
set expire [lindex $text 2]
set starter [join [lrange $text 3 end]]
set jessicayhip [unixtime] ;#date
switch -- $aqwzsx {
-add {
set fdz [open $file r]
set conte [read $fdz]
close $fdz
set tm [convert_to_ut $expire]
if {[string match -nocase "*$lsn*" $conte]} {puthelp "privmsg $chan :This channel ($lsn) already exist in our blacklist database."; return }
set fd [open $file a+]
puts $fd "$lsn $hand $where $jessicayhip $starter $tm"
close $fd
puthelp "PRIVMSG $chan :\002SEARCH\002 Added channel $lsn to database $file by ${hand}, ${where}, on [ctime $jessicayhip] reason: $starter, will expire on: $expire"
}
-remove {
set fdz [open $file r]
set conte [read $fdz]
close $fdz
if {![string match -nocase "*$lsn*" $conte]} {puthelp "privmsg $chan :This nickname ($lsn) doesn't exist in our blacklist database."; return }
set fd [open $file r]
set reads [read $fd]
close $fd
set data ""
if {[llength $reads]} {
set fd [open $file w]
foreach line [split $reads \n] {
if {![string match -nocase *$lsn* $line]} {
if {[llength $line]} {puts $fd "$line\n"}
}
}
close $fd
puthelp "PRIVMSG $chan :\002SEARCH\002 I removed the nick $lsn from $file"
}
}
-verify {
set fd [open $file r]
set cont [read $fd]
close $fd
foreach abuse [split $cont \n] {if {[string match -nocase "*$lsn*" $abuse]} {
set a1 [lindex $abuse 0] ;#chan
set b2 [lindex $abuse 1] ;#hand
set c3 [lindex $abuse 2] ;#who
set d4 [lindex $abuse 3] ;#time
set e5 [join [lrange $abuse 4 end-1]] ;#reason
set f6 [lindex $abuse end] ;#expiration time
set f6 [clock format $f6 -format %d.%m.%Y] ;#converting to human time format
puthelp "PRIVMSG $chan :\002SEARCH\002 $a1 blacklisted by ${b2}, ${c3}, on [ctime $d4], reason: $e5, will expire on: $f6"}
return 1
}
return 0
}
-list {
set fd [open $file r]
set cont [read $fd]
close $fd
set listabuse ""
foreach abuse [split $cont \n] {lappend listabuse "[lindex $abuse 0]"}
puthelp "PRIVMSG $chan :\002SEARCH\002 I retrieved the following list from ${file}: [join $listabuse]"
}
default {puthelp "privmsg $chan :Usage: !search <-add|-remove|-verify|-list> \$chan"}
}
}
proc convert_to_ut {date} {
regexp {([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})} $date date dd mm yyyy
clock scan $mm/$dd/$yyyy
}
proc check_if_expired {} {
set currtime [unixtime]
set fd [open $file r]
set reads [read $fd]
close $fd
set data ""
if {[llength $reads]} {
set fd [open $file w]
foreach line [split $reads \n] {
set tte [lindex $line end]
if {$tte > $currtime} {
if {[llength $line]} {puts $fd "$line\n"}
}
}
close $fd
}
}