diff options
author | Stefan Ritter <xeno@thehappy.de> | 2011-08-16 10:51:41 +0200 |
---|---|---|
committer | Stefan Ritter <xeno@thehappy.de> | 2011-08-16 10:51:41 +0200 |
commit | ba46c304bdffdce0b6019a47f6759ce6abbeef90 (patch) | |
tree | 40a5b204637cb65c5bb91bd4f26a248ea498e019 /klined.tcl |
Initial commit
Diffstat (limited to 'klined.tcl')
-rw-r--r-- | klined.tcl | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/klined.tcl b/klined.tcl new file mode 100644 index 0000000..044abcc --- /dev/null +++ b/klined.tcl @@ -0,0 +1,179 @@ +# +# KLined.TCL - Version 1.0 +# By Ian Kaney - ikaney@uk.defiant.org +# +# $Id: klined.tcl,v 1.2 1999/12/21 17:35:08 fabian Exp $ +# +# Even at the best of times, your bot will get k-lined by one operator or +# another on a server you're running your bot on. This script will 'hopefully' +# handle this by removing it from your bot's server list when it detects +# you've been k-lined there. Thus, stopping IRC server admins getting +# rather peeved at the constant connects from your host. +# +# USAGE: +# The actual handling of removing the server from your server list +# and writing it to the 'klines' file is handled automatically when +# your bot receives the k-line signal, but there are some DCC commands +# that have been added, these are: +# +# .klines - Lists the 'klines' file showing servers that your bot +# has registered as being k-lined on. +# .unkline <server> - Removes the k-line from the server *joke* ;) +# Actually, this removes the server from the list +# of servers to remove. +# + +# Bindings +# --- +bind load - server remove_kservers +bind raw - 465 woah_klined +bind dcc n klines list_kservers +bind dcc n unkline unkline_server + +# Variables +# --- +# Change this to suite your tastes - if you can't be bothered, or +# don't know how, leave it. +set kfile "klines" + +proc list_kservers {handle idx args} { +global kfile + +putcmdlog "#$handle# klines" +set fd [open $kfile r] +set kservers { } + +while {![eof $fd]} { + set tmp [gets $fd] + if {[eof $fd]} {break} + set kservers [lappend kservers [string trim $tmp]] + } +close $fd +if {[llength $kservers] == 0} { + putdcc $idx "No k-lined servers." + return 0 + } +putdcc $idx "My k-lined server list:\n" +foreach tmp $kservers { + putdcc $idx $tmp + } +} + +proc unkline_server {handle idx args} { +global kfile + +set kservers {} + +set fd [open $kfile r] +set rem [lindex $args 0] + +putcmdlog "#$handle# unkline $rem" + +while {![eof $fd]} { + set tmp [gets $fd] + if {[eof $fd]} {break} + set kservers [lappend kservers [string trim $tmp]] +} +close $fd + +set fd [open $kfile w] +set flag "0" + +foreach tmp $kservers { + if {$tmp == $rem} { + set flag "1" + } + if {$tmp != $rem} { + puts $fd $tmp + } + } +close $fd +if {$flag == "0"} { + putdcc $idx "Could not find $rem in the k-lined server list." + } +if {$flag == "1"} { + putdcc $idx "Removed server $rem from k-lined server list." + } +} + +proc remove_kservers {module} { +global kfile +global server servers + +if {[catch {set fd [open $kfile r]}] != 0} { +set fd [open $kfile w] +close $fd +set fd [open $kfile r] +} + +while {![eof $fd]} { + set from [string trim [gets $fd]] + set name "*$from*" + if {[eof $fd]} {break} + + for {set j 0} {$j >= 0} {incr j} { + set x [lsearch $servers $name] + if {$x >= 0} { + set servers [lreplace $servers $x $x] + } + if {$x < 0} { + if {$j >= 0} { + putlog "Removed server: $from" + } + break + } + } + } +close $fd +return 1 +} + +proc woah_klined {from keyword arg} { + +global kfile +global server servers + +set kservers {} + +set fd [open $kfile r] + +while {![eof $fd]} { + set tmp [gets $fd] + if {[eof $fd]} {break} + set kservers [lappend kservers [string trim $tmp]] +} +close $fd + +set flag "0" + +foreach tmp $kservers { + if {$tmp == $from} { + set flag "1" + } +} + +if {$flag != "1"} { +set fd [open $kfile a] +puts $fd $from +close $fd +} + +set name "*$from*" + +for {set j 0} {$j >= 0} {incr j} { + set x [lsearch $servers $name] + if {$x >= 0} { + set servers [lreplace $servers $x $x] + } + if {$x <= 0} { + if {$j >= 0} { + putlog "Removed server: $from" + } + break + } + } + return 1 +} + +putlog "TCL loaded: k-lined" +remove_kservers server |