1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-14 02:42:40 +01:00

Merge pull request #92 from Koolvin/arcpatch-D1666

IRC Bot what's new directive
This commit is contained in:
Evan Priestley 2012-02-23 18:08:09 -08:00
commit aad7ddaa75
5 changed files with 164 additions and 6 deletions

View file

@ -9,6 +9,7 @@
"PhabricatorIRCProtocolHandler", "PhabricatorIRCProtocolHandler",
"PhabricatorIRCObjectNameHandler", "PhabricatorIRCObjectNameHandler",
"PhabricatorIRCLogHandler", "PhabricatorIRCLogHandler",
"PhabricatorIRCWhatsNewHandler",
"PhabricatorIRCDifferentialNotificationHandler" "PhabricatorIRCDifferentialNotificationHandler"
], ],

View file

@ -565,6 +565,7 @@ phutil_register_library_map(array(
'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/message', 'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/message',
'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/objectname', 'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/objectname',
'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/protocol', 'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/protocol',
'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/whatsnew',
'PhabricatorImageTransformer' => 'applications/files/transform', 'PhabricatorImageTransformer' => 'applications/files/transform',
'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__', 'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__',
'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/javelin', 'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/javelin',
@ -1315,6 +1316,7 @@ phutil_register_library_map(array(
'PhabricatorIRCLogHandler' => 'PhabricatorIRCHandler', 'PhabricatorIRCLogHandler' => 'PhabricatorIRCHandler',
'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler', 'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler',
'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler', 'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler',
'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler',
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase', 'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
'PhabricatorJavelinLinter' => 'ArcanistLinter', 'PhabricatorJavelinLinter' => 'ArcanistLinter',
'PhabricatorLintEngine' => 'PhutilLintEngine', 'PhabricatorLintEngine' => 'PhutilLintEngine',

View file

@ -0,0 +1,143 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Responds to "Whats new?" using the feed.
*
* @group irc
*/
final class PhabricatorIRCWhatsNewHandler extends PhabricatorIRCHandler {
public function receiveMessage(PhabricatorIRCMessage $message) {
switch ($message->getCommand()) {
case 'PRIVMSG':
$reply_to = $message->getReplyTo();
if (!$reply_to) {
break;
}
$message = $message->getMessageText();
$prompt = '~what( i|\')?s new\?~i';
if (preg_match($prompt, $message)) {
$this->getLatest($reply_to);
}
break;
}
}
public function getLatest($reply_to) {
$latest = $this->getConduit()->callMethodSynchronous(
'feed.query',
array(
'limit'=>5
));
$phids = array();
foreach ($latest as $action) {
if (isset($action['data']['actor_phid'])) {
$uid = $action['data']['actor_phid'];
}
else {
$uid = $action['authorPHID'];
}
switch ($action['class']) {
case 'PhabricatorFeedStoryDifferential':
array_push($phids,$action['data']['revision_phid']);
break;
case 'PhabricatorFeedStoryManiphest':
array_push($phids,$action['data']['taskPHID']);
break;
default:
array_push($phids,$uid);
break;
}
array_push($phids,$uid);
}
$infs = $this->getConduit()->callMethodSynchronous(
'phid.query',
array(
'phids'=>$phids
));
$cphid = 0;
foreach ($latest as $action) {
if (isset($action['data']['actor_phid'])) {
$uid = $action['data']['actor_phid'];
}
else {
$uid = $action['authorPHID'];
}
switch ($action['class']) {
case 'PhabricatorFeedStoryDifferential':
$rinf = $infs[$action['data']['revision_phid']];
break;
case 'PhabricatorFeedStoryManiphest':
$rinf = $infs[$action['data']['taskPHID']];
break;
default:
$rinf = array('name'=>$action['class']);
break;
}
$uinf = $infs[$uid];
$action = $this->getRhetoric($action['data']['action']);
$user = $uinf['name'];
$title = $rinf['fullName'];
$uri = $rinf['uri'];
$color = chr(3);
$blue = $color.'12';
$gray = $color.'15';
$bold = chr(2);
$reset = chr(15);
$content = "{$bold}{$user}{$reset} {$gray}{$action} {$blue}{$bold}".
"{$title}{$reset} - {$gray}{$uri}{$reset}";
$this->write('PRIVMSG',"{$reply_to} :{$content}");
}
return;
}
public function getRhetoric($input) {
switch ($input) {
case "none":
return 'commented on';
break;
case "update":
return 'updated';
break;
case "create":
return 'created';
break;
case "abandon":
return 'abandonned';
break;
case "accept":
return 'accepted';
break;
default:
return $input;
break;
}
}
}

View file

@ -0,0 +1,12 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'infrastructure/daemon/irc/handler/base');
phutil_require_source('PhabricatorIRCWhatsNewHandler.php');