mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-26 14:38:19 +01:00
Break IRCSymbolHandler from IRCObjectNameHandler
Summary: Allows to easily disable responding to "where is..." Test Plan: Run ircbot with and without the handler Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D4444
This commit is contained in:
parent
7857508185
commit
ec19c3332a
4 changed files with 58 additions and 37 deletions
|
@ -8,6 +8,7 @@
|
|||
"handlers" : [
|
||||
"PhabricatorIRCProtocolHandler",
|
||||
"PhabricatorIRCObjectNameHandler",
|
||||
"PhabricatorIRCSymbolHandler",
|
||||
"PhabricatorIRCLogHandler",
|
||||
"PhabricatorIRCWhatsNewHandler",
|
||||
"PhabricatorIRCDifferentialNotificationHandler",
|
||||
|
|
|
@ -888,6 +888,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/PhabricatorIRCMessage.php',
|
||||
'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCObjectNameHandler.php',
|
||||
'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCProtocolHandler.php',
|
||||
'PhabricatorIRCSymbolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCSymbolHandler.php',
|
||||
'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCWhatsNewHandler.php',
|
||||
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
|
||||
'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php',
|
||||
|
@ -2254,6 +2255,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorIRCMacroHandler' => 'PhabricatorIRCHandler',
|
||||
'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler',
|
||||
'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler',
|
||||
'PhabricatorIRCSymbolHandler' => 'PhabricatorIRCHandler',
|
||||
'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler',
|
||||
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorInlineCommentController' => 'PhabricatorController',
|
||||
|
|
|
@ -22,8 +22,6 @@ final class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler {
|
|||
break;
|
||||
}
|
||||
|
||||
$this->handleSymbols($message);
|
||||
|
||||
$message = $message->getMessageText();
|
||||
$matches = null;
|
||||
|
||||
|
@ -198,39 +196,4 @@ final class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private function handleSymbols(PhabricatorIRCMessage $message) {
|
||||
$reply_to = $message->getReplyTo();
|
||||
$text = $message->getMessageText();
|
||||
|
||||
$matches = null;
|
||||
if (!preg_match('/where(?: in the world)? is (\S+?)\?/i',
|
||||
$text, $matches)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$symbol = $matches[1];
|
||||
$results = $this->getConduit()->callMethodSynchronous(
|
||||
'diffusion.findsymbols',
|
||||
array(
|
||||
'name' => $symbol,
|
||||
));
|
||||
|
||||
$default_uri = $this->getURI('/diffusion/symbol/'.$symbol.'/');
|
||||
|
||||
if (count($results) > 1) {
|
||||
$response = "Multiple symbols named '{$symbol}': {$default_uri}";
|
||||
} else if (count($results) == 1) {
|
||||
$result = head($results);
|
||||
$response =
|
||||
$result['type'].' '.
|
||||
$result['name'].' '.
|
||||
'('.$result['language'].'): '.
|
||||
nonempty($result['uri'], $default_uri);
|
||||
} else {
|
||||
$response = "No symbol '{$symbol}' found anywhere.";
|
||||
}
|
||||
|
||||
$this->write('PRIVMSG', "{$reply_to} :{$response}");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Watches for "where is <symbol>?"
|
||||
*
|
||||
* @group irc
|
||||
*/
|
||||
final class PhabricatorIRCSymbolHandler extends PhabricatorIRCHandler {
|
||||
|
||||
public function receiveMessage(PhabricatorIRCMessage $message) {
|
||||
|
||||
switch ($message->getCommand()) {
|
||||
case 'PRIVMSG':
|
||||
$reply_to = $message->getReplyTo();
|
||||
if (!$reply_to) {
|
||||
break;
|
||||
}
|
||||
|
||||
$text = $message->getMessageText();
|
||||
|
||||
$matches = null;
|
||||
if (!preg_match('/where(?: in the world)? is (\S+?)\?/i',
|
||||
$text, $matches)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$symbol = $matches[1];
|
||||
$results = $this->getConduit()->callMethodSynchronous(
|
||||
'diffusion.findsymbols',
|
||||
array(
|
||||
'name' => $symbol,
|
||||
));
|
||||
|
||||
$default_uri = $this->getURI('/diffusion/symbol/'.$symbol.'/');
|
||||
|
||||
if (count($results) > 1) {
|
||||
$response = "Multiple symbols named '{$symbol}': {$default_uri}";
|
||||
} else if (count($results) == 1) {
|
||||
$result = head($results);
|
||||
$response =
|
||||
$result['type'].' '.
|
||||
$result['name'].' '.
|
||||
'('.$result['language'].'): '.
|
||||
nonempty($result['uri'], $default_uri);
|
||||
} else {
|
||||
$response = "No symbol '{$symbol}' found anywhere.";
|
||||
}
|
||||
|
||||
$this->write('PRIVMSG', "{$reply_to} :{$response}");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue