chiark
/
gitweb
/
~ijackson
/
ircbot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rename .cvsignore to .gitignore
[ircbot.git]
/
bot.tcl
diff --git
a/bot.tcl
b/bot.tcl
index 0f75e1b64a8389151af7343f661a1fd0b9e29f8e..d89e18e76e5263d60b6b8d090b60e8c35037b5b3 100755
(executable)
--- a/
bot.tcl
+++ b/
bot.tcl
@@
-5,6
+5,7
@@
set helpfile helpinfos
source irccore.tcl
source parsecmd.tcl
source stdhelp.tcl
source irccore.tcl
source parsecmd.tcl
source stdhelp.tcl
+source userv.tcl
defset marktime_min 300
defset marktime_join_startdelay 5000
defset marktime_min 300
defset marktime_join_startdelay 5000
@@
-233,7
+234,9
@@
proc tell_event_core {nl event} {
log_intern "tell event error" "$emsg >$errorInfo<"
set emsg ERROR
} else {
log_intern "tell event error" "$emsg >$errorInfo<"
set emsg ERROR
} else {
- log_intern "tell event" "done $tell_event_teventi $emsg"
+ if {"$emsg" != "nomsgs"} {
+ log_intern "tell event" "done $tell_event_teventi $emsg"
+ }
}
return $emsg
}
}
return $emsg
}
@@
-296,7
+299,7
@@
proc tell_event_core1 {nl event} {
}
upvar #0 nick_username($nl) nu
}
upvar #0 nick_username($nl) nu
- if {[info exists nu] &&
"$nu" == "[nickdb_get_username $nl]"
} {
+ if {[info exists nu] &&
![string compare $nu [nickdb_get_username $nl]]
} {
append evstate i
} else {
append evstate u
append evstate i
} else {
append evstate u
@@
-357,7
+360,7
@@
proc tell_event_core1 {nl event} {
" [showintervalsecs [expr {$now-$sentwhen}] 1] <$sender> $msg"
}
}
" [showintervalsecs [expr {$now-$sentwhen}] 1] <$sender> $msg"
}
}
- if {
"$rel" == "unreliable"
} {
+ if {
![string compare $rel "unreliable"]
} {
tell_delete_msgs {} $nl
return toldunreliable
}
tell_delete_msgs {} $nl
return toldunreliable
}
@@
-375,7
+378,7
@@
proc tell_event_core1 {nl event} {
}
masl??? {
sendprivmsg $nl {Don't forget about your messages.}
}
masl??? {
sendprivmsg $nl {Don't forget about your messages.}
-
return
remind
+
set re
remind
}
pi????? {
return ignorepi
}
pi????? {
return ignorepi
@@
-491,7
+494,7
@@
proc chanmode_o1 {m g p chan} {
prefix_nick
set who [chanmode_arg]
recordlastseen_n $n "being nice to $who" 1
prefix_nick
set who [chanmode_arg]
recordlastseen_n $n "being nice to $who" 1
- if {
"[irctolower $who]" == "[irctolower $nick]"
} {
+ if {
![ircnick_compare $who $nick]
} {
set nlower [irctolower $n]
upvar #0 nick_unique($nlower) u
if {[chandb_exists $chan]} {
set nlower [irctolower $n]
upvar #0 nick_unique($nlower) u
if {[chandb_exists $chan]} {
@@
-515,7
+518,7
@@
proc chanmode_o0 {m g p chan} {
prefix_nick
set who [chanmode_arg]
recordlastseen_p $p "being mean to $who" 1
prefix_nick
set who [chanmode_arg]
recordlastseen_p $p "being mean to $who" 1
- if {
"[irctolower $who]" == "[irctolower $nick]"
} {
+ if {
![ircnick_compare $who $nick]
} {
set chandeop($chan) [list [clock seconds] $p]
}
}
set chandeop($chan) [list [clock seconds] $p]
}
}
@@
-540,6
+543,7
@@
proc msg_MODE {p c dest modelist args} {
}
proc leaving {lchan} {
}
proc leaving {lchan} {
+ global nick_onchans
foreach luser [array names nick_onchans] {
upvar #0 nick_onchans($luser) oc
set oc [grep tc {"$tc" != "$lchan"} $oc]
foreach luser [array names nick_onchans] {
upvar #0 nick_onchans($luser) oc
set oc [grep tc {"$tc" != "$lchan"} $oc]
@@
-586,7
+590,7
@@
proc process_kickpart {chan user} {
set luser [irctolower $user]
set lchan [irctolower $chan]
if {![ischan $chan]} { error "not a channel" }
set luser [irctolower $user]
set lchan [irctolower $chan]
if {![ischan $chan]} { error "not a channel" }
- if {
"$luser" == "[irctolower $nick]"
} {
+ if {
![ircnick_compare $luser $nick]
} {
leaving $lchan
} else {
upvar #0 nick_onchans($luser) oc
leaving $lchan
} else {
upvar #0 nick_onchans($luser) oc
@@
-786,19
+790,11
@@
proc msg_366 {p c args} {
if {[llength names_chans] > 1} {
set oc [grep tc {[lsearch -exact $tc $names_chans] >= 0} $oc]
}
if {[llength names_chans] > 1} {
set oc [grep tc {[lsearch -exact $tc $names_chans] >= 0} $oc]
}
- if {![llength $oc]} { lnick_forget $
n
}
+ if {![llength $oc]} { lnick_forget $
luser
}
}
unset names_chans
}
}
unset names_chans
}
-proc check_username {target} {
- if {
- [string length $target] > 8 ||
- [regexp {[^-0-9a-z]} $target] ||
- ![regexp {^[a-z]} $target]
- } { error "invalid username" }
-}
-
proc somedb__head {} {
uplevel 1 {
set idl [irctolower $id]
proc somedb__head {} {
uplevel 1 {
set idl [irctolower $id]
@@
-899,7
+895,7
@@
def_somedb_id get {key} {
set l $def
}
foreach {tkey value} $l {
set l $def
}
foreach {tkey value} $l {
- if {
"$tkey" == "$key"
} { return $value }
+ if {
![string compare $tkey $key]
} { return $value }
}
error "unset setting $key"
}
}
error "unset setting $key"
}
@@
-1078,7
+1074,7
@@
def_chancmd mode {
error {channel mode must be * or match ([-+][imnpst]+)+}
}
chandb_set $chan mode $mode
error {channel mode must be * or match ([-+][imnpst]+)+}
}
chandb_set $chan mode $mode
- if {
"$mode" == "*"
} {
+ if {
![string compare $mode "*"]
} {
ucmdr "I won't ever change the mode of $chan." {}
} else {
ucmdr "Whenever I'm alone on $chan, I'll set the mode to $mode." {}
ucmdr "I won't ever change the mode of $chan." {}
} else {
ucmdr "Whenever I'm alone on $chan, I'll set the mode to $mode." {}
@@
-1145,11
+1141,13
@@
proc channelmgr_monoop {} {
def_ucmd op {
channelmgr_monoop
sendout MODE $target +o $n
def_ucmd op {
channelmgr_monoop
sendout MODE $target +o $n
+ ucmdr {} {}
}
def_ucmd leave {
channelmgr_monoop
doleave $target
}
def_ucmd leave {
channelmgr_monoop
doleave $target
+ ucmdr {} {}
}
def_ucmd invite {
}
def_ucmd invite {
@@
-1170,7
+1168,7
@@
def_ucmd invite {
}
set ui [chandb_get $ltarget userinvite]
if {[catch {
}
set ui [chandb_get $ltarget userinvite]
if {[catch {
- if {
"$ui" == "pub"
&& !$onchan} {
+ if {
![string compare $ui "pub"]
&& !$onchan} {
usererror "Invitations to $target must be made there with !invite."
}
if {"$ui" != "all"} {
usererror "Invitations to $target must be made there with !invite."
}
if {"$ui" != "all"} {
@@
-1179,16
+1177,17
@@
def_ucmd invite {
by a user on the channel."
}
}
by a user on the channel."
}
}
- if {
"$ui" == "none"
} {
+ if {
[!string compare $ui "none"]
} {
usererror "Sorry, I've not been authorised\
to invite people to $target."
}
} emsg]} {
usererror "Sorry, I've not been authorised\
to invite people to $target."
}
} emsg]} {
- if {"$errorCode" == "BLIGHT USER" && [channel_ismanager $target $n]} {
+ if {![string compare $errorCode "BLIGHT USER"] &&
+ [channel_ismanager $target $n]} {
if {[catch {
nick_securitycheck 1
} emsg2]} {
if {[catch {
nick_securitycheck 1
} emsg2]} {
- if {
"$errorCode" == "BLIGHT USER"
} {
+ if {
![string compare $errorCode "BLIGHT USER"]
} {
usererror "$emsg2 Therefore you can't use your\
channel manager privilege. $emsg"
} else {
usererror "$emsg2 Therefore you can't use your\
channel manager privilege. $emsg"
} else {
@@
-1273,7
+1272,8
@@
proc nickdb_get_username {n} {
proc nickdb_get_sec_effective {n} {
set l [nickdb_get $n tellsec]
set u [nickdb_get_username $n]
proc nickdb_get_sec_effective {n} {
set l [nickdb_get $n tellsec]
set u [nickdb_get_username $n]
- if {"[lindex $l 0]" == "secure" && ![string length $u]} { set l insecure }
+ if {![string compare [lindex $l 0] "secure"] &&
+ ![string length $u]} { set l insecure }
return $l
}
return $l
}
@@
-1297,30
+1297,30
@@
proc msgsdb_set_maydelete {n key l otherkey} {
}
proc tell_delete_msgs {lsenders lrecip} {
}
proc tell_delete_msgs {lsenders lrecip} {
- set ninbound {}
+ set n
ew_
inbound {}
set ndel 0
foreach {s t m} [msgsdb_get $lrecip inbound] {
if {[llength $lsenders]} {
if {[lsearch -exact $lsenders [irctolower $s]] == -1} {
set ndel 0
foreach {s t m} [msgsdb_get $lrecip inbound] {
if {[llength $lsenders]} {
if {[lsearch -exact $lsenders [irctolower $s]] == -1} {
- lappend ninbound $s $t $m
+ lappend n
ew_
inbound $s $t $m
continue
}
}
set rsenders($s) 1
incr ndel
}
continue
}
}
set rsenders($s) 1
incr ndel
}
- msgsdb_set_maydelete $lrecip inbound $ninbound outbound
- if {![llength $ninbound]} {
+ msgsdb_set_maydelete $lrecip inbound $n
ew_
inbound outbound
+ if {![llength $n
ew_
inbound]} {
upvar #0 nick_telling($lrecip) telling
catch { unset telling }
}
foreach s [array names rsenders] {
upvar #0 nick_telling($lrecip) telling
catch { unset telling }
}
foreach s [array names rsenders] {
- set noutbound {}
+ set n
ew_
outbound {}
foreach {r t c} [msgsdb_get $s outbound] {
foreach {r t c} [msgsdb_get $s outbound] {
- if {
"[irctolower $r]" == "$lrecip"
} continue
- lappend noutbound $r $t $c
+ if {
![ircnick_compare $r $lrecip]
} continue
+ lappend n
ew_
outbound $r $t $c
}
}
- msgsdb_set_maydelete $s outbound $noutbound inbound
+ msgsdb_set_maydelete $s outbound $n
ew_
outbound inbound
}
return $ndel
}
}
return $ndel
}
@@
-1328,7
+1328,7
@@
proc tell_delete_msgs {lsenders lrecip} {
def_ucmd untell {
prefix_nick
check_notonchan
def_ucmd untell {
prefix_nick
check_notonchan
- nick_securitycheck 0
+ if {[nickdb_exists $n]} { nick_securitycheck 0 }
set recipients [tell_peernicks $text]
if {![llength $recipients]} {
usererror "You must say which recipients' messages from you to forget."
set recipients [tell_peernicks $text]
if {![llength $recipients]} {
usererror "You must say which recipients' messages from you to forget."
@@
-1435,7
+1435,7
@@
def_ucmd tell {
set noutbound {}
set found 0
foreach {recip time count} $outbound {
set noutbound {}
set found 0
foreach {recip time count} $outbound {
- if {
"[irctolower $recip]" == "$ltarget"
} {
+ if {
![ircnick_compare $recip $ltarget]
} {
incr count
set recip $ctarget
set found 1
incr count
set recip $ctarget
set found 1
@@
-1656,12
+1656,16
@@
def_setting timeformat {
}
proc marktime_desc {mt} {
}
proc marktime_desc {mt} {
- if {"$mt" == "off"} {
- return "I will not send you periodic messages."
- } elseif {"$mt" == "once"} {
- return "I will send you one informational message when I see you."
- } else {
- return "I'll send you a message every [showintervalsecs $mt 0]."
+ switch -exact $mt {
+ off {
+ return "I will not send you periodic messages."
+ }
+ once {
+ return "I will send you one informational message when I see you."
+ }
+ default {
+ return "I'll send you a message every [showintervalsecs $mt 0]."
+ }
}
}
}
}
@@
-1677,9
+1681,12
@@
def_setting marktime {
set mt [string tolower [ta_word]]
ta_nomore
set mt [string tolower [ta_word]]
ta_nomore
- if {"$mt" == "off" || "$mt" == "once"} {
- } else {
- set mt [parse_interval $mt $marktime_min]
+ switch -exact $mt {
+ off - once {
+ }
+ default {
+ set mt [parse_interval $mt $marktime_min]
+ }
}
nickdb_set $n marktime $mt
lnick_marktime_start [irctolower $n] "So:" 500 0
}
nickdb_set $n marktime $mt
lnick_marktime_start [irctolower $n] "So:" 500 0
@@
-1769,7
+1776,7
@@
def_setting tellme {
set every [ta_interval_optional 300 3600]
lappend v $every
}
set every [ta_interval_optional 300 3600]
lappend v $every
}
- if {
"$setting" == "remind"
} {
+ if {
![string compare $setting remind]
} {
set within [ta_interval_optional 5 30]
if {$within > $every} {
error "remind interval must be at least time to respond"
set within [ta_interval_optional 5 30]
if {$within > $every} {
error "remind interval must be at least time to respond"
@@
-1884,6
+1891,7
@@
def_ucmd kill {
set reason "at request of user $nu"
if {[ta_anymore]} { append reason "; $text" }
sendout KILL $target $reason
set reason "at request of user $nu"
if {[ta_anymore]} { append reason "; $text" }
sendout KILL $target $reason
+ ucmdr {} {}
}
def_ucmd summon {
}
def_ucmd summon {
@@
-1935,7
+1943,7
@@
def_ucmd seen {
set nlower [irctolower $ncase]
ta_nomore
set now [clock seconds]
set nlower [irctolower $ncase]
ta_nomore
set now [clock seconds]
- if {
"$nlower" == "[irctolower $nick]"
} {
+ if {
![ircnick_compare $nlower $nick]
} {
usererror "I am not self-aware."
} elseif {![info exists lastseen($nlower)]} {
set rstr "I've never seen $ncase."
usererror "I am not self-aware."
} elseif {![info exists lastseen($nlower)]} {
set rstr "I've never seen $ncase."
@@
-1954,7
+1962,7
@@
def_ucmd seen {
if {[info exists lf]} { set oldvalue $lf } else { set oldvalue {} }
set lf [list [list $now $n $where]]
foreach v $oldvalue {
if {[info exists lf]} { set oldvalue $lf } else { set oldvalue {} }
set lf [list [list $now $n $where]]
foreach v $oldvalue {
- if {
"[irctolower [lindex $v 1]]" == "[irctolower $n]"
} continue
+ if {
![ircnick_compare [lindex $v 1] $n]
} continue
lappend lf $v
}
ucmdr {} $rstr
lappend lf $v
}
ucmdr {} $rstr
@@
-1975,17
+1983,24
@@
proc lnick_marktime_doafter {luser why ms mentiontold} {
proc lnick_marktime_reset {luser} {
set mt [nickdb_get $luser marktime]
proc lnick_marktime_reset {luser} {
set mt [nickdb_get $luser marktime]
- if {"$mt" == "off" || "$mt" == "once"} return
- lnick_marktime_doafter $luser "Time passes." [expr {$mt*1000}] 0
+ switch -exact $mt {
+ off - once { }
+ default {
+ lnick_marktime_doafter $luser "Time passes." [expr {$mt*1000}] 0
+ }
+ }
}
proc lnick_marktime_start {luser why ms mentiontold} {
set mt [nickdb_get $luser marktime]
}
proc lnick_marktime_start {luser why ms mentiontold} {
set mt [nickdb_get $luser marktime]
- if {"$mt" == "off"} {
- lnick_marktime_cancel $luser
- if {$mentiontold} { after $ms [list lnick_checktold $luser] }
- } else {
- lnick_marktime_doafter $luser $why $ms $mentiontold
+ switch -exact $mt {
+ off {
+ lnick_marktime_cancel $luser
+ if {$mentiontold} { after $ms [list lnick_checktold $luser] }
+ }
+ default {
+ lnick_marktime_doafter $luser $why $ms $mentiontold
+ }
}
}
}
}