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
telling_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
+ ni????? - naii??? - nas?i?? - mi????? - pa????l {
+ # pass and then stuff
telling_pass $nl
- telling_delete_msgs {} $nl
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 ?"
}
}
-
- # 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} {