From ba46c304bdffdce0b6019a47f6759ce6abbeef90 Mon Sep 17 00:00:00 2001 From: Stefan Ritter Date: Tue, 16 Aug 2011 10:51:41 +0200 Subject: Initial commit --- userinfo.tcl | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 userinfo.tcl (limited to 'userinfo.tcl') 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 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." -- cgit v1.2.3