package require mysqltcl
bind pub -|- !pre usePre
bind pub -|- !dbstats dbstat
#bind pub -|- !addpre addIt
#bind pub -|- !info infoCalled
#bind pub -|- !sitepre siteCalled
#bind pub -|- !nuke newNuke
#bind pub -|- !unnuke newUnNuke
#bind pub -|- !gn newGN
#bind pub -|- !delpre preRm
#bind bot -|- !addpre botPre
#bind bot -|- !nuke botNuke
#bind bot -|- !info botInfo
#bind bot -|- !unnuke botUnNuke
#bind bot -|- !delpre botDEL
bind pubm -|- "*" catchNew
set gtable "activedata"
proc botDEL { from command text } {
if {[string equal [string tolower $from] "efnet"] ==1} {
#putserv "PRIVMSG #sun :$command $text"
} else {
#putserv "PRIVMSG #cxHQ :$command $text"
#putserv "PRIVMSG #sun :$command $text \002$from"
}
}
proc newUnNuke { nick uhost hand chan text } {
#putserv "PRIVMSG $chan :!unnuke $text"
#putserv "PRIVMSG #confusion :!unnuke $text"
#putallbots "!unnuke $text"
useUnNuke [lindex $text 0] [lindex $text 1] $nick
}
proc newNuke { nick uhost hand chan text } {
#putserv "PRIVMSG $chan :!nuke $text"
#putserv "PRIVMSG #confusion :!nuke $text"
#putallbots "!nuke $text"
useNuke [lindex $text 0] [lindex $text 1] $nick
}
proc newGN { nick uhost hand chan text } {
useGC [lindex $text 0] [lindex $text 1]
}
#the most import catch of them all.
#
proc botPre {from command text} {
#putserv "PRIVMSG #cxHQ :$command $text"
putserv "PRIVMSG alexis :\002$from\002 $command $text"
if {[string equal [string tolower $from] "irc.atx-team.com"] ==1} {
putserv "PRIVMSG #psr :$command $text"
} else {
putserv "PRIVMSG #cxHQ :$command $text"
putserv "PRIVMSG #psr :$command $text \002$from"
}
}
proc botUnNuke {from command text} {
if {[string equal [string tolower $from] "efnet"] ==1} {
#putserv "PRIVMSG #psr :$command $text"
} else {
putserv "PRIVMSG #cxHQ :$command $text"
putserv "PRIVMSG #psr :$command $text \002$from"
}
#putserv "PRIVMSG #cxHQ :$command $text"
#putserv "PRIVMSG #sun :$command $text"
}
proc botNuke {from comand text} {
if {[string equal [string tolower $from] "efnet"] ==1} {
#putserv "PRIVMSG #sun :$comand $text"
} else {
putserv "PRIVMSG #cxHQ :$command $text"
putserv "PRIVMSG #sun :$command $text \002$from"
}
#putserv "PRIVMSG #cxHQ :$comand $text"
#putserv "PRIVMSG #sun :$comand $text"
}
proc botInfo {from comand text} {
#putserv "PRIVMSG blackcat :\002$from\002 $comand $text"
if {[string equal [string tolower $from] "efnet"] == 1} {
#putserv "PRIVMSG #sun :$comand $text"
} else {
putserv "PRIVMSG #cxHQ :$comand $text"
putserv "PRIVMSG #sun :$comand $text \002$from"
}
}
proc preRm {nick uhost hand chan text} {
useDel [lindex $text 0] [lindex $text 1] $nick
}
#
#This is for site pres
#
proc siteCalled {nick uhost hand chan text} {
#addToDb [lindex $text 1] [lindex $text 0] [lindex $text 2] [lindex $text 3] $nick
#infoInsert [lindex $text 0] [lindex $text 2] [lindex $text 3]
}
proc addIt { nick uhost hand chan text} {
if {[string equal $chan "#alexispre4"] == 1} {
putserv "PRIVMSG #alexispre4 :\0034HELL\003 No BiTCH"
return 0
}
if {[string equal $chan "#alexispre3"] == 1} {
putserv "PRIVMSG #alexispre3 :\0034Hell fucking no\003"
return 0
}
if {[string equal $chan "#alexispre5"] == 1} {
putserv "PRIVMSG #alexispre5 :\0034HELL FUCKING NO"
return 0
}
if {[string equal $chan "#alexispre2"] == 1} {
putserv "PRIVNSG #alexispre2 :\0034 hell fucking no"
return 0
}
addToDb [lindex $text 1] [lindex $text 0] $nick
}
proc infoCalled {nick uhost hand chan text} {
infoInsert [lindex $text 0] [lindex $text 1] [lindex $text 2] $nick
}
proc useDel {rls why nick} {
global gtable
set db [getInstance]
set output [mysqlsel $db "SELECT * FROM $gtable WHERE rls = '$rls' LIMIT 1;" -list]
if {[string equal "" $output] == 1} {
putserv "PRIVMSG #psr :rls not found"
mysqlclose $db
return 0
}
if {[catch { mysqlexec $db "delete from $gtable where rls='$rls';"} data ]} {
putserv "PRIVMSG #psr :\002$rls\002 wants to be removed \0034$why\0034 , but $data"
}
if {[onchan $nick "#psr"]} {
putserv "PRIVMSG #psr :!delpre $rls $why"
} else {
putserv "PRIVMSG #psr :!delpre $rls $why"
}
putallbots "!delpre $rls $why"
putserv "PRIVMSG #psr :\002JUST REMOVED \0034$rls $why"
}
#
# This will set the size and files.
#
proc infoInsert {rlsname files size nick} {
global spamchan
global gtable
set db [getInstance]
#not about to add something we already have in the database.
if {[string equal $files "0"] == 1 && [string equal $size "0"] ==1 } {
return 0
}
if {[string equal $files ""] == 1 && [string equal $size ""] == 1} {
return 0
}
set match [findMatch $rlsname]
set output [mysqlsel $db "SELECT files,size FROM $gtable WHERE rls = '$rlsname' LIMIT 1;" -list]
set output [lindex $output 0]
if { [string equal "0" [lindex $output 0]] == 0 || [string equal "0" [lindex $output 1]] == 0} {
mysqlclose $db
return 0
}
set type [lindex $match 1]
if {[string equal [string index $match end-1] ")"] == 1} {
#putserv "PRIVMSG #psr :Already have a file size for [string index $match end-1] other $match"
mysqlclose $db
return 0
}
#putserv "PRIVMSG #psr :This is Info $rlsname $size $files"
if { [catch {mysqlexec $db "UPDATE $gtable set files='$files',size='$size' where rls='$rlsname';"} data] } {
putserv "PRIVMSG #psr :Tryed to update files for $rlsname but failed $data"
addToDb $rlsname "UNKNOWN" "INFO"
mysqlclose $db
infoInsert $rlsname $files $size
return 0
}
mysqlclose $db
#if {[onchan $nick "#psr"]} {
#putserv "PRIVMSG #psr :!info $rlsname $files $size"
#} else {
putserv "PRIVMSG #psr :!info $rlsname $files $size"
#}
putallbots "!info $rlsname $files $size"
}
proc useNuke {rls why nick} {
global gtable
set db [getInstance]
set output [mysqlsel $db "SELECT nuke FROM $gtable WHERE rls = '$rls' LIMIT 1;" -list]
if {[string equal "" $output] == 1 || [string equal "1" [lindex $output 0]] == 1} {
if {[onchan $nick "#sun"]} {
#putserv "PRIVMSG #psr :\0034 $rls was already nuked"
}
mysqlclose $db
return 0
}
if { [catch {mysqlexec $db "UPDATE $gtable set why='$why' where rls='$rls';"} data] } {
putserv "PRIVMSG #psr :was unable to update $data"
}
if {[catch {mysqlexec $db "UPDATE $gtable set nuke='1' where rls ='$rls';"} dataO] } {
putserv "PRIVMSG #psr :was unable to nuke $data0"
}
if {[onchan $nick "#psr"]} {
putserv "PRIVMSG #psr :!nuke $rls $why"
} else {
putserv "PRIVMSG #psr :!nuke $rls $why"
}
putallbots "!newnuke $rls $why"
mysqlclose $db
return 0
}
proc useUnNuke {rls why nick} {
global gtable
set db [getInstance]
set output [mysqlsel $db "SELECT nuke FROM $gtable WHERE rls = '$rls' LIMIT 1;" -list]
if {[string equal "" $output] == 1 || [string equal "0" [lindex $output 0]] == 1} {
if {[onchan $nick "#blackcatism"]} {
#putserv "PRIVMSG #psr :\0034$rls was never nuked"
}
mysqlclose $db
return 0
}
#set db [getInstance]
if { [catch {mysqlexec $db "UPDATE $gtable set why='$why' where rls='$rls';"} data] } {
putserv "PRIVMSG #psr :was unable to update $data"
}
if {[catch {mysqlexec $db "UPDATE $gtable set nuke='0' where rls ='$rls';"} dataO] } {
putserv "PRIVMSG #psr :was unable to nuke $data0"
}
if {[onchan $nick "#psr"]} {
putserv "PRIVMSG #psr :!unnuke $rls $why"
} else {
putserv "PRIVMSG #psr :!unnuke $rls $why"
}
putallbots "!unnuke $rls $why"
}
proc useGC {rls new} {
global gtable
set db [getInstance]
if { [catch {mysqlexec $db "UPDATE $gtable set mtype='$new' where rls='$rls';"} data] } {
putserv "PRIVMSG #psr :Was unable to update $rls $new"
}
mysqlclose $db
return 0
}
#
#This is for removing something from something section :)
#
# removes rls and adds to the nuke
#
proc delNuke {rls section} {
set db [getInstance]
set output [mysqlsel $db "SELECT * FROM $gtable WHERE rls = '$rls' LIMIT 1;" -list]
if {[string equal "" $output] == 1} {
mysqlclose $db
return 0
}
#Says it valid, and that were just removed it from the other section.
if { [string equal [findMatch $rls] ""] ==0 } {
mysqlexec $db "delete from $section where rls='$rls';"
}
#Adds rls to the nuke section.
addToDb "NUKE" $rls "0" "0"
mysqlclose $db
}
#
#Used to return the stats of the data base.
#
proc dbstat {nick uhost hand chan text } {
putserv "PRIVMSG $chan :\002 \0030building\002\0037.....\002"
set db [getInstance]
set i 0
set p 0
foreach type [mysqlinfo $db tables] {
foreach number [mysqlsel $db "SELECT FOUND_ROWS() from $type;" -list] {
incr i
incr p
}
#putserv "PRIVMSG $chan :\002\(\002$type\002\)\002 has\00310 $i\002 entrys"
set i 0
}
putserv "PRIVMSG $chan :\002\[\002\ \0037database\002\ \0030]\002\0030 $p releases"
mysqlclose $db
}
#for used in other
#
#
proc usePre {nick uhost hand chan text} {
set key [lindex $text 0]
#Full Rls to the channel.
if { [string match "*.*" $key] ==1 && [string match "*-*" $key] == 1 || [string match "*_*" $key] ==1 && [string match "*-*" $key] == 1 } {
set nick $chan
}
set dataOut [findMatch $key]
if {[string equal $dataOut ""] == 1 } {
putserv "PRIVMSG $chan :no encontre nada de $key cono"
return 0
}
#putserv "PRIVMSG #blackcatism :$dataOut"
foreach line [split $dataOut "\n"] {
putserv "PRIVMSG $nick :$line"
}
}
#THis will return any matchs with a current rls.
proc findMatch {keyed} {
global gtable
set db [getInstance]
set count 0
set output ""
set data [mysqlsel $db "select *,SEC_TO_TIME(unix_timestamp(now()) - unix_timestamp(pretime)) as data from $gtable WHERE rls like '%$keyed%' GROUP BY data;" -list]
mysqlclose $db
if {[string equal $data ""] == 1} {
#putserv "PRIVMSG #blackcatism :not found"
return ""
}
foreach rls $data {
set realrls [lindex $rls 0]
set files [lindex $rls 2]
set size [lindex $rls 3]
set type [lindex $rls 4]
set mtype [string toupper [lindex $rls 5]]
set nuked [lindex $rls 6]
set reason [lindex $rls 7]
set now [lindex $rls 9]
if {$count < 25} {
#putserv "PRIVMSG #blackcatism :DATA\002 ->$rls"
if {[string equal "0" $mtype] == 0} {
append output "\002\(\002\00311 $mtype \003\002\)\002"
}
if {[string equal "0" $size] == 1 && [string equal "0" $files] == 1} {
#putserv "PRIVMSG herbs :just added one with no size $rls"
append output "\002\(\002\00311 $type\003 \002\)\002 $realrls [fixTime $now]"
} elseif {[string equal "1" $nuked] == 1} {
append output "\002\(\002 \00311NUKED\003 \002\)\002 $realrls [fixTime $now] \(\002$reason\002\)"
} else {
#putserv "PRIVMSG herbs :just added one with zero size $rls"
append output "\002\(\002\00311 $type\003 \002\)\002 $realrls [fixTime $now] \(\002$files files $size mb\002\)"
}
incr count
append output "\n"
} else {
break
}
}
return $output
}
#
#This method will get a time 10:01:01 and fix it so people can understand it.
#
proc fixTime {daTime} {
set temp [split $daTime ":"]
if {[lindex $temp 0] == 0} {
append line " \00310[lindex $temp 1]\003" " \002Mins\002" " \00310[lindex $temp 2]\003" " \002Seconds\002"
} else {
#putserv "PRIVMSG #blackcatism :Called Secound when we have [lindex $temp 0]"
append line "\00310[lindex $temp 0]\003" " \002H\002" " \00310[lindex $temp 1]\003" " \002M\002" " \00310[lindex $temp 2]\003" " \002S\002"
}
return $line
}
proc searchQuick { keyed } {
global gtable
set db [getInstance]
set count 0
set output ""
if { [catch {set data [mysqlsel $db "select rls,pretime,section,nuke,files,size,SEC_TO_TIME(unix_timestamp(now()) - unix_timestamp(pretime)) as data from $gtable WHERE rls like '%$keyed%';" -list]} data] } {
putserv "PRIVMSG #psr :\002FAILED\002 to search $section $keyed -< $data"
mysqlclose $db
return 0
}
if {[string compare $data ""] != 0} {
foreach element $data {
if { (10 > $count) } {
putserv "PRIVMSG #psr :quick search data -< $data"
#putserv "PRIVMSG #moon :\(\0039 \003\) \( [lindex $element 0] \) [fixTime [lindex $element 2]]"
append output "\(\0039 \003\) \( [lindex $element 0] \) [fixTime [lindex $element 4]] "
if {[string equal "-" [lindex $element 3]] == 0} {
append output "\( \002[lindex $element 2]\002files "
#putserv "PRIVMSG #moon :files -< [lindex $element 2]"
}
if {[string equal "-" [lindex $element 3]] == 0} {
append output "\002[lindex $element 3]\002mb \)"
#putserv "PRIVMSG #moon :size -< [lindex $element 3]"
}
append output "\n"
incr count
}
}
}
mysqlclose $db
return $output
}
proc catchNew { nick uhost hand chan text } {
#putserv "PRIVMSG #psr :FOUND A NEW $text"
#putserv "PRIVMSG #psr :$text < NEW FOUND > [split $text "\["]"
set text [fixColor $text]
#putserv "PRIVMSG #moon :[lindex $text 1]"
if {[string match "*NEW*" [lindex $text 1]] == 0} {
return 0;
}
putserv "PRIVMSG #psr :$text"
#set splited [split $text "\"]
#set matched [findMatch [string range $splited [lindex $splited 2] [lindex $splited ]]]
set type [string trim [lindex $text 5]]
set name [string trim [lindex $text 8]]
set theRls ""
#putserv "PRIVMSG #psr : $type $name"
if {[string equal $type "REQUESTS"] == 1} {
set theRls [findMatch $name]
putserv "PRIVMSG $chan :\002Allowed\002 $theRls"
return 0
} else {
set theRls [findMatch $name]
#if {[string equal $theRls ""] == 1} {
#set theRls [findMatch $name]
#}
}
if {[string equal $theRls ""] == 0} {
#putserv "PRIVMSG #psr :Age of Rls _,-.> [lindex $theRls 6] "
#set theRls [fixColor $theRls]
if {[string match "H*" $theRls] == 1 && [string compare [fixColor [lindex $theRls 6]] "01"] >= 0} {
putserv "PRIVMSG $chan :\002BackFill\002 $theRls"
} else {
putserv "PRIVMSG $chan :\002Allowed\002 $theRls"
}
} else {
#JUST FOUND A NEW PRE YA
#putserv "PRIVMSG $chan :$type $nick $name"
putserv "PRIVMSG alexis :\002NEW\002 $type $name"
addToDb $type $name $nick
}
}
#
#This will change the type of the data. to make sure that we don't have any errors.
#
proc fixName {type} {
if { [string match "* *" $type] == 1} {
putserv "PRIVMSG #psr :$type has found a blank"
regsub -all { } [string range $type 0 [lindex [split $type] end-1]] {.} type
putserv "PRIVMSG #psr :New type $type"
}
}
#
#This will fix the type to be a real type.
#
proc fixType {name} {
if {[string equal $name "-"] ==1 || [string equal "PRE" $name] == 1} {
return "UNKNOWN"
}
return [lindex [split [string toupper $name] "-"] 0]
}
#
#THIs method will RegSub the color codes
#
proc fixColor {textIn} {
return [stripcodes bc $textIn]
}
#
# This method will add the info to the db
# and display it to some other channel
#
proc addToDb {type name nick} {
global gtable
putserv "PRIVMSG #psr :\002 CALLED \002 $type $name"
if {[string equal $type ""] == 1 || [string equal $name ""] == 1} {
putserv "PRIVMSG #psr :Tryed to add Blank Data"
return -1;
}
#putserv "PRIVMSG #psr :called with $type $name $files $size"
#putserv "PRIVMSG #psr :$name"
#Full Rls to the channel.
if {![string match *.*-* $name] && ![string match *_*-* $name]} {
putserv "PRIVMSG #psr :\002SORRY BUT THIS COULD NOT BE ADDED DUE TO SPOOF $type $name"
return 0
} elseif { [string match "*dupe*" $name] ==1 } {
putserv "PRIVMSG #psr :\002SORRY BUT THIS COULD NOT BE ADDED DUE TO SPOOF $type $name"
return 0
} elseif { [string length $name] < 13 } {
putserv "PRIVMSG #psr :\002SORRY BUT THIS COULD BE A SPOOF $name"
return 0
} elseif { [string match "*trash*" $name] == 1 } {
putserv "PRIVMSG #psr :\002SORRY BUT THIS COULD BE A SPOOF $name"
return 0
} elseif { [string match "*testpre*" [string tolower $name]] == 1 } {
putserv "PRIVMSG #psr :\002 SPOOF $name"
return 0
} elseif { [string last $name "-"] < [string last $name "."] || [string last $name "-"] < [string last $name "_"] } {
putserv "PRIVMSG #psr :\002 SPOOF $name"
return 0
}
#putserv "PRIVMSG #psr :No SPOOF"
#checkAdd $type
set type [fixType $type]
#checkAdd $type
putserv "PRIVMSG $chan :Just added a \002$type\002 named \002$name\002 with the rls time \002$date\002 to the DataBase"
#To be added later, l8s for n0w
set group ""
set db [getInstance]
#This is going to check the mysql database for rls that are already added by it. NAME ONLY.
set output [mysqlsel $db "SELECT * FROM $gtable WHERE rls = '$name' LIMIT 1;" -list]
if { [string equal $output ""] != 1} {
#putserv "PRIVMSG #psr :DUPE in the database., but not able to select from $output"
mysqlclose $db
return 0
}
#Says if we don't have a vaild table then lets make one.
if { [catch {mysqlexec $db "INSERT into $gtable values ('$name','[getDate] [getTime]','0','0','$type','0','0','0','$nick');"} stuff] } {
putserv "PRIVMSG blackcat :\002RESULT FAILED TO INSERT type _< $name >_ $stuff"
#mysqlexec $db "create table $type (rls varchar(200),pretime datetime,files varchar(100),size varchar(100));"
#mysqlexec $db "INSERT into $type values ('$name','[getDate] [getTime]','-','-');"
}
#putserv "PRIVMSG $chan :DATA called and stored -< $type $name $chan"
mysqlclose $db
#putserv "PRIVMSG $spamchan :$spmsg $name $type"
putallbots "!addpre $name $type"
if {[onchan $nick "#psr"]} {
putserv "PRIVMSG #psr :!addpre $name $type"
} else {
putserv "PRIVMSG #psr :!addpre $name $type"
putserv "PRIVMSG alexis :$name"
}
#putallbots "!addpre $name $type"
}
#Adds in the table if it is not found.
proc checkAdd { inTable } {
#putserv "PRIVMSG #moon :$inTable"
set flag "true"
set db [getInstance]
foreach table [mysqlinfo $db tables] {
#putserv "PRIVMSG #moon :about to compair $table $inTable"
if {[string equal $inTable $table] == 1} {
set flag "false"
#putserv "PRIVMSG #moon :was true"
break;
}
}
#To to add a new table with that name.
if {[string equal $flag "true"] == 1} {
putserv "PRIVMSG #psr :TRYED TO MAKE TABLE $inTable"
if {[catch {mysqlexec $db "create table $inTable (rls varchar(200),pretime datetime,files varchar(100),size varchar(100));"} msg] } {
putserv "PRIVMSG #psr :Faild to make table $inTable"
}
#putserv "PRIVMSG #psr :table made"
}
mysqlclose $db
}
#
#This method will get the time
#
proc getTime {} {
return [clock format [clock seconds] -format %T]
}
proc getDate {} {
set temp [clock format [clock seconds] -format "%Y-%m-%d"]
return $temp
}
#
#Just gets the data mysql buffer or whatever
#
proc getInstance {} {
return [mysqlconnect -user alexis -password alexis -db mysql]
}
#THIS PROC will check our database, as well as open a connection to it.
proc startup {} {
#putserv "PRIVMSG #psr :\002\[\002\ \0037prebot v1.0 by alexis loaded\002\ \0030]"
#makes sure we can axx the db
set db [getInstance]
mysqlclose $db
}
startup