summaryrefslogtreecommitdiffstats
path: root/userinfo.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 /userinfo.tcl
Initial commit
Diffstat (limited to 'userinfo.tcl')
-rw-r--r--userinfo.tcl285
1 files changed, 285 insertions, 0 deletions
diff --git a/userinfo.tcl b/userinfo.tcl
new file mode 100644
index 0000000..edc30bb
--- /dev/null
+++ b/userinfo.tcl
@@ -0,0 +1,285 @@
+# userinfo.tcl v1.06 for Eggdrop 1.4.3 and higher
+# Scott G. Taylor -- ButchBub!staylor@mrynet.com
+#
+# $Id: userinfo.tcl,v 1.5 2001/11/15 06:28:35 guppy Exp $
+#
+# v1.00 ButchBub 14 July 1997 -Original release. Based on
+# whois.tcl "URL" commands.
+# v1.01 Beldin 11 November 1997 -1.3 only version
+# v1.02 Kirk 19 June 1998 -extremely small fixes
+# v1.03 guppy 17 March 1999 -small fixes again
+# v1.04 Ernst 15 June 1999 -fix for egg 1.3.x + TCL 8.0
+# v1.05 Dude 14 July 1999 -small cosmetic/typo fixes
+# -$lastbind bug work around fix
+# -added userinfo_loaded var
+# -fixed bug in dcc_chuserinfo proc
+# -unbinds removed user fields
+# -dcc .showfields command added
+# -deletes removed userinfo fields
+# from the whois-fields list.
+# v1.06 guppy 19 March 2000 -removed lastbind workaround since
+# lastbind is fixed in eggdrop1.4.3
+# v1.07 TaKeDa 20 August 2001 -now script works also on bots,
+# which didn't have server module loaded
+# -added new fields PHONE & ICQ
+#
+# TO USE: o Set the desired userinfo field keywords to the
+# `userinfo-fields' line below where indicated.
+# o Load this script on a 1.1.6 or later Eggdrop bot.
+# o Begin having users save the desired information. If you
+# choose to add the default "IRL" field, they just use
+# the IRC command: /MSG <botnick> irl Joe Blow.
+# o See the new information now appear with the whois command.
+#
+# This script enhances the `whois' output utilizing the `whois-fields'
+# option of eggdrop 1.1-grant and later versions. It adds the functionality
+# of whois.tcl used in pre-1.1-grant versions.
+#
+# The fields desired to be maintained in the userfile `xtra' information
+# should be put in `userinfo-fields'. This is different than the Eggdrop
+# configuration variable `whois-fields' in that this script will add the
+# commands to change these fields. It will also add these desired fields
+# to the `whois-fields' itself, so do not define them there as well. The
+# fields added in `userinfo-fields' will be converted to upper case for
+# aesthetics in the `whois' command output.
+#
+# The commands that will be added to the running eggdrop are:
+# (<info> will be the respective userfile field added in `userinfo-fields')
+#
+# TYPE COMMAND USAGE
+# ====== ============== ========================================
+# msg <info> To change your <info> via /MSG.
+# dcc .<info> To change your <info> via DCC.
+# dcc .ch<info> To change someone else's <info> via DCC.
+#
+# Currently supported fields and commands:
+#
+# FIELD USAGE
+# ===== =====================
+# URL WWW page URL
+# IRL In Real Life name
+# BF Boyfriend
+# GF Girlfriend
+# DOB Birthday (Date Of Birth)
+# EMAIL Email address
+# PHONE Phone number
+# ICQ ICQ number
+
+
+################################
+# Set your desired fields here #
+################################
+
+set userinfo-fields "URL BF GF IRL EMAIL DOB PHONE ICQ"
+
+# This script's identification
+
+set userinfover "Userinfo TCL v1.07"
+
+# This script is NOT for pre-1.4.3 versions.
+
+catch { set numversion }
+if {![info exists numversion] || ($numversion < 1040300)} {
+ putlog "*** Can't load $userinfover -- At least Eggdrop v1.4.3 required"
+ return 0
+}
+
+# Make sure we don't bail because whois and/or userinfo-fields aren't set.
+
+if { ![info exists whois-fields]} { set whois-fields "" }
+if { ![info exists userinfo-fields]} { set userinfo-fields "" }
+
+# Add only the userinfo-fields not already in the whois-fields list.
+
+foreach field [string tolower ${userinfo-fields}] {
+ if { [lsearch -exact [string tolower ${whois-fields}] $field] == -1 } { append whois-fields " " [string toupper $field] }
+}
+
+# If olduserinfo-fields doesn't exist, create it.
+
+if { ![info exists olduserinfo-fields] } { set olduserinfo-fields ${userinfo-fields} }
+
+# Delete only the userinfo-fields that have been removed but are still
+# listed in the whois-fields list.
+
+foreach field [string tolower ${olduserinfo-fields}] {
+ if { [lsearch -exact [string tolower ${whois-fields}] $field] >= 0 && [lsearch -exact [string tolower ${userinfo-fields}] $field] == -1 } {
+ set fieldtmp [lsearch -exact [string tolower ${whois-fields}] $field]
+ set whois-fields [lreplace ${whois-fields} $fieldtmp $fieldtmp]
+ }
+}
+
+# If olduserinfo-fields don't equal userinfo-fields, lets run through the
+# old list of user fields and compare them with the current list. this way
+# any fields that have been removed that were originally in the list will
+# have their msg/dcc commands unbinded so you don't have to do a restart.
+
+if {[info commands putserv] == ""} {
+ set isservermod 0
+} else {
+ set isservermod 1
+}
+
+if { [string tolower ${olduserinfo-fields}] != [string tolower ${userinfo-fields}] } {
+ foreach field [string tolower ${olduserinfo-fields}] {
+ if { [lsearch -exact [string tolower ${userinfo-fields}] $field] == -1 } {
+ if $isservermod {unbind msg - $field msg_setuserinfo}
+ unbind dcc - $field dcc_setuserinfo
+ unbind dcc m ch$field dcc_chuserinfo
+ }
+ }
+ set olduserinfo-fields ${userinfo-fields}
+}
+
+# Run through the list of user info fields and bind their commands
+
+if { ${userinfo-fields} != "" } {
+ foreach field [string tolower ${userinfo-fields}] {
+ if $isservermod {bind msg - $field msg_setuserinfo}
+ bind dcc - $field dcc_setuserinfo
+ bind dcc m ch$field dcc_chuserinfo
+ }
+}
+
+# This is the `/msg <info>' procedure
+if $isservermod {
+
+proc msg_setuserinfo {nick uhost hand arg} {
+ global lastbind quiet-reject userinfo-fields
+ set userinfo [string toupper $lastbind]
+ set arg [cleanarg $arg]
+ set ignore 1
+ foreach channel [channels] {
+ if {[onchan $nick $channel]} {
+ set ignore 0
+ }
+ }
+ if {$ignore} {
+ return 0
+ }
+ if {$hand != "*"} {
+ if {$arg != ""} {
+ if {[string tolower $arg] == "none"} {
+ putserv "NOTICE $nick :Removed your $userinfo line."
+ setuser $hand XTRA $userinfo ""
+ } {
+ putserv "NOTICE $nick :Now: $arg"
+ setuser $hand XTRA $userinfo "[string range $arg 0 159]"
+ }
+ } {
+ if {[getuser $hand XTRA $userinfo] == ""} {
+ putserv "NOTICE $nick :You have no $userinfo set."
+ } {
+ putserv "NOTICE $nick :Currently: [getuser $hand XTRA $userinfo]"
+ }
+ }
+ } else {
+ if {${quiet-reject} != 1} {
+ putserv "NOTICE $nick :You must be a registered user to use this feature."
+ }
+ }
+ putcmdlog "($nick!$uhost) !$hand! $userinfo $arg"
+ return 0
+}
+
+#checking for server module
+}
+
+# This is the dcc '.<info>' procedure.
+
+proc dcc_setuserinfo {hand idx arg} {
+ global lastbind userinfo-fields
+ set userinfo [string toupper $lastbind]
+ set arg [cleanarg $arg]
+ if {$arg != ""} {
+ if {[string tolower $arg] == "none"} {
+ putdcc $idx "Removed your $userinfo line."
+ setuser $hand XTRA $userinfo ""
+ } {
+ putdcc $idx "Now: $arg"
+ setuser $hand XTRA $userinfo "[string range $arg 0 159]"
+ }
+ } {
+ if {[getuser $hand XTRA $userinfo] == ""} {
+ putdcc $idx "You have no $userinfo set."
+ } {
+ putdcc $idx "Currently: [getuser $hand XTRA $userinfo]"
+ }
+ }
+ putcmdlog "#$hand# [string tolower $userinfo] $arg"
+ return 0
+}
+
+# This is the DCC `.ch<info>' procedure
+
+proc dcc_chuserinfo {hand idx arg} {
+ global lastbind userinfo-fields
+ set userinfo [string toupper [string range $lastbind 2 end]]
+ set arg [cleanarg $arg]
+ if { $arg == "" } {
+ putdcc $idx "syntax: .ch[string tolower $userinfo] <who> \[<[string tolower $userinfo]>|NONE\]"
+ return 0
+ }
+ set who [lindex [split $arg] 0]
+ if {![validuser $who]} {
+ putdcc $idx "$who is not a valid user."
+ return 0
+ }
+ if {[llength [split $arg]] == 1} {
+ set info ""
+ } {
+ set info [lrange [split $arg] 1 end]
+ }
+ if {$info != ""} {
+ if {[string tolower $info] == "none"} {
+ putdcc $idx "Removed $who's $userinfo line."
+ setuser $who XTRA $userinfo ""
+ putcmdlog "$userinfo for $who removed by $hand"
+ } {
+ putdcc $idx "Now: $info"
+ setuser $who XTRA $userinfo "$info"
+ putcmdlog "$userinfo for $who set to \"$info\" by $hand"
+ }
+ } {
+ if {[getuser $who XTRA $userinfo] == ""} {
+ putdcc $idx "$who has no $userinfo set."
+ } {
+ putdcc $idx "Currently: [getuser $who XTRA $userinfo]"
+ }
+ }
+ return 0
+}
+
+bind dcc m showfields showfields
+
+proc showfields {hand idx arg} {
+ global userinfo-fields
+ if { ${userinfo-fields} == "" } {
+ putdcc $idx "Their is no user info fields set."
+ return 0
+ }
+ putdcc $idx "Currently: [string toupper ${userinfo-fields}]"
+ putcmdlog "#$hand# showfields"
+ return 0
+}
+
+proc cleanarg {arg} {
+ set response ""
+ for {set i 0} {$i < [string length $arg]} {incr i} {
+ set char [string index $arg $i]
+ if {($char != "\12") && ($char != "\15")} {
+ append response $char
+ }
+ }
+ return $response
+}
+
+# Set userinfo_loaded variable to indicate that the script was successfully
+# loaded. this can be used in scripts that make use of the userinfo tcl.
+
+set userinfo_loaded 1
+
+# Announce that we've loaded the script.
+
+putlog "$userinfover loaded (${userinfo-fields})."
+putlog "use '.help userinfo' for commands."