}
proc onread {args} {
- global sock nick
+ global sock nick calling_nick
if {[gets $sock line] == -1} { set terminate 1; return }
regsub -all "\[^ -\176\240-\376\]" $line ? line
set line $remain
if {[regexp {^([^!]+)!} $prefix dummy maybenick] &&
"[irctolower $maybenick]" == "[irctolower $nick]"} return
+ set calling_nick $maybenick
} else {
set prefix {}
+ catch { unset calling_nick }
}
if {![string length $line]} { return }
if {![regexp -nocase {^([0-9a-z]+) *(.*)} $line dummy command line]} {
}
proc showintervalsecs {howlong} {
+ return [showintervalsecs/[opt timeformat] $howlong]
+}
+
+proc showintervalsecs/ks {howlong} {
if {$howlong < 1000} {
return "${howlong}s"
} else {
}
}
+proc format_qty {qty unit} {
+ set o $qty
+ append o " "
+ append o $unit
+ if {$qty != 1} { append o s }
+ return $o
+}
+
+proc showintervalsecs/hms {qty} {
+ set ul {second 60 minute 60 hour 24 day 7 week}
+ set remainv 0
+ while {[llength $ul] > 1 && $qty >= [set uv [lindex $ul 1]]} {
+ set remainu [lindex $ul 0]
+ set remainv [expr {$qty % $uv}]
+ set qty [expr {($qty-$remainv)/$uv}]
+ set ul [lreplace $ul 0 1]
+ }
+ set o [format_qty $qty [lindex $ul 0]]
+ if {$remainv} {
+ append o " "
+ append o [format_qty $remainv $remainu]
+ }
+ return $o
+}
+
proc showinterval {howlong} {
if {$howlong <= 0} {
return {just now}
upvar #0 nick_onchans($user) oc
set lc [irctolower $chan]
set oc [grep tc {"$tc" != "$lc"} $oc]
+ if {![llength $oc]} { nick_forget $user }
}
proc msg_KICK {p c chans users comment} {
catch { unset help_topics }
set f [open helpinfos r]
- set lno 0
- while {[gets $f l] >= 0} {
- incr lno
- if {[regexp {^#.*} $l]} {
- } elseif {[regexp {^ *$} $l]} {
- if {[info exists topic]} {
- set help_topics($topic) [join $lines "\n"]
- unset topic
- unset lines
+ try_except_finally {
+ set lno 0
+ while {[gets $f l] >= 0} {
+ incr lno
+ if {[regexp {^#.*} $l]} {
+ } elseif {[regexp {^ *$} $l]} {
+ if {[info exists topic]} {
+ set help_topics($topic) [join $lines "\n"]
+ unset topic
+ unset lines
+ }
+ } elseif {[regexp {^!([-+._0-9a-z]*)$} $l dummy newtopic]} {
+ if {[info exists topic]} {
+ error "help $newtopic while in $topic"
+ }
+ set topic $newtopic
+ set lines {}
+ } elseif {[regexp {^[^!#]} $l]} {
+ set topic
+ lappend lines [string trimright $l]
+ } else {
+ error "eh ? $lno: $l"
}
- } elseif {[regexp {^!([-+._0-9a-z]*)$} $l dummy newtopic]} {
- if {[info exists topic]} { error "help $newtopic while in $topic" }
- set topic $newtopic
- set lines {}
- } elseif {[regexp {^[^!#]} $l]} {
- set topic
- lappend lines [string trimright $l]
- } else {
- error "eh ? $lno: $l"
}
+ if {[info exists topic]} { error "unfinished topic $topic" }
+ } {} {
+ close $f
}
- if {[info exists topic]} { error "unfinished topic $topic" }
}
def_ucmd help {
set nl [irctolower $n]
upvar #0 nickdb($nl) ndbe
binary scan $nl H* nh
- set nfn users/$nh
+ set nfn users/n$nh
if {![info exists ndbe] && [file exists $nfn]} {
- set f [file open $nfn r]
+ set f [open $nfn r]
try_except_finally { set newval [read $f] } {} { close $f }
if {[llength $newval] % 2} { error "invalid length" }
set ndbe $newval
close $f
file rename -force $nfn.new $nfn
} {
- catch { close $f }
} {
+ catch { close $f }
}
set ndbe $newval
}
+proc opt {key} {
+ global calling_nick
+ if {[info exists calling_nick]} { set n $calling_nick } { set n {} }
+ return [nickdb_opt $n $key]
+}
+
def_nickdb opt {n key} {
global default_settings
if {[info exists ndbe]} {
prefix_nick
check_notonchan
if {![nickdb_exists $n]} {
- ucmdr {} "You are unknown to me and so have no settings."
+ ucmdr {} "You are unknown to me and so have no settings. (Use `register'.)"
}
if {![ta_anymore]} {
set ol {}
def_ucmd identpass {
set username [ta_word]
- set passmd5 [md5sum [ta_word]]
+ set passmd5 [md5sum "[ta_word]\n"]
ta_nomore
prefix_nick
check_notonchan