chiark
/
gitweb
/
~ijackson
/
ircbot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
handle eof on stdin
[ircbot.git]
/
irccore.tcl
diff --git
a/irccore.tcl
b/irccore.tcl
index 22544dff7ecf9bc018828af5de2ad4439f8b7d1d..545446cac3e464c1dd99a4c26d5ca64dc59983e3 100644
(file)
--- a/
irccore.tcl
+++ b/
irccore.tcl
@@
-5,6
+5,7
@@
proc defset {varname val} {
# must set host
defset port 6667
# must set host
defset port 6667
+defset socketargs {}
defset nick testbot
defset ident blight
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 {data} {
puts $data
}
+
+proc log_intern {what data} {
+ puts "[clock seconds] ++ $what $data"
+}
proc logerror {data} {
log $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
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 {}
}
} else {
set prefix {}
@@
-197,7
+202,7
@@
proc onread {args} {
log "junk at end: $org"
return
}
log "junk at end: $org"
return
}
- if {
"$command" == "PRIVMSG"
&& \
+ if {
![string compare $command "PRIVMSG"]
&& \
[privmsg_unlogged $prefix [ischan [lindex $params 0]] $params]} {
return
}
[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} {
proc catch_logged {body} {
+ global errorInfo
if {[catch { uplevel 1 $body } emsg]} {
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" }
}
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]
}
proc ischan {dest} {
return [regexp {^[&#+!]} $dest]
}
@@
-249,6
+269,10
@@
proc irctolower {v} {
return [string tolower $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" }
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
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" {} {}
}
}
error "from myself" {} {}
}
}