Commit | Line | Data |
---|---|---|
281f2c0e IJ |
1 | # Battle.net server bridge thingy |
2 | ||
3 | set helpfile bridgehelp | |
4 | set bnbot_callervars {nicks} | |
5 | ||
6 | source irccore.tcl | |
7 | source parsecmd.tcl | |
8 | source usebnbot.tcl | |
9 | source stdhelp.tcl | |
10 | ||
11 | proc 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 | ||
42 | proc connected {} { | |
43 | global channel | |
44 | sendout JOIN $channel | |
45 | } | |
46 | ||
47 | proc bnnick_clean {n} { | |
48 | if {[regexp {^[-+_0-9a-zA-Z]} $n]} { return $n } | |
49 | return "\"$n\""; | |
50 | } | |
51 | ||
52 | def_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 | ||
82 | proc new_event {} {} | |
83 | ||
84 | proc 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 | ||
94 | proc tellall {msg} { | |
95 | global bots | |
96 | foreach botid $bots { bnbot_writemsg $botid $msg } | |
97 | } | |
98 | ||
99 | proc 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 | ||
106 | proc 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 | ||
114 | proc kill_nick {n} { global onchan_nicks; catch { unset onchan_nicks($n) } } | |
115 | ||
116 | proc 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 | } | |
122 | proc msg_KILL {p c user why} { | |
123 | tellall "$user was killed ($why)" | |
124 | kill_nick $user | |
125 | } | |
126 | proc msg_PART {p c chan} { | |
127 | prefix_nick | |
e5e18a7f | 128 | tellall "$n has left $chan." |
281f2c0e IJ |
129 | kill_nick $n |
130 | } | |
131 | proc msg_QUIT {p c why} { | |
132 | prefix_nick | |
133 | tellall "$n has signed off ($why)" | |
134 | kill_nick $n | |
135 | } | |
136 | ||
137 | proc who_res {thing l} { | |
138 | if {[llength $l]} { | |
139 | return "$thing: [lsort -dictionary $l]" | |
140 | } else { | |
141 | return "$thing - empty." | |
142 | } | |
143 | } | |
144 | ||
145 | def_bnbot who {} { who_res $bnchanfn [array names bnnicks] } | |
146 | ||
147 | def_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 | ||
155 | loadhelp | |
156 | ensure_connecting | |
157 | foreach botid $bots { bnbot_ensure_connecting $botid } |