#############################
### -+- ###
# PREBOT TCL/TXT v1.0 by noname #
### - -- ---+--- -- - ###
# 0x539 [at] web [d0t] de #
#### -+- ####
################################################################################
# notes: #
# well its my first tcl script... #
# so i dont give a fuck on crapy coded parts :> #
# worx with announces as seen belwo: #
# [ PRE ] PREBOT v1 TCL TXT noname [ 0DAY ] #
# [ NUKE ] PREBOT.v1.TCL.TXT-noname reason: sumone.forgot.reason #
# [ UNNUKE ] PREBOT.v1.TCL.TXT-noname reason: sumone.forgot.reason #
################################################################################
# usage: #
# !pre RELEASE #
# !pred RELEASE #
# !search RELEASE #
# !group GROUP #
# !section SECTiON #
# !last #
# !nuke #
# !unnuke #
# !addpre RELEASE SECTiON UNXTiME #
# !addnuke RELEASE REASON SECTiON UNXTiME #
# !addunnuke RELEASE REASON SECTiON UNXTiME #
################################################################################
# config: #
# predb = file to store #
# searchresults = max results posted on !search !pre #
# chan_(pred) = chan with an existing announcebot #
# chan_(echo) = chan where u want to annonuce #
# chan_(pred_pre4ll) = prefix of new rls (e.g. [ PRE ]) #
# chan_(pred_nuk4ll) = prefix of nuked rls (e.g. [ NUKE ]) #
# chan_(pred_unn4ll) = prefix of nuked rls (e.g. [ UNNUKE ]) #
################################################################################
# support: #
# support me and i'll support u ;> #
################################################################################
# to do: #
# sql port #
# prevent redudant data #
# improve search function #
# backfill option #
# blowfish support #
# fix bugs (as ever) #
################################################################################
# greetz to: #
# #hackers -+-- irc.after-all.org #
# tumor crew -+-- w00tw00t #
# Abortion -+-- wh0re! ^.- #
# auron -+-- my favourite lhama :> #
# CaReS -+-- who cares? #
# ChIcKeN -+-- << koerner picken no time #
# doomhammer -+-- a great chum #
# maZer`- -+-- for being a gr8 coder #
# oli geissen -+-- teh best tv-show-moderator ever! ^^ #
# Shockwav3 -+-- *tsunami kekse #
# tenti -+-- repair ya workstation #
# forgotten ones... -+-- i dislike u all... so dont bitch about me :> #
################################################################################
# copyright: #
# who cares? its free! just respect my work n leave my nick in ya impoved one. #
# i would b grateful if u could send me an/your improved one ;> #
################################################################################
# du sollst nicht luegen #
# du sollst nicht toeten #
# sollst deine eltern ehrn #
# sollst nicht begehren #
# die frau vom naechsten #
# und du sollst auch nicht stehln #
################################################################################
#### - -- ----+---- -- - ####
# dedicated to the memory of my father #
### --+-- ###
##########################################
### config
set predb "./logs/predb.txt"
set pretmp "./logs/predb.tmp"
set searchresults "3"
set minchars "3"
set chan_(pred) "#nopre"
set chan_(echo) "#nopre.test"
set chan_(pred_pre4ll) "\[ 09 PRE \]"
set chan_(pred_nuk4ll) "\[ 04 NUKE \]"
set chan_(pred_unn4ll) "\[ 04 UNNUKE \]"
bind pub - !addpre echo:addpre
bind pub - !addnuke echo:addnuke
bind pub - !addunnuke echo:addunnuke
bind pub - !pre echo:checkpre
bind pub - !pred echo:checkpre
bind pub - !search echo:checkpre
bind pub - !last echo:checklast
bind pub - !group echo:checkgrp
bind pub - !section echo:checksec
bind pub - !nuke echo:checknuk
bind pub - !unnuke echo:checkunn
### style
set announce_(pre) { 01,00 [ 09#section# 01,00 ]--[ #releasename#-#releasegroup# ]--[ was pred at #pretime# ] }
set announce_(nuke) { 01,00 [ 04NUKE 01,00 ]--[ #releasename#-#releasegroup# ]--[ was nuked at #pretime# ]--[ 04#reason# 01,00 ] }
set announce_(unnuke) { 01,00 [ 09UN 04NUKE 01,00 ]--[ #releasename#-#releasegroup# ]--[ was unnuked at #pretime# ]--[ 09#reason# 01,00 ] }
### config (do not change)
set chan_(pred_pre1st) [lindex $chan_(pred_pre4ll) 0]
set chan_(pred_nuk1st) [lindex $chan_(pred_nuk4ll) 0]
set chan_(pred_unn1st) [lindex $chan_(pred_unn4ll) 0]
bind pub - $chan_(pred_pre1st) echo:check
bind pub - $chan_(pred_nuk1st) echo:check
bind pub - $chan_(pred_unn1st) echo:check
set minchar [expr ($minchars - 1)]
### check second prefix
proc echo:check { nick uhost handle chan arg } {
global predb chan_
if { $chan == $chan_(pred) && [ string match [lindex $chan_(pred_pre4ll) 1] [lindex $arg 0] ] == "1" } { echo:nopre $nick $uhost $handle $chan $arg } elseif {
$chan == $chan_(pred) && [ string match [lindex $chan_(pred_nuk4ll) 1] [lindex $arg 0] ] == "1" } { echo:nonuke $nick $uhost $handle $chan $arg } elseif {
$chan == $chan_(pred) && [ string match [lindex $chan_(pred_unn4ll) 1] [lindex $arg 0] ] == "1" } { echo:nounnuke $nick $uhost $handle $chan $arg}
}
### check (pre)
proc echo:checkpre { nick uhost handle chan arg } {
global minchar chan_
if { $chan == $chan_(echo) } {
if { $arg == "" } { echo:search $nick $uhost $handle $chan PRE LAST } elseif {
[string length $arg] > $minchar } { echo:search $nick $uhost $handle $chan $arg PRE } elseif {
[string length $arg] <= $minchar } { putserv "NOTICE $nick : 01,00 *$arg* doesnt reached teh minimum of $minchars chars "; putlog "PRESEARCH *$arg* min. chars not reached"; return 0}
}
}
### check (group)
proc echo:checkgrp { nick uhost handle chan arg } {
global minchar chan_
if { $chan == $chan_(echo) } {
if { [string length $arg] > $minchar } { echo:search $nick $uhost $handle $chan $arg GRP } elseif {
[string length $arg] <= $minchar } { putserv "NOTICE $nick : 01,00 *$arg* doesnt reached teh minimum of $minchars chars "; putlog "GRPSEARCH *$arg* min. chars not reached"; return 0}
}
}
### check (section)
proc echo:checksec { nick uhost handle chan arg } {
global minchar chan_
if { $chan == $chan_(echo) } {
if { [string length $arg] > $minchar } { echo:search $nick $uhost $handle $chan $arg SEC } elseif {
[string length $arg] <= $minchar } { putserv "NOTICE $nick : 01,00 *$arg* doesnt reached teh minimum of $minchars chars "; putlog "SECSEARCH *$arg* min. chars not reached"; return 0}
}
}
### check (last)
proc echo:checklast { nick uhost handle chan arg } {
global chan_
if { $chan == $chan_(echo) } {
echo:search $nick $uhost $handle $chan e LAST
}
}
### check (nuke)
proc echo:checknuk { nick uhost handle chan arg } {
global chan_
if { $chan == $chan_(echo) } {
echo:search $nick $uhost $handle $chan NUKE NUK
}
}
### check (unnuke)
proc echo:checkunn { nick uhost handle chan arg } {
global chan_
if { $chan == $chan_(echo) } {
echo:search $nick $uhost $handle $chan UNNUKE NUK
}
}
### search
proc echo:search { nick uhost handle chan arg wut } {
global predb pretmp chan_ searchresults
set pretemp $pretmp.[unixtime]
set count "0"
set found "0"
set rep "\*"
set search *$arg*
regsub -all { } $search $rep search
regsub -all {\.} $search $rep search
regsub -all {\_} $search $rep search
set db [open $predb r]
set tmp [open $pretemp w]
while {![eof $db]} {
gets $db data
if { $wut == "PRE" } { set searchdata [lindex $data 4]-[lindex $data 3] } elseif {
$wut == "LAST" } { set searchdata [lindex $data 0] } elseif {
$wut == "GRP" } { set searchdata [lindex $data 3] } elseif {
$wut == "SEC" } { set searchdata [lindex $data 2] } elseif {
$wut == "NUK" } { set searchdata [lindex $data 0]; set search $arg }
if {[ string match [string toupper $search] [string toupper $searchdata] ] } {
incr count
puts $tmp "$data"
}
}
close $tmp
set county $count
if {$count == 0} { putserv "NOTICE $nick : 01,00 $search was not found in db "; putlog "SEARCH $search not found" } else {
putserv "NOTICE $nick : 01,00 $count releases found... "; putlog "SEARCH $search $count releases found"
for {set x 0} {$x < $searchresults} {incr x} {
set tmp [open $pretemp r]
if {$county == 0} {return 0}
for {set y 0} {$y < $county} {incr y} {
gets $tmp data
}
close $tmp
incr county -1
echo:annorep [lindex $data 0] [lindex $data 2] [lindex $data 4] [lindex $data 3] [lindex $data 1] [lindex $data 5] $nick 0
}
}
close $db
file delete -force -- $pretemp
}
### announce (pre)
proc echo:nopre { nick uhost handle chan arg } {
global predb chan_
set prestamp [unixtime]
set rlstmp [check:string $arg]
set sec [lindex $rlstmp 1]
set rlstmp [lindex $rlstmp 0]
set rlsgrp [check:rlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep PRE $sec $nam $grp $prestamp PRE $chan_(echo) 1
}
### announce (nuke)
proc echo:nonuke { nick uhost handle chan arg } {
global predb chan_ announce_nuke
set prestamp [unixtime]
set sec ""
set reason [lindex $arg 4]
set rlstmp [lindex $arg 2]
set rlsgrp [check:addrlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep NUKE $sec $nam $grp $prestamp $reason $chan_(echo) 1
}
### announce (unnuke)
proc echo:nounnuke { nick uhost handle chan arg } {
global predb chan_ announce_unnuke
set prestamp [unixtime]
set sec "UNKNOWN"
set reason [lindex $arg 4]
set rlstmp [lindex $arg 2]
set rlsgrp [check:addrlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep UNNUKE $sec $nam $grp $prestamp $reason $chan_(echo) 1
}
### announce (addpre)
proc echo:addpre { nick uhost handle chan arg } {
global predb chan_
if { $chan == $chan_(pred) } {
set prestamp [check:stamp [lindex $arg 2]]
set rlstmp [lindex $arg 0]
if { $rlstmp == "" } { putserv "NOTICE $nick : 01,00 USAGE\: !addpre RELEASE SECTiON UNXTiME \[SECTiON and UNXTiME are optional\] "; return 0 }
set sec [lindex $arg 1]
set rlsgrp [check:addrlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep PRE $sec $nam $grp $prestamp PRE $chan_(echo)
}
}
### announce (addnuke)
proc echo:addnuke { nick uhost handle chan arg } {
global predb chan_
if { $chan == $chan_(pred) } {
set rlstmp [lindex $arg 0]
if { $rlstmp == "" } { putserv "NOTICE $nick : 01,00 USAGE\: !addnuke RELEASE REASON UNXTiME SECTiON \[RELEASE REASON UNXTiME\[now\|\\] and SECTiON are optional\] "; return 0 }
set reason [lindex $arg 1]
set prestamp [check:stamp [lindex $arg 2]]
set sec [lindex $arg 3]
set rlsgrp [check:addrlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep NUKE $sec $nam $grp $prestamp $reason $chan_(echo) 1
}
}
### announce (addunnuke)
proc echo:addunnuke { nick uhost handle chan arg } {
global predb chan_
if { $chan == $chan_(pred) } {
set rlstmp [lindex $arg 0]
if { $rlstmp == "" } { putserv "NOTICE $nick : 01,00 USAGE\: !addunnuke RELEASE REASON UNXTiME SECTiON \[RELEASE REASON UNXTiME\[now\|\\] and SECTiON are optional\] "; return 0 }
set reason [lindex $arg 1]
set prestamp [check:stamp [lindex $arg 2]]
set sec [lindex $arg 3]
set rlsgrp [check:addrlsgrp $rlstmp]
set grp [lindex $rlsgrp 1]
set nam [lindex $rlsgrp 0]
echo:annorep UNNUKE $sec $nam $grp $prestamp $reason $chan_(echo) 1
}
}
### announce (rep n sav)
proc echo:annorep { stat sec nam grp prestamp reason chan_echo save } {
global predb announce_
if { $save == "1" } {
if { $sec == "" } { set sec "UNKNOWN" }
if { $reason == "" } { set reason "UNKNOWN" }
set data [open $predb a]
puts $data "$stat $prestamp $sec $grp $nam $reason"
close $data
putlog "$stat $prestamp $sec $nam\-$grp $reason added"
}
if { $stat == "PRE" } { set announce $announce_(pre) } elseif {
$stat == "NUKE" } { set announce $announce_(nuke) } elseif {
$stat == "UNNUKE" } { set announce $announce_(unnuke) }
set pretime [unx2nps $prestamp]
regsub -- {#section#} $announce $sec announce
regsub -- {#releasename#} $announce $nam announce
regsub -- {#releasegroup#} $announce $grp announce
regsub -- {#pretime#} $announce $pretime announce
regsub -- {#reason#} $announce $reason announce
if { $save == "1" } { putserv "PRIVMSG $chan_echo :$announce" } else { putserv "NOTICE $chan_echo :$announce" }
}
### filter color bold /bla code add dots
proc check:string { nostring } {
global chan_
regsub -all -- { [0-9][0-9],[0-9][0-9]} $nostring "" nostring
regsub -all -- { [0-9][0-9],[0-9]} $nostring "" nostring
regsub -all -- { [0-9][0-9]} $nostring "" nostring
regsub -all -- { [0-9]} $nostring "" nostring
regsub -all -- { } $nostring "" nostring
regsub -all -- { } $nostring "" nostring
regsub -all -- { } $nostring "" nostring
regsub -all -- { } $nostring "" nostring
regsub -all -- { } $nostring "" nostring
regsub -all -- {PRE} $nostring "" nostring
regsub -all -- { } $nostring "\." nostring
regsub -all -- {\.\]\.} $nostring " " nostring
regsub -all -- {\.\[\.} $nostring " " nostring
regsub -all -- {\.\]} $nostring "" nostring
regsub -all -- {\.\.} $nostring "\." nostring
return $nostring
}
proc check:addrlsgrp { nostring } {
regsub -all -- {\-} $nostring " " nostring
set grp [lindex $nostring end]
regsub -all -- { } $nostring "\-" nostring
set grprep1 "\-$grp"
set grprep2 " $grp"
regsub -all -- $grprep1 $nostring $grprep2 nostring
return $nostring
}
proc check:rlsgrp { nostring } {
regsub -all -- {\.} $nostring " " nostring
set grp [lindex $nostring end]
regsub -all -- $grp $nostring "\-rep" nostring
regsub -all -- { \-} $nostring "\-" nostring
regsub -all -- {rep} $nostring $grp nostring
regsub -all -- { } $nostring "\." nostring
regsub -all -- {\-} $nostring " " nostring
return $nostring
}
proc check:stamp { timestamp } {
regsub -- {[nN][oO][wW]} $timestamp "" timestamp
if { $timestamp == "" || $timestamp == "\-" } { return [unixtime] } else { return $timestamp}
}
proc unx2nps { timestamp } {
if {[regexp "\[^\\d\]" $timestamp]} { error "unx2nps: parameter is not a valid unix timestamp" }
if {$timestamp > "2000000000"} { error "unx2nps: parameter is too large" }
return [clock format $timestamp -format "%Y/%m/%d %H:%M:%S"]
}
#bind pub - .rehash test:rehash
# proc test:rehash {nick uhost hand channel arg} {
# rehash
# putserv "PRIVMSG $channel :rehased..."
#}
putlog "PREBOT TCL/TXT v1.0 loaded (by noname)."
### EOF ### /1337? yea.. a bit.