chiark / gitweb /
Bugfixes.
[ircbot] / bridge.tcl
CommitLineData
281f2c0e
IJ
1# Battle.net server bridge thingy
2
3set helpfile bridgehelp
4set bnbot_callervars {nicks}
5
6source irccore.tcl
7source parsecmd.tcl
8source usebnbot.tcl
9source stdhelp.tcl
10
11proc privmsg_unlogged {p ischan params} {
892f5a82 12 global bots errorCode errorInfo line_org_endchar
281f2c0e
IJ
13 if {$ischan} {
14 if {[catch {
15 prefix_nick
16 set text [lindex $params 1]
892f5a82 17 if {"$line_org_endchar" == "\001"} {
281f2c0e
IJ
18 if {[regexp {^\?ACTION (.*)\?$} $text dummy text]} {
19 set towrite "* $n $text"
20 } else {
21 return
22 }
23 } else {
24 set towrite "\[$n] [lindex $params 1]"
25 }
26 foreach botid $bots {
1ae11f79 27 upvar #0 bot/$botid/chan ch
281f2c0e
IJ
28 puts $ch $towrite
29 }
30 } emsg]} {
31 log "error: $emsg $errorCode $errorInfo"
32 }
33 return 1
34 } else {
35 prefix_nick
36 execute_usercommand $p PRIVMSG $n $n \
37 [lindex $params 0] [lindex $params 1]
38 return 0
39 }
40}
41
42proc connected {} {
43 global channel
44 sendout JOIN $channel
45}
46
47proc bnnick_clean {n} {
48 if {[regexp {^[-+_0-9a-zA-Z]} $n]} { return $n }
49 return "\"$n\"";
50}
51
52def_bnbot event {l} {
53 global channel errorCode
54 if {[regexp {^1002 JOIN ([^ ]+) \w+} $l dummy n]} {
55 set bnnicks($n) 1
e5e18a7f 56 sendprivmsg $channel "[bnnick_clean $n] has joined $bnchanfn."
281f2c0e
IJ
57 } elseif {[regexp {^1003 LEAVE ([^ ]+) \w+$} $l dummy n]} {
58 if {"$n" == "$bnnick"} return
59 catch { unset bnnicks($n) }
e5e18a7f 60 sendprivmsg $channel "[bnnick_clean $n] has left $bnchanfn."
281f2c0e
IJ
61 } elseif {[regexp {^1004 WHISPER ([^ ]+) \w+ "(.*)"$} $l dummy n text]} {
62 if {[catch {
63 go_usercommand "$botid $n" $bnchanfn $n $n $text
64 } rv]} {
65 if {"$errorCode" != "BLIGHT USER"} { set rv "error: $rv" }
66 bnbot_write $botid "/msg $n $rv"
67 } else {
68 set rvl {}
69 foreach mt $rv { lappend rvl [split $mt "\n"] }
70 manyset $rvl priv_msgs pub_msgs priv_acts pub_acts
71 foreach m $priv_acts { bnbot_write $botid "/msg $n The bot $m" }
72 foreach m $pub_acts { bnbot_write $botid "/me $m" }
73 foreach m $priv_msgs { bnbot_write $botid "/msg $n $m" }
74 foreach m $pub_msgs { bnbot_writemsg $botid "$n $m" }
75 }
76 } elseif {[regexp {^1001 USER ([^ ]+) \w+} $l dummy n]} {
77 if {"$n" == "$bnnick"} return
78 set bnnicks($n) 1
79 }
80}
81
82proc new_event {} {}
83
84proc msg_353 {p c dest type chan nicklist} {
85 global onchan_nicks channel nick
86 catch { unset onchan_nicks }
87 foreach n $nicklist {
88 regsub {^[@+]} $n {} n
89 if {"$n" == "$nick"} continue
90 set onchan_nicks($n) 1
91 }
92}
93
94proc tellall {msg} {
95 global bots
96 foreach botid $bots { bnbot_writemsg $botid $msg }
97}
98
99proc msg_JOIN {p c chan} {
100 global onchan_nicks
101 prefix_nick
e5e18a7f 102 tellall "$n has joined $chan."
281f2c0e
IJ
103 set onchan_nicks($n) 1
104}
105
106proc msg_NICK {p c newnick} {
107 global onchan_nicks
108 prefix_nick
109 kill_nick $n
110 set onchan_nicks($newnick) 1
e5e18a7f 111 tellall "$n has changed nicks to $newnick."
281f2c0e
IJ
112}
113
114proc kill_nick {n} { global onchan_nicks; catch { unset onchan_nicks($n) } }
115
116proc msg_KICK {p c chans users comment} {
117 foreach n [split $users ,] {
118 tellall "$user was kicked off $chans ($comment)"
119 kill_nick $n
120 }
121}
122proc msg_KILL {p c user why} {
123 tellall "$user was killed ($why)"
124 kill_nick $user
125}
126proc msg_PART {p c chan} {
127 prefix_nick
e5e18a7f 128 tellall "$n has left $chan."
281f2c0e
IJ
129 kill_nick $n
130}
131proc msg_QUIT {p c why} {
132 prefix_nick
133 tellall "$n has signed off ($why)"
134 kill_nick $n
135}
136
137proc who_res {thing l} {
138 if {[llength $l]} {
139 return "$thing: [lsort -dictionary $l]"
140 } else {
141 return "$thing - empty."
142 }
143}
144
145def_bnbot who {} { who_res $bnchanfn [array names bnnicks] }
146
147def_ucmd who {
148 global bots channel onchan_nicks
149 ta_nomore
150 set o [who_res "$channel (IRC)" [array names onchan_nicks]]
151 foreach botid $bots { append o "\n" [bnbot_who $botid] }
152 return [list $o]
153}
154
155loadhelp
156ensure_connecting
157foreach botid $bots { bnbot_ensure_connecting $botid }