# Setting some vabiales
if {![info exists pre(spam_filters)]} {set pre(spam_filters) ""}
if {![info exists pre(sections)]} {set pre(sections) ""}
if {![info exists pre(genres)]} {set pre(genres) ""}
if {![info exists pre(auto_delpre)]} {set pre(auto_delpre) ""}
if {![info exists pre(spam_stripout)]} {set pre(spam_stripout) ""}
if {![info exists pre(groups)]} {set pre(groups) ""}
if {![info exists pre(site_banned_sections)]} {set pre(site_banned_sections) ""}
proc pre:get_spam_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='spam_update'"] 0]
}
proc pre:get_genre_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='genre_update'"] 0]
}
proc pre:get_section_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='section_update'"] 0]
}
proc pre:get_spam_stripout_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='spam_stripout_update'"] 0]
}
proc pre:get_groups_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='groups_update'"] 0]
}
proc pre:get_site_banned_sections_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='site_banned_sections_update'"] 0]
}
proc pre:get_auto_delpre_update {} {
global pre
return [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='auto_delpre_update'"] 0]
}
proc pre:load_config {} {
global pre
set spam_update [pre:get_spam_update]
if {$pre(spam_update)<$spam_update} {
pre:putlog "Updating filters from the database!"
set pre(spam_filters) ""
set pre(spam_filters) [pre:query "SELECT regex,rating,type,casesensitive FROM $pre(mysql_prefix)filter WHERE enabled='1'"]
set pre(spam_update) $spam_update
}
set genre_update [pre:get_genre_update]
if {$pre(genre_update)<$genre_update} {
pre:putlog "Updating genres from the database!"
set pre(genres) ""
set pre(genres) [pre:query "SELECT regex,real_genre FROM $pre(mysql_prefix)genres"]
set pre(genre_update) $genre_update
}
set section_update [pre:get_section_update]
if {$pre(section_update)<$section_update} {
pre:putlog "Updating sections from the database!"
set pre(sections) ""
set pre(sections) [pre:query "SELECT regex,real_section FROM $pre(mysql_prefix)sections ORDER BY priority ASC"]
set pre(section_update) $section_update
}
set auto_delpre_update [pre:get_auto_delpre_update]
if {$pre(auto_delpre_update)<$auto_delpre_update} {
pre:putlog "Updating auto-delpre nuke reasons from the database!"
set pre(auto_delpre) ""
set pre(auto_delpre) [lindex [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='auto_delpre'"] 0] 0]
set pre(auto_delpre_update) $auto_delpre_update
}
set spam_stripout_update [pre:get_spam_stripout_update]
if {$pre(spam_stripout_update)<$spam_stripout_update} {
pre:putlog "Updating spam stripout words from the database!"
set pre(spam_stripout) ""
set pre(spam_stripout) [lindex [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='spam_stripout'"] 0] 0]
set pre(spam_stripout_update) $spam_stripout_update
}
set groups_update [pre:get_groups_update]
if {$pre(groups_update)<$groups_update} {
pre:putlog "Updating special groups list from the database!"
set pre(groups) ""
set pre(groups) [lindex [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='groups'"] 0] 0]
set pre(groups_update) $groups_update
}
set site_banned_sections_update [pre:get_site_banned_sections_update]
if {$pre(site_banned_sections_update)<$site_banned_sections_update} {
pre:putlog "Updating special site banned sections list from the database!"
set pre(site_banned_sections) ""
set pre(site_banned_sections) [lindex [lindex [pre:query "SELECT value FROM $pre(mysql_prefix)options WHERE name='site_banned_sections'"] 0] 0]
set pre(site_banned_sections_update) $site_banned_sections_update
}
set pre(enabled) "1"
timer 1 pre:load_config
}
proc pre:prepare_stripped {release} {
global pre
if {$pre(spam_stripout)!=""} {
regsub -all -nocase $pre(spam_stripout) $release "" release
pre:already_processed $release "addpre"
}
}
proc pre:pass_hardcoded_filters_info {files size} {
if {![string is double $size]} {return 0}
if {![string is integer $files]} {return 0}
if {[string length $size]<1} {return 0}
if {[string length $files]<1} {return 0}
if {$size==0 || $files==0} {return 0}
return 1
}
proc pre:pass_hardcoded_filters_name {release} {
set minlen 10
set maxlen 256
if {[string length $release] < $minlen} {return 0}
if {[string length $release] > $maxlen} {return 0}
if {![regexp {\.|\_|\-} $release]} {return 0}
if {![regexp {\-} $release]} {return 0}
if {[regexp {[\-\.\(\)_]$} $release]} {return 0}
if {![regexp -nocase {[a-z]} $release]} {return 0}
if {[regexp ^[clock format [clock scan today] -format %Y-%m] $release]} {return 0}
if {[regexp ^[clock format [clock scan today] -format %m%d] $release]} {return 0}
if {[regexp -all {\(} $release]!=[regexp -all {\)} $release]} {return 0}
pre:prepare_stripped $release
return 1
}
proc pre:pass_hardcoded_filters_section {section} {
set minlen 2
set maxlen 256
if {[string is digit $section]} {return 0}
if {[string length $section]<$minlen} {return 0}
if {[string length $section]>$maxlen} {return 0}
return 1
}
proc pre:pass_hardcoded_filters_reason {reason} {
set minlen 4
set maxlen 256
if {[string is digit $reason]} {return 0}
if {[string length $reason]<$minlen} {return 0}
if {[string length $reason]>$maxlen} {return 0}
return 1
}
proc pre:get_genre {genre} {
global pre
foreach genre_set $pre(genres) {
if {[regexp -nocase [lindex $genre_set 0] $genre]} {
return [lindex $genre_set 1]
}
}
putlog "Warning: $genre is an UNKNOWN genre for me!"
return ""
}
proc pre:get_section {section} {
global pre
foreach section_set $pre(sections) {
if {[regexp -nocase [lindex $section_set 0] $section]} {
return [lindex $section_set 1]
}
}
putlog "Warning: $section has an UNKNOWN section for me!"
return "UNKNOWN"
}
proc pre:spam_filter {line type} {
global pre
set result "0.0"
if {$type=="0" && ![pre:pass_hardcoded_filters_name $line]} {return [expr $pre(spam_release) + 1]}
if {$type=="1" && ![pre:pass_hardcoded_filters_reason $line]} {return [expr $pre(spam_reason) + 1]}
if {$type=="3" && ![pre:pass_hardcoded_filters_section $line]} {return [expr $pre(spam_section) + 1]}
foreach filter $pre(spam_filters) {
if {[lindex $filter 2]==$type} {
set mode [lindex $filter 3]
set pattern [lindex $filter 0]
set n 0
if {$mode=="0"} {
set n [regexp -all -nocase $pattern $line]
} else {
set n [regexp -all $pattern $line]
}
set result [expr $result + $n*[lindex $filter 1]]
}
}
return $result
}