}
}
+proc usererror {emsg} { error $emsg {} {BLIGHT USER} }
+
proc out__vars {} {
uplevel 1 {
global out_queue out_creditms out_creditat out_interval out_maxburst
}
proc msg_PRIVMSG {p c dest text} {
+ global errorCode
+
prefix_nick
if {[ischan $dest]} {
recordlastseen_n $n "invoking me in $dest" 1
set ucmd [ta_word]
set procname ucmd/[string tolower $ucmd]
if {[catch { info body $procname }]} {
- error "unknown command; try help for help"
+ usererror "Unknown command; try help for help."
}
$procname $p $dest
} rv]} {
- sendprivmsg $n "error: $rv"
+ if {"$errorCode" != "BLIGHT USER"} { set rv "error: $rv" }
+ sendprivmsg $n $rv
} else {
manyset $rv priv_msgs pub_msgs priv_acts pub_acts
foreach {td val} [list $n $priv_acts $output $pub_acts] {
proc check_notonchan {} {
upvar 1 dest dest
- if {[ischan $dest]} { error "that command must be sent privately" }
+ if {[ischan $dest]} { usererror "That command must be sent privately." }
}
proc nick_securitycheck {strict} {
upvar 1 n n
- if {![nickdb_exists $n]} { error "you are unknown to me, use `register'." }
+ if {![nickdb_exists $n]} {
+ usererror "You are unknown to me, use `register'."
+ }
set wantu [nickdb_get $n username]
if {![string length $wantu]} {
if {$strict} {
- error "that feature is only available to secure users, sorry."
+ usererror "That feature is only available to secure users, sorry."
} else {
return
}
set luser [irctolower $n]
upvar #0 nick_username($luser) nu
if {![info exists nu]} {
- error "nick $n is secure, you must identify yourself first."
+ usererror "Nick $n is secure, you must identify yourself first."
}
if {"$wantu" != "$nu"} {
- error "you are the wrong user - the nick $n belongs to $wantu, not $nu"
+ usererror "You are the wrong user -\
+ the nick $n belongs to $wantu, not $nu."
}
}
-proc channel_securitycheck {channel n} {
- # You must also call `nick_securitycheck 1'
+proc channel_ismanager {channel n} {
set mgrs [chandb_get $channel managers]
- if {[lsearch -exact [irctolower $mgrs] [irctolower $n]] < 0} {
- error "you are not a manager of $channel"
+ return [expr {[lsearch -exact [irctolower $mgrs] [irctolower $n]] >= 0}]
+}
+
+proc channel_securitycheck {channel} {
+ upvar n n
+ if {![channel_ismanager $channel $n]} {
+ usererror "You are not a manager of $channel."
}
+ nick_securitycheck 1
}
proc def_chancmd {name body} {
ucmdr "Topic $what list for $chan: $ta_listop_ev" {}
}
default {
- error "unknown channel topic subcommand - see help channel"
+ usererror "Unknown channel topic subcommand - see help channel."
}
}
}
if {[ta_anymore]} { set target [ta_word] }
ta_nomore
if {![info exists target]} {
- error "you must specify, or invoke me on, the relevant channel"
+ usererror "You must specify, or invoke me on, the relevant channel."
}
if {![info exists chan_nicks([irctolower $target])]} {
- error "I am not on $target."
+ usererror "I am not on $target."
}
if {![ischan $target]} { error "not a valid channel" }
- if {![chandb_exists $target]} { error "$target is not a managed channel." }
- nick_securitycheck 1
- channel_securitycheck $target $n
+ if {![chandb_exists $target]} {
+ usererror "$target is not a managed channel."
+ }
+ channel_securitycheck $target
}
def_ucmd op {
}
def_ucmd invite {
- global chan_nicks
+ global chan_nicks errorCode errorInfo
+ prefix_nick
if {[ischan $dest]} {
set target $dest
set onchan 0
}
set ltarget [irctolower $target]
- if {![ischan $target]} { error "$target is not a channel." }
- if {![info exists chan_nicks($ltarget)]} { error "I am not on $target." }
- set ui [chandb_get $ltarget userinvite]
- if {"$ui" == "pub" && !$onchan} {
- error "Invitations to $target must be made with !invite."
+ if {![ischan $target]} { error "$target is not a channel" }
+ if {![info exists chan_nicks($ltarget)]} {
+ usererror "I am not on $target."
}
- if {"$ui" != "all"} {
- prefix_nick
- if {[lsearch -exact $chan_nicks($ltarget) [irctolower $n]] < 0} {
- error "Invitations to $target may only be made by a user on the channel."
+ set ui [chandb_get $ltarget userinvite]
+ if {[catch {
+ if {"$ui" == "pub" && !$onchan} {
+ usererror "Invitations to $target must be made there with !invite."
+ }
+ if {"$ui" != "all"} {
+ if {[lsearch -exact $chan_nicks($ltarget) [irctolower $n]] < 0} {
+ usererror "Invitations to $target may only be made\
+ by a user on the channel."
+ }
+ }
+ if {"$ui" == "none"} {
+ usererror "Sorry, I've not been authorised\
+ to invite people to $target."
+ }
+ } emsg]} {
+ if {"$errorCode" == "BLIGHT USER" && [channel_ismanager $target $n]} {
+ if {[catch {
+ nick_securitycheck 1
+ } emsg2]} {
+ if {"$errorCode" == "BLIGHT USER"} {
+ usererror "$emsg2 Therefore you can't use your\
+ channel manager privilege. $emsg"
+ } else {
+ error $error $errorInfo $errorCode
+ }
+ }
+ } else {
+ error $emsg $errorInfo $errorCode
}
- }
- if {"$ui" == "none"} {
- error "Sorry, I've not been authorised to invite people to $target."
}
if {![ta_anymore]} {
- error "You have to say who to invite."
+ usererror "You have to say who to invite."
}
set invitees {}
while {[ta_anymore]} {
if {![info exists target]} { error "privately, you must specify a channel" }
set procname channel/$subcmd
if {"$subcmd" != "show"} {
- if {[catch { info body $procname }]} { error "unknown channel setting $subcmd" }
+ if {[catch { info body $procname }]} {
+ usererror "unknown channel setting $subcmd."
+ }
prefix_nick
- nick_securitycheck 1
if {[chandb_exists $target]} {
- channel_securitycheck $target $n
+ channel_securitycheck $target
} else {
+ nick_securitycheck 1
upvar #0 chan_initialop([irctolower $target]) io
upvar #0 nick_unique([irctolower $n]) u
- if {![info exists io]} { error "$target is not a managed channel" }
- if {"$io" != "$u"} { error "you are not the interim manager of $target" }
- if {"$subcmd" != "manager"} { error "use `channel manager' first" }
+ if {![info exists io]} {
+ usererror "$target is not a managed channel."
+ }
+ if {"$io" != "$u"} {
+ usererror "You are not the interim manager of $target."
+ }
+ if {"$subcmd" != "manager"} {
+ usererror "Please use `channel manager' first."
+ }
}
}
channel/$subcmd
ta_nomore
set now [clock seconds]
if {"$nlower" == "[irctolower $nick]"} {
- error "I am not self-aware."
+ usererror "I am not self-aware."
} elseif {![info exists lastseen($nlower)]} {
set rstr "I've never seen $ncase."
} else {