From 49a4dc8f0c0c5749f2a5a04d298ab24a7263808c Mon Sep 17 00:00:00 2001 Message-Id: <49a4dc8f0c0c5749f2a5a04d298ab24a7263808c.1715734626.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 14 Feb 2002 18:14:29 +0000 Subject: [PATCH] Merge up from trunk. cvs up -j branchpoint-2001-10-09-tell -j mergeup-1-2001-10-09-tell Organization: Straylight/Edgeware From: Ian Jackson --- blight.tcl | 1 + bot.tcl | 65 +++++++++++++++++++++++++++++++++++++++++++++------ bridge.tcl | 10 +++++--- helpinfos | 26 ++++++++++++++------- parsecmd.tcl | 2 +- repeatedly.sh | 8 +++++-- test.tcl | 1 + 7 files changed, 91 insertions(+), 22 deletions(-) diff --git a/blight.tcl b/blight.tcl index 6092f9b..a5b4de7 100644 --- a/blight.tcl +++ b/blight.tcl @@ -8,3 +8,4 @@ set ownmailaddr blight@chiark.greenend.org.uk set socketargs {} source bot.tcl +source botpass.tcl diff --git a/bot.tcl b/bot.tcl index ac5714b..b5abdda 100755 --- a/bot.tcl +++ b/bot.tcl @@ -26,22 +26,47 @@ proc showintervalsecs {howlong abbrev} { return [showintervalsecs/[opt timeformat] $howlong $abbrev] } +proc formatsf {pfx value} { + foreach {min format} { 100 %.0f 10 %.1f 0 %.2f} { + set fval [format $format $value] + if {$fval < $min} continue + return [format "$fval${pfx}" $value] + } +} + +proc showintervalsecs/beat {howlong abbrev} { + # We split in two to avoid overflow problems. + if {$howlong < 86 } { + # mB's + set pfx mB + return [format "%.0fmB" [expr {round($howlong * 1.157)*10} ]] + } else { + if {$howlong < 86400 } { + # B's + set pfx B + set value [expr {$howlong / 86.4}] + } else { + # kB's + set pfx kB + set value [expr {$howlong / 86400.0}] + } + } + return [formatsf $pfx $value] +} + proc showintervalsecs/ks {howlong abbrev} { if {$howlong < 1000} { return "${howlong}s" } else { if {$howlong < 1000000} { - set pfx k + set pfx ks set scale 1000 } else { - set pfx M + set pfx Ms set scale 1000000 } set value [expr "$howlong.0 / $scale"] - foreach {min format} {100 %.0f 10 %.1f 1 %.2f} { - if {$value < $min} continue - return [format "$format${pfx}s" $value] - } + return [formatsf $pfx $value] } } @@ -95,10 +120,13 @@ proc parse_interval {specified min} { ks { set u 1000 } m { set u 60 } h { set u 3600 } + mb { set u 0.0864 } + b { set u 86.4 } + kb { set u 86400 } default { error "unknown unit of time $unit" } } if {$value > 86400*21/$u} { error "interval too large" } - set result [expr {$value*$u}] + set result [expr {round($value*$u)}] if {$result < $min} { error "interval too small (<${min}s)" } return $result } @@ -1539,6 +1567,7 @@ proc timeformat_desc {tf} { switch -exact $tf { ks { return "Times will be displayed in seconds or kiloseconds." } hms { return "Times will be displayed in hours, minutes, etc." } + beat { return "Times will be displayed in beats (1000B = 1d)." } default { error "invalid timeformat: $v" } } } @@ -1831,9 +1860,27 @@ def_ucmd identpass { ucmdr "Pleased to see you, $username." {} } +def_ucmd kill { + global nick + prefix_nick + set target [ta_nick] + if {![nickdb_exists $target]} { error "$target is not a registered nick." } + set wantu [nickdb_get $target username] + if {![string length $wantu]} { error "$target is insecurely registred." } + upvar #0 nick_username([irctolower $n]) nu + if {![info exists nu]} { error "You must identify yourself first." } + if {"$wantu" != "$nu"} { + error "You are the wrong user, $nu - $target belongs to $wantu." + } + set reason "at request of user $nu" + if {[ta_anymore]} { append reason "; $text" } + sendout KILL $target $reason +} + def_ucmd summon { set target [ta_word] ta_nomore + # fixme would be nice if the rest of the text was passed on instead check_username $target prefix_nick @@ -2005,6 +2052,10 @@ proc ensure_globalsecret {} { } proc connected {} { + global operuserpass + if {[info exists operuserpass]} { + eval sendout OPER $operuserpass + } foreach chan [chandb_list] { if {[chandb_get $chan autojoin]} { dojoin $chan } } diff --git a/bridge.tcl b/bridge.tcl index 1282aed..64d2d5e 100755 --- a/bridge.tcl +++ b/bridge.tcl @@ -152,6 +152,10 @@ def_ucmd who { return [list $o] } -loadhelp -ensure_connecting -foreach botid $bots { bnbot_ensure_connecting $botid } +if {[catch { + loadhelp + ensure_connecting + foreach botid $bots { bnbot_ensure_connecting $botid } +} emsg]} { + fail "startup: $emsg" +} diff --git a/helpinfos b/helpinfos index 2359e88..9d920d2 100644 --- a/helpinfos +++ b/helpinfos @@ -10,11 +10,11 @@ General commands: Registration and user settings: !help [||] !register [insecure|delete] !seen !set [ []] who [] !summon (See `help !identify', `help !blight-id') - !invite [] ... Channel settings (see `help channel'): - !op [] !channel [] [....] - !leave [] Additional help topics: - !ping [] !identify !identpass !invite !blight-id - !tell + !invite [] ... For channel managers (see `help channel'): + !leave [] !channel [] [....] + !ping [] !op [] + !tell Additional help topics: + !kill [] !identify !identpass !invite !blight-id Send commands to me by /msg, or say them in channel with \! in front. To get me on a channel, invite me. To become channel manager, op me. @@ -190,6 +190,12 @@ invite ... privately This can be disabled for managed channels - see `help !userinvite'. To get me to join a channel, just invite me to it. +:kill +kill [] + Asks me to throw that client off IRC completely, using my IRC + Operator privilege. You must have identified yourself as the user + to whom the nick is registered. (See `help !register'.) + :register register register your nick (or make it secure) register delete delete your nick registration @@ -204,13 +210,15 @@ register insecure register your nick insecurely set show your current settings set