Mercurial > hg > udpmsg3
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 } |