set host chiark
set port 6667
if {![info exists nick]} { set nick Blight }
+if {![info exists ownfullname]} { set ownfullname "here to Help" }
+set ownmailaddr blight@chiark.greenend.org.uk
+
+if {![info exists globalsecret]} {
+ set gsfile [open /dev/urandom r]
+ fconfigure $gsfile -translation binary
+ set globalsecret [read $gsfile 32]
+ binary scan $globalsecret H* globalsecret
+ close $gsfile
+ unset gsfile
+}
proc sendout {command args} {
global sock
global sock
if {[gets $sock line] == -1} { set terminate 1; return }
-binary scan $line H* inhex; puts >$inhex<
regsub -all "\[^ -\176\240-\376\]" $line ? line
set org $line
if {[regexp -nocase {^:([^ ]+) (.*)} $line dummy prefix remain]} {
proc ucmdr {priv pub args} {
return -code return [concat [list $priv $pub] $args]
}
-
-def_ucmd help {
- ta_nomore
+
+proc ucmd_sendhelp {} {
ucmdr \
{Commands currently understood:
-help get this list of commands
-seen <nick> ask after someone (I'll tell them you asked)
-summon <username> invite a logged-on user onto IRC} {}
+ help get this list of commands
+ seen <nick> ask after someone (I'll tell them you asked)
+ summon <username> invite a logged-on user onto IRC
+Send commands to be by /msg, or say them in channel with ! in front.} {}
}
+def_ucmd help { ta_nomore; ucmd_sendhelp }
+
+def_ucmd ? { ta_nomore; ucmd_sendhelp }
+
proc manyset {list args} {
foreach val $list var $args {
upvar 1 $var my
error $rv
}
if {[regexp {^problem (.*)} $rv dummy problem]} {
- ucmdr {} "$target $problem."
+ ucmdr {} "The user `$target' $problem."
} elseif {[regexp {^ok ([^ ]+) ([0-9]+)$} $rv dummy tty idlesince]} {
set idletime [expr {$now - $idlesince}]
set ls $now
}
}
+proc userdb_exists {n} {
+
+ binary scan [irctolower $n] H* nhex
+ return [file exists users/$nhex]
+}
+
+proc md5sum {value} { exec md5sum << $value }
+
+# proc userdb_store {n args} { }
+
+def_ucmd newuser {
+ global ownmailaddr ownfullname nick globalsecret
+ prefix_nick
+ if {[ischan $dest]} {
+ error "You must register privately."
+ }
+ if {[userdb_exists $n]} {
+ error "You (or someone else) have already registered the nick $n."
+ }
+ set ownermail [ta_word]
+
+ set now [clock seconds]
+ set small 100000
+ set mult 6
+ set ksecs [expr {$now / $small}]
+ set kmod [expr {$ksecs % $mult}]
+
+ if {[string length $text]} {
+ if {![regexp -nocase {^([0-5])[0-9a-f]+\s+(.*)$} $text pass_sup kmod text]} {
+ error ...
+ }
+ set ksecs [expr {(($ksecs - $kmod) / $mult) * 6 + $kmod}]
+ }
+ set hash [md5sum "$ksecs\n$ownermail\n"]
+ set passwd "$kmod[string range $hash 0 15]"
+
+ if {[info exists pass_sup]} {
+ if {"$passwd" != "$pass_sup"} {
+ error "Incorrect registration password."
+ }
+ userdb_store $n \
+
+ sendaction $n "ignores your ok"
+ } else {
+ set mailmsg \
+"From: $ownmailaddr ($ownfullname)
+Subject: $nick registration
+To: $ownermail
+
+Thanks for starting the registration process. You must now issue the
+`newuser' command with both the same email address again, and your
+registration password from this mail.
+
+Nick: $n
+Email address: $ownermail
+Password: $passwd
+
+This password will be valid for approximately the next 600ks
+(or until I am restarted).
+
+For example,
+ /msg $nick newuser $ownermail $passwd"
+ exec /usr/sbin/sendmail -odi -oee -oi -t << $mailmsg
+ sendaction $n "has sent your registration mail to $ownermail."
+ }
+}
+
def_ucmd seen {
global lastseen nick
prefix_nick
#fconfigure $sock -translation binary
fconfigure $sock -translation crlf
- sendout USER guest 0 * "chiark testing bot"
+ sendout USER guest 0 * $ownfullname
sendout NICK $nick
fileevent $sock readable onread
}