view wordkick.tcl @ 424:825cac46b1cb

Cosmetic / stray trailing whitespace cleanup.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 08 Jan 2017 03:55:55 +0200
parents 593874678e45
children
line wrap: on
line source

##########################################################################
#
# WordKick v1.60 by Matti 'ccr' Hamalainen <ccr@tnsp.org>
#
# TO-DO:
# - document this pile of shit.
#
##########################################################################
# Configure these as you like

## Kickword mask/message file
# (FORMAT: See the example file!)
set wc_badword_file "data.wordkick"


## Stupid call-out kick
# 1 = kick everyone who only say someone's nick on one public msg
# 0 = no kick
set wc_callout_kick 1

# Kickmessage for call-out kick
set wc_callout_msg "Pälli."


## Use "happy messages"?
# 0 = No
# 1 = Yes (you'll need the happymessage-file, see below)
set wc_happy_msg_use 0


## "Random happy-joy-joy-messages file"
# (FORMAT: One message per line)
set wc_happy_msg_file "data.happymsg"


## Gentle mode:
# 0 = Kick with kickmessage, say happymsg just before kicking
# 1 = Don't kick, just say happymsg.
set wc_gentlemode 0


## Irritation treshold mode:
# 0 = Normal, immendiate kick on detected kickword.
# 1 = Irritation tresholded kick. See README.
set wc_irritationmode 0


## Irritation treshold value
# Number of how many kickwords to ignore before starting to kick
set wc_irritationtreshold 4


# Preferred message type ("PRIVMSG" and "NOTICE")
set wc_preferredmsg "PRIVMSG"


##########################################################################
# No need to look below this line
##########################################################################
set wc_message "WKick v1.60 by ccr/TNSP"
set wc_name "WKick"


###
### Read the bad-word file
###
catch {unset wc_bad_mask_list}
catch {unset wc_kick_msg_list}
set wc_badword_max 0
set fd [open $wc_badword_file r]
   while {![eof $fd]} {
          gets $fd foo
          if {[string first # $foo] && ([lindex $foo 0] != "")} {
              set foo [split $foo "$"]
              lappend wc_bad_mask_list [lindex $foo 0]
              lappend wc_kick_msg_list [lrange $foo 1 end]
              incr wc_badword_max
              }
         }
close $fd


###
### Read the happy-message file
###
set wc_happy_msg_max 0
catch {unset wc_happy_msg_list}
set fd [open $wc_happy_msg_file r]
   while {![eof $fd]} {
          gets $fd foo
              lappend wc_happy_msg_list $foo
	      incr wc_happy_msg_max
         }
close $fd


###
### Initialize the script
###
bind time - "* % % % %" wc_timer
bind pubm - %* wc_check
bind ctcp - ACTION wc_check

putlog "$wc_message"
putlog "(maskfile: $wc_badword_file, $wc_badword_max // happymsg: $wc_happy_msg_file, $wc_happy_msg_max)"

if {$wc_irritationmode} {
putlog "(irritation mode, treshold: $wc_irritationtreshold)"
} else {
putlog "(normal instant wordkick)"
}

if {$wc_gentlemode} {
putlog "(gentlemode, no kicking)"
}

if {$wc_callout_kick} {
putlog "(call-out idiotism kick mode ON)"
}

catch {unset wc_irritation}
set wc_irritation 0

###
### Change the irritation
###
proc wc_timer {umin uhour uday umonth uyear} {
global wc_irritation
if {$wc_irritation > 0} {
	decr wc_irritation
	}
}


###
### Match the messages with bad-word list
###
proc wc_check {nick uhost hand chan itext} {
global wc_bad_mask_list wc_kick_msg_list botnick wc_preferredmsg
global wc_happy_msg_list wc_happy_msg_max wc_name wc_gentlemode
global wc_irritation wc_irritationmode wc_irritationtreshold
global wc_callout_kick wc_callout_msg

# Convert to lower case
 set itext [string tolower $itext]

# Check for idiots
if {$wc_callout_kick} {

	set ilist [split $itext " "]
	set isec [lindex $ilist 1]

	if {$isec == "" || $isec == "{}"} {
	set iword [lindex $ilist 0]

	foreach inick [chanlist $chan] {
		if {[string match [string tolower "*$inick*"] $iword]} {
			putlog "$wc_name: $nick@$chan was idiot."
			putserv "KICK $chan $nick :$wc_callout_msg"
			}
		}
	}
}


# Go through the sentence
 set kickit 0
 set x 0
 foreach foo $wc_bad_mask_list {
	set foo2 [split $foo "|"]

	foreach i $foo2 {
	if {[string match $i $itext]} {
		putlog "$wc_name: $nick@$chan said a bad thing: $i"

# Say happymsg
		if {[rand 100] > 60} {
			putserv "$wc_preferredmsg $chan :$nick, [lindex $wc_happy_msg_list [rand $wc_happy_msg_max]]"
			}

# Check for irritation mode
		if {$wc_irritationmode != 0} {
			if {$wc_irritation >= $wc_irritationtreshold} {
				set kickit 1
				} else {
				incr wc_irritation
				}
			} else {
			set kickit 1
			}

# Check for gentle-mode
		if {($wc_gentlemode != 0) || [matchattr $hand n]} { return 0 }

# Kick the lamer
		if {$kickit != 0} {
			putserv "KICK $chan $nick :[lindex $wc_kick_msg_list $x]"
			return 0
			}

		}
	}

 incr x
 }
}