Я пытаюсь интегрировать фабрикатор с jabber-чатом. Я создал бота, который отправляет сообщения автору сообщения в jabber chat для каждого нового запроса фида. Мое требование состоит в том, что как получить оригинального автора фиксации, если история фида – это проблема, аудит или commnet. Я хочу уведомить автора о совершении каких-либо проблем, связанных с его совершением. Нужно ли мне анализировать историю, чтобы получить эту информацию? Как мне это сделать?
заранее спасибо
Объект истории должен иметь элемент данных, который будет содержать информацию об Авторе и коммиттерах. Вот так:
"PHID-STRY-spjfpdv4wuigblmh3ygb" : { "class" : "PhabricatorFeedStoryCommit", "epoch" : 1409840112, "authorPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5", "chronologicalKey" : "6055220066741547443", "data" : { "commitPHID" : "PHID-CMIT-ievqiimtsnlfhlk5imqq", "summary" : "[blah]", "authorName" : "Author Name <author_email@example.com>", "authorPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5", "committerName" : "Commiter Name <commiter_email@example.com>", "committerPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5" } }
Если нет, он должен иметь objectPHID:
"PHID-STRY-mqlkjzwkbr3th4h5n2eg" : { "class" : "PhabricatorApplicationTransactionFeedStory", "epoch" : 1409841382, "authorPHID" : "PHID-USER-2bubef6xonwicvaool4w", "chronologicalKey" : "6055222630292077307", "data" : { "objectPHID" : "PHID-CMIT-is7pmo5nyvv4eruq2msn", "transactionPHIDs" : [ "PHID-XACT-CMIT-svvkzf7dfplzdxp" ] } }
Вы можете запросить оттуда, используя вызовы кабелепровода.
Лучший способ понять и проверить это: http://phabricator.yourhost.com/conduit/method/feed.query/
щелкните [метод вызова]
Это вернет список изменений, которые вас интересуют: «objectPHID»: «PHID-DREV-xxxxxxx»,
…
Теперь http://phabricator.yourhost.com/conduit/method/differential.query/
set phids => ["PHID-DREV-xxxxxxx"]
…
Это вернет «authorPHID»: «PHID-USER-xxxxx» и «рецензенты»: ["xxxx", "xxxx", "xxxx"]
…
Я также предлагаю рассмотреть /src/infrastructure/daemon/bot/handler/PhabricatorBotFeedNotificationHandler.php
Теперь код
$stories = $this->getConduit()->callMethodSynchronous( 'feed.query', array( 'limit' => $config_page_size, 'after' => $chrono_key_cursor, 'view' => 'text', ) ); foreach ($stories as $story) { $objects = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => array($story['objectPHID']), ) ); $diff_query_results = $this->getConduit()->callMethodSynchronous( 'differential.query', array( 'phids' => array($story['objectPHID']), )); foreach ($diff_query_results as $diff_query) { $authorResults = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => array($diff_query['authorPHID']), ) ); $message .= ' '.$objects[$story['objectPHID']]['uri']; foreach ($authorResults as $author) { $authorName = $author['name']; print_r ($authorName); } $reviewersResults = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => $diff_query['reviewers'], ) ); foreach ($reviewersResults as $reviewer) { $reviewerName = $reviewer['name']; print_r ($reviewerName ); } }
Я запросил feed.query. и извлекал authorPHID
и objectPHID
если они доступны. С objectPHID
я запросил метод differnetial.query
conduit, чтобы узнать reviewers
и ccs
. ccs
– это массив пользователей, которым необходимо получить кусок сообщения. Затем я использовал метод user.query
conduit для извлечения имен пользователей и сопоставил их с jabber именами пользователей и отправил сообщения.