return $str
}
-proc telling_event {nl event} {
+proc tell_event {nl event} {
# For `act' we *haven't* yet done the 750ms delay; we implement
# that here. Also, here we turn `talk' into `talk' now and `act'
# later. We also support the psuedo-event `none'. The del msg
switch -exact $event {
none { }
talk {
- telling_event_core $nl talk
- telling_event $nl act
+ tell_event_core $nl talk
+ tell_event $nl act
}
act {
- after 750 [list telling_event_core $nl $event]
+ after 750 [list tell_event_core $nl $event]
}
ident {
- telling_event_core $nl $event
+ tell_event_core $nl $event
}
default {
- error "telling_event $nl $event"
+ error "tell_event $nl $event"
}
}
}
-proc telling_event_core {nl event} {
+proc tell_event_core {nl event} {
# event is `talk', `act' or `ident'
# When user talks we actually get talk now and act later
-FIXME - fix calls to check_telling to telling_event
FIXME - implement all cmds
-FIXME - implement tells_deliver set stt [list $u passed $now]
-FIXME - implement tells_delete catch { unset stt } ?
+FIXME - implement pass stuff set stt [list $u passed $now]
+FIXME - implement tells_delete_msgs catch { unset stt } ?
FIXME - document the extra param to recordlastseen
set iml [msgdb_get $nl inbound]
if {![llength $iml]} return
if {[info exists telling]} {
manyset $telling u_last stt telling_when
- if {"$u_last" != "$u"} { unset telling; unset stt; unset telling_when }
+ if {![info exists u] || "$u_last" != "$u"} {
+ unset telling; unset stt; unset telling_when
+ }
}
if {![info exists stt]} {
set ago [expr {$now - $telling_when}]
# Now we have the components of a telling state
- # u - nick_unique
+ # u - nick_unique (unset if not visible)
# stt - state: norecord, mentioned, passede
# ago - how long ago since we did anything
# evstate is string of letters
# current state
- # n NORECORD
+ # n NORECORD (MESSAGES)
# m MENTIONED
# p PASSED
# event
pt???rv {
# consider delivered:
# (very recently passed, and the user talks)
- telling_delete_msgs {} $nl
+ tell_delete_msgs {} $nl
return
}
- ?t????? {
+ nt????? - mt????? -
+ pt???uu - pt???rs - pt???rl - pt???p? {
# ignore (any other `talk's) - act handles these
return
}
- ni???uu - naii?uu - nas?iuu - mi???uu {
- # pass, but unreliable
- telling_pass $nl
- telling_delete_msgs {} $nl
+ ni????? - naii??? - nas?i?? - mi????? - pa????l {
+ # pass and then stuff
+
+
return
}
- ni????? - naii??? - nas?i?? - mi????? {
- # pass, reliable
- telling_pass $nl
- set stt passed
- }
- UP TO HERE
- FIXME print out state diagram and tick off traces
-
-
-
- set telling [list $u passed
-
- ?iin???? - ?iip?l?? - ?ii????? -
- ?s?n??iv - ?s?m??iv - ?s?p?liv {
- # pass messages
- # (insecure and not passed recently, or just arriving;
- # secure and not passed recently)
- tells_deliver $nl
- }
- ?ssp???? - ???p?s?? - ???p?v?? {
- # ignore
- # (recently mentioned or passed
- # immediate `talk' thing)
- }
- ?s?n???? - ?slm???? - cs?????? {
- # mention messages
- # (secure and not mentioned recently or just arriving,
- # and should not pass)
- sendprivmsg $nl \
- {You have messages (so identify yourself please).}]
- set stt [list $u mentioned $now]
+ nas?u?? {
+ sendprivmsg $nl {You have messages (so identify yourself please).}]
+ set stt mentioned
+ }
+ masl??? {
+ sendprivmsg $nl {Don't forget about your messages.}]
+ }
+ pi????? {
+ return
+ }
+ mass??? - pa????v - pa????s {
+ # too soon
+ return
}
* {
- error "check_telling_core nl=$nl evstate=$evstate ?"
+ error "tell_event_core nl=$nl evstate=$evstate ?"
}
}
-
- # current visibility
- # v Visible
- # h Hidden (invisible, no unique)
- go back to norecord if invisible
-
+ if {![info exists u]} {
+ catch { unset telling }
+ } else {
+ set telling [list $u $stt $now]
+ }
}
proc recordlastseen_n {n how here} {
if {!$here} return
- check_telling $nl [lindex {none act talk} $here]
+ tell_event $nl [lindex {none act talk} $here]
upvar #0 lookedfor($nl) lf
if {[info exists lf]} {
tellsec insecure
tellrel {remind 3600 30}
}
+# also:
+# inbound: concatenation of many sender time_t text
+# outbound: concatenation of many recipient time_t count
+# neither are sorted particularly; only one entry per recipient in
+# output; both sender and recipient are cased
set default_settings_chan {
autojoin 1
upvar #0 nick_username($luser) rec_username
set rec_username $username
ucmdr "Pleased to see you, $username." {}
- telling_event $luser ident
+ tell_event $luser ident
}
def_ucmd summon {