comparison ircrelay/ircrelay_admincmd.php @ 0:dd81c38b513a

Initial commit
author Ivo Smits <Ivo@UCIS.nl>
date Mon, 28 Feb 2011 00:49:07 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:dd81c38b513a
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 }