X-Git-Url: https://git.distorted.org.uk/~mdw/ircbot/blobdiff_plain/52c775e8253515d082594baa52b11a3a1e78d760..6cc2e28aa013b8a45600b3899eb04c5c5ba31d53:/bot.tcl diff --git a/bot.tcl b/bot.tcl index 105a0a2..87f19d4 100755 --- a/bot.tcl +++ b/bot.tcl @@ -151,7 +151,7 @@ proc tell_event {nl event} { # later. We also support the psuedo-event `none'. The del msg # and new msg events are handled by the command procedures, not here. global calling_nick - if {[info exists calling_nick] { set save $calling_nick } + if {[info exists calling_nick]} { set save $calling_nick } switch -exact $event { none { } talk { @@ -194,13 +194,19 @@ proc tell_getcstate {} { } proc tell_event_core {nl event} { + catch_logged { tell_event_core1 $nl $event } +} + +proc tell_event_core1 {nl event} { # event is `talk', `act', `ident' or `msgsarrive' # When user talks we actually get talk now and act later global calling_nick set calling_nick $nl - set iml [msgdb_get $nl inbound] + set iml [msgsdb_get $nl inbound] if {![llength $iml]} return + set now [clock seconds] + tell_getcstate set ago [expr {$now - $telling_when}] # Now we have the components of a telling state @@ -240,7 +246,7 @@ proc tell_event_core {nl event} { append evstate [string range $stt 0 0] append evstate [string range $event 0 0] - manyset [tell_effective_sec $n] sec secwhen + manyset [nickdb_get_sec_effective $nl] sec secwhen switch -exact $sec { insecure { append evstate ii } secure { append evstate [expr {$ago<$secwhen ? "sl" : "ss"}] } @@ -248,13 +254,13 @@ proc tell_event_core {nl event} { } upvar #0 nick_username($nl) nu - if {[info exists nu] && "$nu" == "[nickdb_get $nl username]"} { + if {[info exists nu] && "$nu" == "[nickdb_get_username $nl]"} { append evstate i } else { append evstate u } - manyset [nickdb_set $n tellrel] rel relint relwithin + manyset [nickdb_get $nl tellrel] rel relint relwithin switch -exact $rel { unreliable { append evstate uu } remind { append evstate [expr { @@ -264,6 +270,7 @@ proc tell_event_core {nl event} { default { append evstate "#$rel#" } } + log "tell_event_core1 core evstate=$evstate (ago=$ago)" switch -glob $evstate { pt???rv { # consider delivered: @@ -273,7 +280,7 @@ proc tell_event_core {nl event} { } pm????? { # oops, messages passed are now out of date - catch { unset telling } + catch_restoreei { unset telling } return } ?m????? { @@ -287,10 +294,10 @@ proc tell_event_core {nl event} { } ni????? - naii??? - nas?i?? - mi????? - pa????l { # pass and then stuff - if {[length $iml] == 3} { + if {[llength $iml] == 3} { manyset $iml sender sentwhen msg sendprivmsg $nl \ - "$sender asked me [showintervalsecs [expr {$now-$sentwhen}] 0]\ + "$sender asked me [showinterval [expr {$now-$sentwhen}]]\ to tell you: $msg" } else { sendprivmsg $nl \ @@ -309,11 +316,11 @@ proc tell_event_core {nl event} { set stt passed } nas?u?? { - sendprivmsg $nl {You have messages (so identify yourself please).}] + sendprivmsg $nl {You have messages (so identify yourself please).} set stt mentioned } masl??? { - sendprivmsg $nl {Don't forget about your messages.}] + sendprivmsg $nl {Don't forget about your messages.} } pi????? { return @@ -327,7 +334,7 @@ proc tell_event_core {nl event} { } } if {![info exists u]} { - catch { unset telling } + catch_restoreei { unset telling } } else { set telling [list $u $stt $now] } @@ -436,7 +443,7 @@ proc chanmode_o1 {m g p chan} { set chan_initialop([irctolower $chan]) $u sendprivmsg $n \ "Thanks. You can use `channel manager ...' to register this channel." - if {![nickdb_exists $n] || ![string length [nickdb_get $n username]]} { + if {![string length [nickdb_get_username $n username]]} { sendprivmsg $n \ "(But to do that you must register your nick securely first.)" } @@ -1200,9 +1207,14 @@ def_ucmd channel { channel/$subcmd } -proc tell_effective_sec {n} { +proc nickdb_get_username {n} { + if {![nickdb_exists $n]} { return "" } + return [nickdb_get $n username] +} + +proc nickdb_get_sec_effective {n} { set l [nickdb_get $n tellsec] - set u [nickdb_get $n username] + set u [nickdb_get_username $n] if {"[lindex $l 0]" == "secure" && ![string length $u]} { set l insecure } return $l } @@ -1274,7 +1286,7 @@ def_ucmd delmsg { prefix_nick set nl [irctolower $n] check_notonchan - manyset [tell_effective_sec $n] sec secwhen + manyset [nickdb_get_sec_effective $n] sec secwhen switch -exact $sec { insecure { } refuse - mailto { @@ -1326,7 +1338,7 @@ def_ucmd tell { set ctarget $target if {[info exists nick_case($ltarget)]} { set ctarget $nick_case($ltarget) } - manyset [tell_effective_sec $target] sec mailtoint mailwhy + manyset [nickdb_get_sec_effective $target] sec mailtoint mailwhy manyset [nickdb_get $target tellrel] rel relint relwithin switch -exact $sec { insecure - secure { @@ -1504,7 +1516,7 @@ proc tellme_sec_desc {v n} { return "I'll tell you your messages whenever I see you." } secure { - if {[string length [nickdb_get $n username]]} { + if {[string length [nickdb_get_username $n]]} { return \ "I'll keep the bodies of your messages private until you identify yourself, reminding you every [showintervalsecs $mailtoint 1]." } else { @@ -1530,7 +1542,8 @@ proc tellme_rel_desc {v} { manyset $v rel every within switch -exact $rel { unreliable { - return "As soon as I've told you, I'll forget the message - note that this means messages can get lost !" + return "As soon as I've told you message(s), I'll forget them\ + - note that this means messages can get lost !" } pester { set u {} @@ -1542,7 +1555,8 @@ proc tellme_rel_desc {v} { error "bad tellrel $rel" } } - return "I'll remind you every [showintervalsecs $every 1] until you say delmsg$u." + return "After delivering messages, I'll remind you every\ + [showintervalsecs $every 1] until you say delmsg$u." } def_setting timeformat { @@ -1643,8 +1657,8 @@ def_setting tellme { } mailto { telling_setting_neednomsgs - set u [nickdb_get $n username] - if {[string length $u]} { + + if {[string length [set u [nickdb_get_username $n]]]} { usererror \ "Sorry, you must register securely to have your messages mailed\ (to prevent the use of this feature for spamming). See `help register'." @@ -1746,12 +1760,12 @@ def_ucmd set { } def_ucmd identpass { - set username [ta_word] - set passmd5 [md5sum "[ta_word]\n"] - ta_nomore prefix_nick check_notonchan set luser [irctolower $n] + set username [ta_word] + set passmd5 [md5sum "[ta_word]\n"] + ta_nomore upvar #0 nick_onchans($luser) onchans if {![info exists onchans] || ![llength $onchans]} { ucmdr "You must be on a channel with me to identify yourself." {}