# 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 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: # ( will be the respective userfile field added in `userinfo-fields') # # TYPE COMMAND USAGE # ====== ============== ======================================== # msg To change your via /MSG. # dcc . To change your via DCC. # dcc .ch To change someone else's 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 ' 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 '.' 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' 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] \[<[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."