return [showintervalsecs/[opt timeformat] $howlong $abbrev]
}
+proc formatsf {pfx value} {
+ foreach {min format} { 100 %.0f 10 %.1f 0 %.2f} {
+ set fval [format $format $value]
+ if {$fval < $min} continue
+ return [format "$fval${pfx}" $value]
+ }
+}
+
+proc showintervalsecs/beat {howlong abbrev} {
+ # We split in two to avoid overflow problems.
+ if {$howlong < 86 } {
+ # mB's
+ set pfx mB
+ return [format "%.0fmB" [expr {round($howlong * 1.157)*10} ]]
+ } else {
+ if {$howlong < 86400 } {
+ # B's
+ set pfx B
+ set value [expr {$howlong / 86.4}]
+ } else {
+ # kB's
+ set pfx kB
+ set value [expr {$howlong / 86400.0}]
+ }
+ }
+ return [formatsf $pfx $value]
+}
+
proc showintervalsecs/ks {howlong abbrev} {
if {$howlong < 1000} {
return "${howlong}s"
} else {
if {$howlong < 1000000} {
- set pfx k
+ set pfx ks
set scale 1000
} else {
- set pfx M
+ set pfx Ms
set scale 1000000
}
set value [expr "$howlong.0 / $scale"]
- foreach {min format} {100 %.0f 10 %.1f 1 %.2f} {
- if {$value < $min} continue
- return [format "$format${pfx}s" $value]
- }
+ return [formatsf $pfx $value]
}
}
ks { set u 1000 }
m { set u 60 }
h { set u 3600 }
+ mb { set u 0.0864 }
+ b { set u 86.4 }
+ kb { set u 86400 }
default { error "unknown unit of time $unit" }
}
if {$value > 86400*21/$u} { error "interval too large" }
- set result [expr {$value*$u}]
+ set result [expr {round($value*$u)}]
if {$result < $min} { error "interval too small (<${min}s)" }
return $result
}
pt???rv {
# consider delivered:
# (very recently passed, and the user talks)
- tell_delete_msgs {} $nl
+ set ndel [tell_delete_msgs {} $nl]
+ sendprivmsg $nl \
+ "I'm assuming you got the $ndel message(s) I just passed on."
return delivered
}
pm????? {
return ignoretalk
}
ui????? -
- uaii?uu - uaii??l - uas?i?l -
+ uaii?uu - uaii??l - uas?iuu - uas?i?l -
mi????? - pa????l -
?Tii??? - ?Ts?i?? {
# pass and then stuff
}
set invitees {}
while {[ta_anymore]} {
- set invitee [ta_word]
- check_nick $invitee
+ set invitee [ta_nick]
lappend invitees $invitee
}
foreach invitee $invitees {
}
proc tell_peernicks {text} {
+ global errorInfo errorCode
set text [irctolower [string trim $text]]
set senders [split $text " "]
foreach sender $senders {
if {[catch { check_nick $sender } emsg]} {
- error "invalid sender nick `$sender': $emsg" $errorInfo $errorCode
+ error "invalid nick `$sender': $emsg" $errorInfo $errorCode
}
}
return $senders
ucmdr "Removed $ndel as yet undelivered message(s)." {}
}
+def_ucmd_alias delmsgs delmsg
def_ucmd delmsg {
global errorInfo errorCode
prefix_nick
error "delmsg sec $sec"
}
}
+ if {![llength [msgsdb_get $n inbound]]} {
+ ucmdr "No incoming messages to delete." {}
+ }
tell_getcstate
+ if {![info exists u]} {
+ usererror \
+ "I can't delete your messages unless I can see you on a channel with me.\
+ Otherwise I might delete a message I hadn't told you about yet."
+ }
if {"$stt" != "passed"} {
+ set telling [list $u undelivered 0]
usererror \
- "There are message(s) you've not yet seen; I'll deliver them to you now.\
+ "There are message(s) you may not yet have seen;\
+ I'll deliver them to you now.\
If you actually want to delete them, just tell me `delmsg' again."
}
set senders [tell_peernicks $text]
if {!$ndel} {
if {[llength $senders]} {
ucmdr "No relevant incoming messages to delete." {}
- } else {
- ucmdr "No incoming messages to delete." {}
}
}
switch -exact [llength $senders] {
1 { ucmdr {} {} "deletes your $ndel message(s) from $senders." }
default {
ucmdr {} {} "deletes your $ndel message(s) from\
- [lreplace $senders end end] and [lindex $senders end]."
+ [lreplace $senders end end] and/or [lindex $senders end]."
}
}
}
prefix_nick
ta_nomore
check_notonchan
+ manyset [msgsdb_get $n tellsec] sec
+ switch -exact $sec {
+ refuse { ucmdr "But, you asked me to refuse messages for you !" {} }
+ mailto { ucmdr "But, you asked me to mail your messages to you !" {} }
+ }
switch -exact [tell_event [irctolower $n] tellme] {
ERROR - INVALID { ucmdr {} {is ill. Help!} }
nomsgs { ucmdr {You have no messages.} {} }
global nick_case ownmailaddr ownfullname
prefix_nick
- set target [ta_word]
+ set target [ta_nick]
if {![string length $text]} { error "tell them what?" }
if {[string length $text] > 400} { error "message too long" }
def_ucmd who {
if {[ta_anymore]} {
- set target [ta_word]; ta_nomore
+ set target [ta_nick]; ta_nomore
set myself 1
} else {
prefix_nick
switch -exact $tf {
ks { return "Times will be displayed in seconds or kiloseconds." }
hms { return "Times will be displayed in hours, minutes, etc." }
+ beat { return "Times will be displayed in beats (1000B = 1d)." }
default { error "invalid timeformat: $v" }
}
}
}
}
-proc tellme_rel_desc {v} {
+proc tellme_rel_desc {v n} {
manyset $v rel every within
switch -exact $rel {
unreliable {
proc tellme_setting_neednomsgs {} {
uplevel 1 {
if {[llength [msgsdb_get $n inbound]]} {
- usererror "You must delete the messages you have, first."
+ usererror "You must delete the incoming messages you have, first."
}
}
}
manyset $secv sec
switch -exact $sec {
insecure - secure {
- set mr [tellme_rel_desc [nickdb_get $n tellrel]]
+ set mr [tellme_rel_desc [nickdb_get $n tellrel] $n]
return "$ms $mr"
}
refuse - mailto {
}
} {
set setting [string tolower [ta_word]]
+ set nl [irctolower $n]
switch -exact $setting {
insecure {
tellme_setting_sec_simple
set v [list secure $every]
}
refuse {
- telling_setting_neednomsgs
- telling_setting_sec_simple
+ tellme_setting_neednomsgs
+ tellme_setting_sec_simple
}
mailto {
- telling_setting_neednomsgs
+ tellme_setting_neednomsgs
- if {[string length [set u [nickdb_get_username $n]]]} {
+ upvar #0 nick_username($nl) nu
+ if {!([info exists nu] && [string length $nu])} {
usererror \
"Sorry, you must register securely to have your messages mailed\
(to prevent the use of this feature for spamming). See `help register'."
}
set sr sec
- set v [list mailto [ta_word] $u]
+ set v [list mailto [ta_word] $nu]
}
unreliable - pester - remind {
manyset [nickdb_get $n tellsec] sec
set sr rel
set v $setting
if {"$setting" != "unreliable"} {
- set every [parse_interval_optional 300 3600]
+ set every [ta_interval_optional 300 3600]
lappend v $every
}
if {"$setting" == "remind"} {
}
}
nickdb_set $n tell$sr $v
- ucmdr [tellme_${sr}_desc $v] {}
+ upvar #0 nick_telling($nl) telling
+ catch { unset telling }
+ ucmdr [tellme_${sr}_desc $v $n] {}
}
proc lnick_checktold {luser} {
set ml [msgsdb_get $luser outbound]
if {![llength $ml]} return
set is1 [expr {[llength $ml]==3}]
- set m1 "FYI, I haven't yet passed on your"
+ set m1 "FYI, I haven't yet delivered your"
set ol {}
set now [clock seconds]
while {[llength $ml]} {
irc-identpass $n
upvar #0 nick_username($luser) rec_username
set rec_username $username
- tell_event $luser ident
+ after 50 [list tell_event $luser ident]
ucmdr "Pleased to see you, $username." {}
}
+def_ucmd kill {
+ global nick
+ prefix_nick
+ set target [ta_nick]
+ if {![nickdb_exists $target]} { error "$target is not a registered nick." }
+ set wantu [nickdb_get $target username]
+ if {![string length $wantu]} { error "$target is insecurely registred." }
+ upvar #0 nick_username([irctolower $n]) nu
+ if {![info exists nu]} { error "You must identify yourself first." }
+ if {"$wantu" != "$nu"} {
+ error "You are the wrong user, $nu - $target belongs to $wantu."
+ }
+ set reason "at request of user $nu"
+ if {[ta_anymore]} { append reason "; $text" }
+ sendout KILL $target $reason
+}
+
def_ucmd summon {
set target [ta_word]
ta_nomore
+ # fixme would be nice if the rest of the text was passed on instead
check_username $target
prefix_nick
}
proc connected {} {
+ global operuserpass
+ if {[info exists operuserpass]} {
+ eval sendout OPER $operuserpass
+ }
foreach chan [chandb_list] {
if {[chandb_get $chan autojoin]} { dojoin $chan }
}