diff --git a/src/infrastructure/daemon/irc/handler/base/PhabricatorIRCHandler.php b/src/infrastructure/daemon/irc/handler/base/PhabricatorIRCHandler.php index 4a66ee418b..10daa1cb27 100644 --- a/src/infrastructure/daemon/irc/handler/base/PhabricatorIRCHandler.php +++ b/src/infrastructure/daemon/irc/handler/base/PhabricatorIRCHandler.php @@ -43,6 +43,10 @@ abstract class PhabricatorIRCHandler { return $this->bot->getConfig($key, $default); } + final protected function getURI($path) { + return $this->bot->getConfig('conduit.uri').$path; + } + abstract public function receiveMessage(PhabricatorIRCMessage $message); } diff --git a/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php b/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php index b9316a5311..de771d4e2b 100644 --- a/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php +++ b/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php @@ -38,9 +38,10 @@ class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler { break; } + $this->handleSymbols($message); + $message = $message->getMessageText(); $matches = null; - $phids = array(); $pattern = '@'. @@ -178,4 +179,37 @@ class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler { } } + private function handleSymbols(PhabricatorIRCMessage $message) { + $channel = $message->getChannel(); + $text = $message->getMessageText(); + + $matches = null; + if (!preg_match('/where is (\S+?)\?/i', $text, $matches)) { + return; + } + + $symbol = $matches[1]; + $results = $this->getConduit()->callMethodSynchronous( + 'diffusion.findsymbols', + array( + 'name' => $symbol, + )); + + if (count($results) > 1) { + $uri = $this->getURI('/diffusion/symbol/'.$symbol.'/'); + $response = "Multiple symbols named '{$symbol}': {$uri}"; + } else if (count($results) == 1) { + $result = head($results); + $response = + $result['type'].' '. + $result['name'].' '. + '('.$result['language'].'): '. + $result['uri']; + } else { + $response = "No symbol '{$symbol}' found anywhere."; + } + + $this->write('PRIVMSG', "{$channel} :{$response}"); + } + }