chiark / gitweb /
yoweb-scrape: apply rate limiter per http:// site
[ypp-sc-tools.db-live.git] / ypp-chatlog-alerter
index 6df461bec6d4e37cb96f0fdd0e0c7b320433dad4..05a9c2001c7e516b8a8292db51ac0d11313c9194 100755 (executable)
@@ -106,6 +106,7 @@ proc for_lw {args} {
 
 set e_life 120
 set tint_switch 90
+set bell_again 60
 set tint_switched [expr { exp( -($tint_switch+0.0) / $e_life ) }]
 
 proc retint {} {
@@ -121,8 +122,10 @@ proc retint {} {
            lappend newprtimes {}
        } elseif {$age < 60} {
            lappend newprtimes [format "%3ds" $age]
-       } else {
+       } elseif {$age < 3600} {
            lappend newprtimes [format "%3dm" [expr {$age/60}]]
+       } else {
+           lappend newprtimes [format "%3dh" [expr {$age/3600}]]
        }
        set latest [expr { $time > $latest ? $time : $latest }]
        set tint [expr { exp( (-($age >= 0 ? $age : 0) + 0.0) / $e_life ) }]
@@ -274,10 +277,15 @@ proc process-line {l} {
 
 proc message {pirate msg} {
     global times pirates messages height
-    global lw_ls lw_ws
+    global lw_ls lw_ws bell_again
     
     set ix [lsearch -exact $pirates $pirate]
     set now [clock seconds]
+    
+    if {$bell_again > -2 &&
+       ($ix<0 || [lindex $times $ix] < $now-$bell_again)} {
+       bell -nice
+    }
     if {$ix < 0} {
        set cix 0
        set oldest $now
@@ -311,6 +319,8 @@ proc parseargs {} {
     foreach arg $argv {
        if {![string compare $arg --test-tints]} {
            showtints
+       } elseif {![string compare $arg --no-bell]} {
+           set bell_again -2
        } else {
            error "unknown option $arg"
        }