summaryrefslogtreecommitdiffstats
path: root/alltools.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 /alltools.tcl
Initial commit
Diffstat (limited to 'alltools.tcl')
-rw-r--r--alltools.tcl441
1 files changed, 441 insertions, 0 deletions
diff --git a/alltools.tcl b/alltools.tcl
new file mode 100644
index 0000000..36cbfa6
--- /dev/null
+++ b/alltools.tcl
@@ -0,0 +1,441 @@
+#
+# All-Tools TCL, includes toolbox.tcl, toolkit.tcl and moretools.tcl
+# toolbox was originally authored by cmwagner <cmwagner@sodre.net>
+# toolkit was originally authored by Robey Pointer
+# moretools was originally authored by David Sesno <walker@shell.pcrealm.net>
+# modified for 1.3.0 bots by TG
+#
+# Copyright (C) 1999, 2003 - 2010 Eggheads Development Team
+#
+# Tothwolf 02May1999: rewritten and updated
+# guppy 02May1999: updated even more
+# Tothwolf 02May1999: fixed what guppy broke and updated again
+# Tothwolf 24/25May1999: more changes
+# rtc 20Sep1999: added isnumber, changes
+# dw 20Sep1999: use regexp for isnumber checking
+# Tothwolf 06Oct1999: optimized completely
+# krbb 09Jun2000: added missing return to randstring
+# Tothwolf 18Jun2000: added ispermowner
+# Sup 02Apr2001: added matchbotattr
+# Tothwolf 13Jun2001: updated/modified several commands
+# Hanno 28Sep2001: fixed testip
+# guppy 03Mar2002: optimized
+# Souperman 05Nov2002: added ordnumber
+# Tothwolf 27Dec2003: added matchbotattrany, optimized ordnumber,
+# more minor changes
+#
+# $Id: alltools.tcl,v 1.23 2010/01/03 13:27:31 pseudo Exp $
+#
+########################################
+#
+# Descriptions of available commands:
+#
+##
+## (toolkit):
+##
+#
+# putmsg <nick/chan> <text>
+# send a privmsg to the given nick or channel
+#
+# putchan <nick/chan> <text>
+# send a privmsg to the given nick or channel
+# (for compat only, this is the same as 'putmsg' above)
+#
+# putnotc <nick/chan> <text>
+# send a notice to the given nick or channel
+#
+# putact <nick/chan> <text>
+# send an action to the given nick or channel
+#
+#
+##
+## (toolbox):
+##
+#
+# strlwr <string>
+# string tolower
+#
+# strupr <string>
+# string toupper
+#
+# strcmp <string1> <string2>
+# string compare
+#
+# stricmp <string1> <string2>
+# string compare (case insensitive)
+#
+# strlen <string>
+# string length
+#
+# stridx <string> <index>
+# string index
+#
+# iscommand <command>
+# if the given command exists, return 1
+# else return 0
+#
+# timerexists <command>
+# if the given command is scheduled by a timer, return its timer id
+# else return empty string
+#
+# utimerexists <command>
+# if the given command is scheduled by a utimer, return its utimer id
+# else return empty string
+#
+# inchain <bot>
+# if the given bot is connected to the botnet, return 1
+# else return 0
+# (for compat only, same as 'islinked')
+#
+# randstring <length>
+# returns a random string of the given length
+#
+# putdccall <text>
+# send the given text to all dcc users
+#
+# putdccbut <idx> <text>
+# send the given text to all dcc users except for the given idx
+#
+# killdccall
+# kill all dcc user connections
+#
+# killdccbut <idx>
+# kill all dcc user connections except for the given idx
+#
+#
+##
+## (moretools):
+##
+#
+# iso <nick> <channel>
+# if the given nick has +o access on the given channel, return 1
+# else return 0
+#
+# realtime [format]
+# 'time' returns the current time in 24 hour format '14:15'
+# 'date' returns the current date in the format '21 Dec 1994'
+# not specifying any format will return the current time in
+# 12 hour format '1:15 am'
+#
+# testip <ip>
+# if the given ip is valid, return 1
+# else return 0
+#
+# number_to_number <number>
+# if the given number is between 1 and 15, return its text representation
+# else return the number given
+#
+#
+##
+## (other commands):
+##
+#
+# isnumber <string>
+# if the given string is a valid number, return 1
+# else return 0
+#
+# ispermowner <handle>
+# if the given handle is a permanent owner, return 1
+# else return 0
+#
+# matchbotattr <bot> <flags>
+# if the given bot has all the given flags, return 1
+# else return 0
+#
+# matchbotattrany <bot> <flags>
+# if the given bot has any the given flags, return 1
+# else return 0
+#
+# ordnumber <string>
+# if the given string is a number, returns the
+# "ordinal" version of that number, i.e. 1 -> "1st",
+# 2 -> "2nd", 3 -> "3rd", 4 -> "4th", etc.
+# else return <string>
+#
+########################################
+
+# So scripts can see if allt is loaded.
+set alltools_loaded 1
+set allt_version 206
+
+# For backward compatibility.
+set toolbox_revision 1007
+set toolbox_loaded 1
+set toolkit_loaded 1
+
+#
+# toolbox:
+#
+
+proc putmsg {dest text} {
+ puthelp "PRIVMSG $dest :$text"
+}
+
+proc putchan {dest text} {
+ puthelp "PRIVMSG $dest :$text"
+}
+
+proc putnotc {dest text} {
+ puthelp "NOTICE $dest :$text"
+}
+
+proc putact {dest text} {
+ puthelp "PRIVMSG $dest :\001ACTION $text\001"
+}
+
+#
+# toolkit:
+#
+
+proc strlwr {string} {
+ string tolower $string
+}
+
+proc strupr {string} {
+ string toupper $string
+}
+
+proc strcmp {string1 string2} {
+ string compare $string1 $string2
+}
+
+proc stricmp {string1 string2} {
+ string compare [string tolower $string1] [string tolower $string2]
+}
+
+proc strlen {string} {
+ string length $string
+}
+
+proc stridx {string index} {
+ string index $string $index
+}
+
+proc iscommand {command} {
+ if {[string compare "" [info commands $command]]} then {
+ return 1
+ }
+ return 0
+}
+
+proc timerexists {command} {
+ foreach i [timers] {
+ if {![string compare $command [lindex $i 1]]} then {
+ return [lindex $i 2]
+ }
+ }
+ return
+}
+
+proc utimerexists {command} {
+ foreach i [utimers] {
+ if {![string compare $command [lindex $i 1]]} then {
+ return [lindex $i 2]
+ }
+ }
+ return
+}
+
+proc inchain {bot} {
+ islinked $bot
+}
+
+proc randstring {length {chars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789}} {
+ if {([string compare "" $length]) && \
+ (![regexp \[^0-9\] $length])} then {
+ set count [string length $chars]
+ if {$count} then {
+ for {set index 0} {$index < $length} {incr index} {
+ append result [string index $chars [rand $count]]
+ }
+ } else {
+ error "empty character string"
+ }
+ } else {
+ error "invalid random string length"
+ }
+ return $result
+}
+
+proc putdccall {text} {
+ foreach i [dcclist CHAT] {
+ putdcc [lindex $i 0] $text
+ }
+}
+
+proc putdccbut {idx text} {
+ foreach i [dcclist CHAT] {
+ set j [lindex $i 0]
+ if {$j != $idx} then {
+ putdcc $j $text
+ }
+ }
+}
+
+proc killdccall {} {
+ foreach i [dcclist CHAT] {
+ killdcc [lindex $i 0]
+ }
+}
+
+proc killdccbut {idx} {
+ foreach i [dcclist CHAT] {
+ set j [lindex $i 0]
+ if {$j != $idx} then {
+ killdcc $j
+ }
+ }
+}
+
+#
+# moretools:
+#
+
+proc iso {nick chan} {
+ matchattr [nick2hand $nick $chan] o|o $chan
+}
+
+proc realtime {args} {
+ switch -exact -- [lindex $args 0] {
+ time {
+ return [strftime %H:%M]
+ }
+ date {
+ return [strftime "%d %b %Y"]
+ }
+ default {
+ return [strftime "%I:%M %P"]
+ }
+ }
+}
+
+proc testip {ip} {
+ set tmp [split $ip .]
+ if {[llength $tmp] != 4} then {
+ return 0
+ }
+ set index 0
+ foreach i $tmp {
+ if {(([regexp \[^0-9\] $i]) || ([string length $i] > 3) || \
+ (($index == 3) && (($i > 254) || ($i < 1))) || \
+ (($index <= 2) && (($i > 255) || ($i < 0))))} then {
+ return 0
+ }
+ incr index
+ }
+ return 1
+}
+
+proc number_to_number {number} {
+ switch -exact -- $number {
+ 0 {
+ return Zero
+ }
+ 1 {
+ return One
+ }
+ 2 {
+ return Two
+ }
+ 3 {
+ return Three
+ }
+ 4 {
+ return Four
+ }
+ 5 {
+ return Five
+ }
+ 6 {
+ return Six
+ }
+ 7 {
+ return Seven
+ }
+ 8 {
+ return Eight
+ }
+ 9 {
+ return Nine
+ }
+ 10 {
+ return Ten
+ }
+ 11 {
+ return Eleven
+ }
+ 12 {
+ return Twelve
+ }
+ 13 {
+ return Thirteen
+ }
+ 14 {
+ return Fourteen
+ }
+ 15 {
+ return Fifteen
+ }
+ default {
+ return $number
+ }
+ }
+}
+
+#
+# other commands:
+#
+
+proc isnumber {string} {
+ if {([string compare "" $string]) && \
+ (![regexp \[^0-9\] $string])} then {
+ return 1
+ }
+ return 0
+}
+
+proc ispermowner {hand} {
+ global owner
+
+ if {([matchattr $hand n]) && \
+ ([lsearch -exact [split [string tolower $owner] ", "] \
+ [string tolower $hand]] != -1)} then {
+ return 1
+ }
+ return 0
+}
+
+proc matchbotattr {bot flags} {
+ foreach flag [split $flags ""] {
+ if {[lsearch -exact [split [botattr $bot] ""] $flag] == -1} then {
+ return 0
+ }
+ }
+ return 1
+}
+
+proc matchbotattrany {bot flags} {
+ foreach flag [split $flags ""] {
+ if {[string first $flag [botattr $bot]] != -1} then {
+ return 1
+ }
+ }
+ return 0
+}
+
+proc ordnumber {string} {
+ if {[isnumber $string]} then {
+ set last [string index $string end]
+ if {[string index $string [expr [string length $string] - 2]] != 1} then {
+ if {$last == 1} then {
+ return ${string}st
+ } elseif {$last == 2} then {
+ return ${string}nd
+ } elseif {$last == 3} then {
+ return ${string}rd
+ }
+ }
+ return ${string}th
+ }
+ return $string
+}