#########################################################################
##          BlackTools - The Ultimate Channel Control Script           ##
##                    One TCL. One smart Eggdrop                       ##
#########################################################################
########################   ANTIREPEAT TCL   #############################
#########################################################################
##						                       ##
##   BlackTools  : http://blacktools.tclscripts.net	               ##
##   Bugs report : http://www.tclscripts.net/	                       ##
##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
##                 #TCL-HELP / UnderNet                                ##
##                 You can ask in english or romanian                  ##
##					                               ##
#########################################################################

proc antirepeat:protect {nick host hand chan arg} {
global black botnick
	set arg [color:filter [join [split $arg]]]
	set handle [nick2hand $nick]
if {![validchan $chan]} { return }
if {![botisop $chan] && ![setting:get $chan xonly]} { return }
if {[matchattr $handle $black(exceptflags) $chan]} { return }
	set bl_protect [blacktools:protect $nick $chan]
if {$bl_protect == "1"} { return }
if {[isbotnick $nick]} { return }
	set repeatset [setting:get $chan antirepeat-setting]
if {$repeatset == ""} { set repeatset "$black(antirepeat:repeats)" }
	set number [scan $repeatset %\[^:\]]
	set time [scan $repeatset %*\[^:\]:%s]
foreach tmr [utimers] {
if {[string match "*antirepeat:remove $host $chan $arg*" [join [lindex $tmr 1]]]} {
	killutimer [lindex $tmr 2]
	}	
}

if {![info exists black(repeat:$host:$chan:$arg)]} { 
	set black(repeat:$host:$chan:$arg) 0 
}
	incr black(repeat:$host:$chan:$arg)
	utimer $time [list antirepeat:remove $host $chan $arg]

if {$black(repeat:$host:$chan:$arg) >= $number} {
	blacktools:banner:1 $nick "ANTIREPEAT" $chan $host [get:banmethod "antirepeat" $chan] [link:chan:get $chan]
	antirepeat:remove $host $chan $arg
	return 1
	}
}

proc antirepeat:remove {host chan arg} {
	global black
	
foreach tmr [utimers] {
if {[string match "*antirepeat:remove $host $chan $arg*" [join [lindex $tmr 1]]]} {
	killutimer [lindex $tmr 2]
	}	
}

if {[info exists black(repeat:$host:$chan:$arg)]} {
	unset black(repeat:$host:$chan:$arg)
	}
}

proc antirepeat:protect:me {nick host hand chan keyword arg} {
	antirepeat:protect $nick $host $hand $chan $arg
}

##############
#########################################################################
##   END                                                               ##
#########################################################################