0
|
1 <?php |
|
2 function admincmd($parts) { |
|
3 global $channels, $networks; |
|
4 switch (strtolower($parts[0])) { |
|
5 case 'die': exit(0); |
|
6 case 'c': case 'chn': case 'chan': case 'channel': |
|
7 switch (strtolower($parts[1])) { |
|
8 case 'join': case 'part': case 'rejoin': case 'msg': case 'links': |
|
9 if (!isset($channels[$parts[2]])) return 'ERR Channel does not exist'; |
|
10 return admincmd_channel($parts[1], $channels[$parts[2]], array_slice($parts, 3)); |
|
11 case 'list': return 'OK '.implode('; ', array_keys($channels)); |
|
12 case 'help': |
|
13 return 'OK list; links [ch]; join [ch]; part [ch]; rejoin [ch]; msg [ch] [msg]; help'; |
|
14 } |
|
15 break; |
|
16 case 'n': case 'net': case 'network': |
|
17 switch (strtolower($parts[1])) { |
|
18 case 'disconnect': case 'raw': case 'join': case 'part': case 'rejoin': case 'msg': case 'delete': case 'info': case 'status': case 'channels': case 'set': case 'active': case 'ipv6': case 'link': case 'unlink': case 'linkinfo': |
|
19 if (!isset($networks[$parts[2]])) return 'ERR Network does not exist'; |
|
20 return admincmd_network($parts[1], $networks[$parts[2]], array_slice($parts, 3)); |
|
21 case 'list': return 'OK '.implode('; ', array_keys($networks)); |
|
22 case 'help': |
|
23 return 'OK list; disconnect [net]; raw [net] [text]; join [net] [ch]; part [net] [ch]; rejoin [net] [ch]; msg [net] [ch] [msg]; help; delete; info; status; channels; set [name] [server] [port] [nick]; active [enable]; ipv6 [enable]; link [name] [channel] [display]; unlink [name]; linkinfo [name]'; |
|
24 } |
|
25 break; |
|
26 case 'help': |
|
27 return 'OK die; channel help; network help'; |
|
28 } |
|
29 return 'ERR Unknown command'; |
|
30 } |
|
31 function admincmd_channel($cmd, $chn, $parts) { |
|
32 switch (strtolower($cmd)) { |
|
33 case 'links': |
|
34 $arr = array(); |
|
35 foreach ($chn->links as $link) $arr[] = $link->network->key.'/'.$link->name; |
|
36 return 'OK '.implode('; ', $arr); |
|
37 case 'join': |
|
38 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name); |
|
39 return 'OK'; |
|
40 case 'part': |
|
41 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name); |
|
42 return 'OK'; |
|
43 case 'rejoin': |
|
44 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name); |
|
45 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name); |
|
46 return 'OK'; |
|
47 case 'msg': |
|
48 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PRIVMSG '.$link->name.' :'.implode(' ', array_slice($parts, 0))); |
|
49 return 'OK'; |
|
50 } |
|
51 return 'ERR Unknown command'; |
|
52 } |
|
53 function admincmd_network($cmd, $net, $parts) { |
|
54 global $channels; |
|
55 switch (strtolower($cmd)) { |
|
56 case 'disconnect': |
|
57 network_reset($net); |
|
58 return 'OK'; |
|
59 case 'raw': |
|
60 network_send($net, implode(' ', array_slice($parts, 0))); |
|
61 return 'OK'; |
|
62 case 'join': |
|
63 network_send($net, 'JOIN '.$parts[0]); |
|
64 return 'OK'; |
|
65 case 'part': |
|
66 network_send($net, 'PART '.$parts[0]); |
|
67 return 'OK'; |
|
68 case 'rejoin': |
|
69 network_send($net, 'JOIN '.$parts[0]); |
|
70 network_send($net, 'PART '.$parts[0]); |
|
71 return 'OK'; |
|
72 case 'msg': |
|
73 network_send($net, 'PRIVMSG '.$parts[0].' :'.implode(' ', array_slice($parts, 1))); |
|
74 return 'OK'; |
|
75 case 'delete': |
|
76 network_Reset($net); |
|
77 unset($networks[$net->key]); |
|
78 return 'OK'; |
|
79 case 'info': |
|
80 return 'OK key='.$net->key.'; name='.$net->name.'; server='.$net->server.'; port='.$net->port.'; nick='.$net->nick.'; active='.$net->active.'; af='.$net->addressfamily; |
|
81 case 'status': |
|
82 return 'OK connected='.$net->connected.'; connecting='.$net->connecting.'; timeout='.$net->timeout.'; nick='.$net->realnick; |
|
83 case 'channels': |
|
84 return 'OK '.implode('; ', array_keys($net->channels)); |
|
85 case 'set': |
|
86 $net->name = $parts[0]; |
|
87 $net->server = $parts[1]; |
|
88 $net->port = (int)$parts[2]; |
|
89 $net->nick = $parts[3]; |
|
90 return 'OK'; |
|
91 case 'active': |
|
92 $net->active = $parts[0]; |
|
93 return 'OK'; |
|
94 case 'ipv6': |
|
95 $net->addressfamily = $parts[0] ? AF_INET6 : AF_INET; |
|
96 return 'OK'; |
|
97 case 'link': |
|
98 if (isset($net->channels[$parts[0]])) return 'ERR Channel already linked'; |
|
99 $link = new NetworkChannel(); |
|
100 $link->name = $parts[0]; |
|
101 $link->network = $net; |
|
102 $link->channel = getchannel($parts[1]); |
|
103 $link->display = implode(' ', array_slice($parts, 2)); |
|
104 $link->channel->links[] = $link; |
|
105 $net->channels[$link->name] = $link; |
|
106 if ($net->connected && $link->name[0] == '#') network_send($net, 'JOIN '.$link->name); |
|
107 return 'OK'; |
|
108 case 'unlink': |
|
109 if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked'; |
|
110 $link = $net->channels[$parts[0]]; |
|
111 unset($net->channels[$link->name]); |
|
112 foreach ($link->channel->links as $k => $l) if ($l === $link) unset($link->channel->links[$k]); |
|
113 if (!count($link->channel->links)) unset($channels[$link->channel->name]); |
|
114 if ($net->connected && $link->name[0] == '#') network_send($net, 'PART '.$link->name); |
|
115 return 'OK'; |
|
116 case 'linkinfo': |
|
117 if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked'; |
|
118 $link = $net->channels[$parts[0]]; |
|
119 return 'OK channel='.$link->channel->name.'; display='.$link->display; |
|
120 } |
|
121 return 'ERR Unknown command'; |
|
122 } |