summaryrefslogtreecommitdiffstats
path: root/dccwhois.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 /dccwhois.tcl
Initial commit
Diffstat (limited to 'dccwhois.tcl')
-rw-r--r--dccwhois.tcl167
1 files changed, 167 insertions, 0 deletions
diff --git a/dccwhois.tcl b/dccwhois.tcl
new file mode 100644
index 0000000..c334a0d
--- /dev/null
+++ b/dccwhois.tcl
@@ -0,0 +1,167 @@
+###############################################################################
+##
+## dccwhois.tcl - Enhanced '.whois' dcc command for Eggdrop
+## Copyright (C) 2009 Tothwolf <tothwolf@techmonkeys.org>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+###############################################################################
+##
+## $Id: dccwhois.tcl,v 1.1 2009/01/22 03:12:45 tothwolf Exp $
+##
+###############################################################################
+##
+## Description:
+##
+## This script enhances Eggdrop's built-in dcc '.whois' command to allow all
+## users to '.whois' their own handle.
+##
+## Users without the correct flags who attempt to '.whois' other users will
+## instead see the message: "You do not have access to whois handles other
+## than your own."
+##
+## To load this script, add a source command to your bot's config file:
+##
+## source scripts/dccwhois.tcl
+##
+## This script stores and checks against the flags that are used for
+## Eggdrop's built-in dcc '.whois' command at load time. If you wish to use
+## flags other than the default "to|o", etc, you should unbind and rebind
+## the built-in '.whois' command in your bot's config file before loading
+## this script.
+##
+## Example of how to rebind Eggdrop's built-in '.whois' command:
+##
+## unbind dcc to|o whois *dcc:whois
+## bind dcc to|m whois *dcc:whois
+##
+## Note: if you modify the default flags for '.whois' you may also wish to
+## modify the defaults for '.match'.
+##
+###############################################################################
+##
+## This script has no settings and does not require any configuration.
+## You should not need to edit anything below.
+##
+###############################################################################
+
+
+# This script should not be used with Eggdrop versions 1.6.16 - 1.6.19.
+catch {set numversion}
+if {([info exists numversion]) &&
+ ($numversion >= 1061600) && ($numversion <= 1061900)} then {
+ putlog "Error: dccwhois.tcl is not compatible with Eggdrop version [lindex $version 0]. Please upgrade to 1.6.20 or later."
+ return
+}
+
+
+#
+# dcc:whois --
+#
+# Wrapper proc command for Eggdrop's built-in *dcc:whois
+#
+# Arguments:
+# hand - handle of user who used this command
+# idx - dcc idx of user who used this command
+# arg - arguments passed to this command
+#
+# Results:
+# Calls Eggdrop's built-in *dcc:whois with the given arguments if user has
+# access, otherwise tells the user they don't have access.
+#
+proc dcc:whois {hand idx arg} {
+ global dccwhois_flags
+
+ set arg [split [string trimright $arg]]
+ set who [lindex $arg 0]
+
+ # Did user gave a handle other than their own?
+ if {([string compare "" $who]) &&
+ ([string compare [string toupper $hand] [string toupper $who]])} then {
+
+ # Get user's current .console channel; check the same way Eggdrop does.
+ set chan [lindex [console $idx] 0]
+
+ # User isn't allowed to '.whois' handles other than their own.
+ if {![matchattr $hand $dccwhois_flags $chan]} then {
+ putdcc $idx "You do not have access to whois handles other than your own."
+
+ return 0
+ }
+ }
+
+ # Call built-in whois command.
+ *dcc:whois $hand $idx $arg
+
+ # Return 0 so we don't log command twice.
+ return 0
+}
+
+
+#
+# init_dccwhois --
+#
+# Initialize dccwhois script-specific code when script is loaded
+#
+# Arguments:
+# (none)
+#
+# Results:
+# Set up command bindings and store command access flags.
+#
+proc init_dccwhois {} {
+ global dccwhois_flags
+
+ putlog "Loading dccwhois.tcl..."
+
+ # Sanity check...
+ if {[array exists dccwhois_flags]} then {
+ array unset dccwhois_flags
+ }
+
+ # Search binds for built-in '*dcc:whois' and loop over each bind in list
+ foreach bind [binds "\\*dcc:whois"] {
+
+ # dcc to|o whois 0 *dcc:whois
+ foreach {type flags name count command} $bind {break}
+
+ # We only want to unbind dcc '.whois'
+ if {[string compare $name "whois"]} then {
+ continue
+ }
+
+ # Store $flags so we can reuse them later
+ set dccwhois_flags $flags
+
+ # Unbind built-in *dcc:whois
+ unbind $type $flags $name $command
+ }
+
+ # Make sure $dccwhois_flags exists and isn't empty,
+ # otherwise set to Eggdrop's default "to|o"
+ if {(![info exists dccwhois_flags]) ||
+ (![string compare "" $dccwhois_flags])} then {
+ set dccwhois_flags "to|o"
+ }
+
+ # Add bind for dcc:whois wrapper proc
+ bind dcc -|- whois dcc:whois
+
+ putlog "Loaded dccwhois.tcl"
+
+ return
+}
+
+init_dccwhois