summaryrefslogtreecommitdiffstats
path: root/klined.tcl
diff options
context:
space:
mode:
authorStefan Ritter <xeno@thehappy.de>2011-08-16 10:51:41 +0200
committerStefan Ritter <xeno@thehappy.de>2011-08-16 10:51:41 +0200
commitba46c304bdffdce0b6019a47f6759ce6abbeef90 (patch)
tree40a5b204637cb65c5bb91bd4f26a248ea498e019 /klined.tcl
Initial commit
Diffstat (limited to 'klined.tcl')
-rw-r--r--klined.tcl179
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