mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-27 06:58:17 +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" : [
|
"handlers" : [
|
||||||
"PhabricatorIRCProtocolHandler",
|
"PhabricatorIRCProtocolHandler",
|
||||||
"PhabricatorIRCObjectNameHandler",
|
"PhabricatorIRCObjectNameHandler",
|
||||||
|
"PhabricatorIRCSymbolHandler",
|
||||||
"PhabricatorIRCLogHandler",
|
"PhabricatorIRCLogHandler",
|
||||||
"PhabricatorIRCWhatsNewHandler",
|
"PhabricatorIRCWhatsNewHandler",
|
||||||
"PhabricatorIRCDifferentialNotificationHandler",
|
"PhabricatorIRCDifferentialNotificationHandler",
|
||||||
|
|
|
@ -888,6 +888,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/PhabricatorIRCMessage.php',
|
'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/PhabricatorIRCMessage.php',
|
||||||
'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCObjectNameHandler.php',
|
'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCObjectNameHandler.php',
|
||||||
'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCProtocolHandler.php',
|
'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCProtocolHandler.php',
|
||||||
|
'PhabricatorIRCSymbolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCSymbolHandler.php',
|
||||||
'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCWhatsNewHandler.php',
|
'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCWhatsNewHandler.php',
|
||||||
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
|
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
|
||||||
'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php',
|
'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php',
|
||||||
|
@ -2254,6 +2255,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorIRCMacroHandler' => 'PhabricatorIRCHandler',
|
'PhabricatorIRCMacroHandler' => 'PhabricatorIRCHandler',
|
||||||
'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler',
|
'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler',
|
||||||
'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler',
|
'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler',
|
||||||
|
'PhabricatorIRCSymbolHandler' => 'PhabricatorIRCHandler',
|
||||||
'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler',
|
'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler',
|
||||||
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
|
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
|
||||||
'PhabricatorInlineCommentController' => 'PhabricatorController',
|
'PhabricatorInlineCommentController' => 'PhabricatorController',
|
||||||
|
|
|
@ -22,8 +22,6 @@ final class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->handleSymbols($message);
|
|
||||||
|
|
||||||
$message = $message->getMessageText();
|
$message = $message->getMessageText();
|
||||||
$matches = null;
|
$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