X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=blobdiff_plain;f=irccore.tcl;h=545446cac3e464c1dd99a4c26d5ca64dc59983e3;hb=dbd2dc8827a3aac27665dc40159cfa1a20579896;hp=22544dff7ecf9bc018828af5de2ad4439f8b7d1d;hpb=a40710986fc73c5c8bfb1b8d3f9cd1a31960f2e8;p=ircbot.git diff --git a/irccore.tcl b/irccore.tcl index 22544df..545446c 100644 --- a/irccore.tcl +++ b/irccore.tcl @@ -5,6 +5,7 @@ proc defset {varname val} { # must set host defset port 6667 +defset socketargs {} defset nick testbot defset ident blight @@ -140,6 +141,10 @@ proc sendout {command args} { eval sendout_priority [list 0 $command] $args } proc log {data} { puts $data } + +proc log_intern {what data} { + puts "[clock seconds] ++ $what $data" +} proc logerror {data} { log $data @@ -176,7 +181,7 @@ proc onread {args} { set line $remain if {[regexp {^([^!]+)!} $prefix dummy maybenick]} { set calling_nick $maybenick - if {"[irctolower $maybenick]" == "[irctolower $nick]"} return + if {![ircnick_compare $maybenick $nick]} return } } else { set prefix {} @@ -197,7 +202,7 @@ proc onread {args} { log "junk at end: $org" return } - if {"$command" == "PRIVMSG" && \ + if {![string compare $command "PRIVMSG"] && \ [privmsg_unlogged $prefix [ischan [lindex $params 0]] $params]} { return } @@ -212,9 +217,17 @@ proc onread {args} { } } +proc catch_restoreei {body} { + global errorInfo errorCode + set l [list $errorInfo $errorCode] + catch { uplevel 1 $body } + manyset $l errorInfo errorCode +} + proc catch_logged {body} { + global errorInfo if {[catch { uplevel 1 $body } emsg]} { - logerror "error (catch_logged): $emsg" + logerror "error (catch_logged): $emsg\n $errorInfo" } } @@ -235,6 +248,13 @@ proc check_nick {n} { if {[string length $n] > 18} { error "nick too long" } } +proc check_chan {n} { + if {![regsub {^\#} $n {} n]} { error "bad chan start" } + if {[regexp -nocase {[^][\\`_^{|}a-z0-9-]} $n]} { error "bad char in chan" } + if {[regexp {^[-0-9]} $n]} { error "bad chan name start" } + if {[string length $n] > 18} { error "chan name too long" } +} + proc ischan {dest} { return [regexp {^[&#+!]} $dest] } @@ -249,6 +269,10 @@ proc irctolower {v} { return [string tolower $v] } +proc ircnick_compare {a b} { + return [string compare [irctolower $a] [irctolower $b]] +} + proc prefix_none {} { upvar 1 p p if {[string length $p]} { error "prefix specified" } @@ -260,7 +284,7 @@ proc prefix_nick {} { upvar 1 n n if {![regexp {^([^!]+)!} $p dummy n]} { error "not from nick" } check_nick $n - if {"[irctolower $n]" == "[irctolower $nick]"} { + if {![ircnick_compare $n $nick]} { error "from myself" {} {} } }