############################
### NoFservs.tcl         ###
### Version 1.5          ###
### By Wcc               ###
### wcc@techmonkeys.org  ###
### http://dawg.dynu.com ###
### EFnet #|DAWG|Tcl     ###
############################

############################################################################
### Copyright © 2000 - 2001 |DAWG| Scripting Group. All rights reserved. ###
############################################################################

####################################################################################
## This script warns users if they run an Fserv ad in the channel. It bans for 10 ##
## seconds on the second offense, and bans on the third.                          ##
####################################################################################

##############
## COMMANDS ##
###########################################
## DCC ## .chanset <channel> +/-nofservs ##
######### Enables or disables Fserv      ##
######### protection for a channel.      ##
###########################################

##########################################################
## Just load the script, edit the settings, and rehash. ##
##########################################################

#############################################################
# Set the time in minutes before a ban expiers here. If set #
# to 0, the ban will not be removed.                        #
#############################################################

set nofservs_setting(exp) "0"

########################################################
# Set the warning message sent to the channel here.    #
# %nick is substituted with the offending user's nick. #
########################################################

set nofservs_setting(msg) "%nick, please do not run server ads in this channel."

##################################################
# Set the first kick message text here. %nick is #
# substituted with the offending user's nick.    #
##################################################

set nofservs_setting(kmsg) "Please do not run server ads in this channel. The next time you run an ad, you will be banned."

###################################################
# Set the second kick message text here. %nick is #
# substituted with the offending user's nick.     #
###################################################

set nofservs_setting(kmsg2) "Please do not run server ads in this channel."

#############################
# Set the ban type here:    #
# 1 - *!*@host.domain	    #
# 2 - *!user@host.domain    #
# 3 - nick!*@host.domain    #
# 4 - nick!user@host.domain #
# 5 - *!?user@*.host.domain #
#############################

set nofservs_setting(bantype) "1"

####################
# Code begins here #
####################

if {![string match 1.6.* $version]} { die "\002NOFSERVS:\002 \002CRITICAL ERROR\002 NoFservs.tcl requires eggdrop 1.6.x to run." }
setudef flag nofservs

bind pubm - * nofservs_parse

proc nofservs_maskban {nick uhost} {
	global nofservs_setting
	switch -- $nofservs_setting(bantype) {
		1 { set ban "*!*@[lindex [split $uhost @] 1]" }
		2 { set ban "*!$uhost" }
		3 { set ban "$nick!*@[lindex [split $uhost @] 1]" }
		4 { set ban "$nick!$uhost" }
		5 { set ban [maskhost $uhost] }
		default { set ban "*!*@[lindex [split $uhost @] 1]" }
	}
	return $ban
}
proc nofservs_parse {nick uhost hand chan text} {
	global nofservs_array nofservs_setting
	set banmask [nofservs_maskban $nick $uhost]
	set name [string tolower $chan]![lindex [split $uhost @] 1]
	if {![info exists nofservs_array($name)]} { set nofservs_array($name) 0 }
	if {(![isop $nick $chan]) && ([botisop $chan])} {
		set ltext [string tolower $text]
		set err 0
		set err2 0
		set err3 0
		foreach i {file server online trigger send|cps} { if {![regexp $i $ltext]} { set err 1 } }
		foreach i {ftp users port l*p} { if {![regexp $i $ltext]} { set err2 1 } }
		foreach i {tdcc trigger sends queue} { if {![regexp $i $ltext]} { set err3 1 } }
		if {(!$err) || (!$err2) || (!$err3)} {
			foreach i [channel info $chan] {
				if {[string match "+nofservs" $i]} {
					incr nofservs_array($name)
					switch -- $nofservs_array($name) {
						1 {
							regsub -all -- %nick $nofservs_setting(msg) $nick msg
							putserv "PRIVMSG $chan :$msg"
						}
						2 {
							regsub -all -- %nick $nofservs_setting(kmsg) $nick msg
							putserv "KICK $chan $nick :$msg"
							putserv "MODE $chan +b $banmask"
							utimer 10 [list putserv {MODE $chan -b $banmask}]
						}
						default {
							regsub -all -- %nick $nofservs_setting(kmsg2) $nick msg
							putserv "MODE $chan +b $banmask"
							puthelp "KICK $chan $nick :$msg"
							if {$nofservs_setting(exp) != 0} { timer $nofservs_setting(exp) [list putserv {MODE $chan -b $banmask}] }
						}
					}
					break
				}
			}
		}
	}
}
putlog "\002NOFSERVS:\002 NoFservs.tcl Version 1.5 by Wcc is loaded."