Mercurial > hg > udpmsg3
view ircrelay/ircrelay_admincmd.php @ 1:7f01316130e8
Basic support for private messages in unrealircd proxy
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Fri, 01 Apr 2011 17:02:41 +0200 |
parents | dd81c38b513a |
children |
line wrap: on
line source
<?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'; }