Mercurial > hg > udpmsg3
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ircrelay/ircrelay_admincmd.php Mon Feb 28 00:49:07 2011 +0100 @@ -0,0 +1,122 @@ +<?php +function admincmd($parts) { + global $channels, $networks; + switch (strtolower($parts[0])) { + case 'die': exit(0); + case 'c': case 'chn': case 'chan': case 'channel': + switch (strtolower($parts[1])) { + case 'join': case 'part': case 'rejoin': case 'msg': case 'links': + if (!isset($channels[$parts[2]])) return 'ERR Channel does not exist'; + return admincmd_channel($parts[1], $channels[$parts[2]], array_slice($parts, 3)); + case 'list': return 'OK '.implode('; ', array_keys($channels)); + case 'help': + return 'OK list; links [ch]; join [ch]; part [ch]; rejoin [ch]; msg [ch] [msg]; help'; + } + break; + case 'n': case 'net': case 'network': + switch (strtolower($parts[1])) { + 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': + if (!isset($networks[$parts[2]])) return 'ERR Network does not exist'; + return admincmd_network($parts[1], $networks[$parts[2]], array_slice($parts, 3)); + case 'list': return 'OK '.implode('; ', array_keys($networks)); + case 'help': + 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]'; + } + break; + case 'help': + return 'OK die; channel help; network help'; + } + return 'ERR Unknown command'; +} +function admincmd_channel($cmd, $chn, $parts) { + switch (strtolower($cmd)) { + case 'links': + $arr = array(); + foreach ($chn->links as $link) $arr[] = $link->network->key.'/'.$link->name; + return 'OK '.implode('; ', $arr); + case 'join': + foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name); + return 'OK'; + case 'part': + foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name); + return 'OK'; + case 'rejoin': + foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name); + foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name); + return 'OK'; + case 'msg': + foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PRIVMSG '.$link->name.' :'.implode(' ', array_slice($parts, 0))); + return 'OK'; + } + return 'ERR Unknown command'; +} +function admincmd_network($cmd, $net, $parts) { + global $channels; + switch (strtolower($cmd)) { + case 'disconnect': + network_reset($net); + return 'OK'; + case 'raw': + network_send($net, implode(' ', array_slice($parts, 0))); + return 'OK'; + case 'join': + network_send($net, 'JOIN '.$parts[0]); + return 'OK'; + case 'part': + network_send($net, 'PART '.$parts[0]); + return 'OK'; + case 'rejoin': + network_send($net, 'JOIN '.$parts[0]); + network_send($net, 'PART '.$parts[0]); + return 'OK'; + case 'msg': + network_send($net, 'PRIVMSG '.$parts[0].' :'.implode(' ', array_slice($parts, 1))); + return 'OK'; + case 'delete': + network_Reset($net); + unset($networks[$net->key]); + return 'OK'; + case 'info': + return 'OK key='.$net->key.'; name='.$net->name.'; server='.$net->server.'; port='.$net->port.'; nick='.$net->nick.'; active='.$net->active.'; af='.$net->addressfamily; + case 'status': + return 'OK connected='.$net->connected.'; connecting='.$net->connecting.'; timeout='.$net->timeout.'; nick='.$net->realnick; + case 'channels': + return 'OK '.implode('; ', array_keys($net->channels)); + case 'set': + $net->name = $parts[0]; + $net->server = $parts[1]; + $net->port = (int)$parts[2]; + $net->nick = $parts[3]; + return 'OK'; + case 'active': + $net->active = $parts[0]; + return 'OK'; + case 'ipv6': + $net->addressfamily = $parts[0] ? AF_INET6 : AF_INET; + return 'OK'; + case 'link': + if (isset($net->channels[$parts[0]])) return 'ERR Channel already linked'; + $link = new NetworkChannel(); + $link->name = $parts[0]; + $link->network = $net; + $link->channel = getchannel($parts[1]); + $link->display = implode(' ', array_slice($parts, 2)); + $link->channel->links[] = $link; + $net->channels[$link->name] = $link; + if ($net->connected && $link->name[0] == '#') network_send($net, 'JOIN '.$link->name); + return 'OK'; + case 'unlink': + if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked'; + $link = $net->channels[$parts[0]]; + unset($net->channels[$link->name]); + foreach ($link->channel->links as $k => $l) if ($l === $link) unset($link->channel->links[$k]); + if (!count($link->channel->links)) unset($channels[$link->channel->name]); + if ($net->connected && $link->name[0] == '#') network_send($net, 'PART '.$link->name); + return 'OK'; + case 'linkinfo': + if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked'; + $link = $net->channels[$parts[0]]; + return 'OK channel='.$link->channel->name.'; display='.$link->display; + } + return 'ERR Unknown command'; +}