public function handle(StringizableInterface $event)
 {
     // URLにキーが含まれているため機密情報扱い
     $url = env('SLACK_INCOMING_WEBHOOK_URL');
     $data = ['text' => (string) $event, 'username' => 'Hubサイト経由', 'channel' => '@hirokws', 'icon_emoji' => ':heavy_check_mark:'];
     $this->poster->post($url, $data);
 }
 /**
  * 受け取ったイベントをTrelloのリストにログする
  *
  * @param  MonitorableInterface  $event
  * @return void
  */
 public function handle(MonitorBaseEvent $event)
 {
     // サイト状態リスト上のカードを取得
     $url = 'https://trello.com/1/lists/' . env('TRELLO_SITES_STATUS_LIST') . '/cards' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN');
     if (false === ($result = $this->getter->get($url))) {
         \Log::notice('TrelloからWebサイト監視リストの情報が取得できませんでした。');
         return;
     }
     $cards = $this->converter->convert($result);
     foreach ($cards as $card) {
         if ($card['name'] === $event->url) {
             $updateCard = $card;
             break;
         }
     }
     if (isset($updateCard)) {
         // 既存ラベル色取得、緑と赤は削除
         $labels = array_diff(array_column($updateCard['labels'], 'color'), ['green', 'red']);
         $labelString = implode(',', $labels);
         // 既存カード更新
         if ($event instanceof SiteUpped) {
             // サイト復活時
             // ラベル色緑設定
             $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/labels' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . trim($labelString . ',green', ',');
             $result = $this->putter->put($url);
             // 説明文からダウン時間情報削除
             $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode(trim(preg_replace('/<.+より停止中 >/u', '', $updateCard['desc'])));
             $result = $this->putter->put($url);
         } else {
             // サイトダウン時
             // ラベル色赤設定
             $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/labels' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . trim($labelString . ',red', ',');
             $result = $this->putter->put($url);
             // 説明文にダウン時間情報追加
             $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode('< ' . $event->time->toDateTimeString() . " より停止中 >\n" . $updateCard['desc']);
             $result = $this->putter->put($url);
         }
     } else {
         // 新規カード追加
         $url = 'https://trello.com/1/cards/' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&idList=' . env('TRELLO_SITES_STATUS_LIST') . '&name=' . urlencode($event->url) . '&labels=' . ($event instanceof SiteUpped ? 'green' : 'red');
         $newCard = $this->converter->convert($this->poster->post($url));
         if ($event instanceof SiteDowned) {
             // 説明文のダウン時間情報更新
             $url = 'https://trello.com/1/cards/' . $newCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode('< ' . $event->time->toDateTimeString() . " より停止中 >\n");
             $result = $this->putter->put($url);
         }
     }
 }
 /**
  * タスクにリマインダーを設定する
  *
  * @param array $task 1タスクを表す配列
  * @param Carbon $date リマインダー設定日時
  */
 private function createReminder($task, Carbon $date)
 {
     $newReminder['task_id'] = $task['id'];
     $newReminder['date'] = $date->toIso8601String();
     $url = 'a.wunderlist.com/api/v1/reminders';
     $this->poster->post($url, $newReminder, $this->tokens);
 }
 /**
  * 受け取ったイベントの内容を実行する
  *
  * @param  MonitorableInterface  $event
  * @return void
  */
 public function handle(CardTaskKicked $event)
 {
     // 実行中リストへ移動
     $url = 'https://trello.com/1/cards/' . $event->id . '/idList' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . env('TRELLO_BATCH_EXECUTING_LIST');
     $updatedCard = $this->putter->put($url);
     // コマンド実行、実行コード(通常正常時0)が返ってくる
     $result = $this->executor->execute($event->task);
     // エラーの場合のみ、コメントとして実行結果を追加
     if ($result !== 0) {
         // メッセージをログしておく
         \Log::alert($this->executor->getMessage());
         // コメント長の制限は1から16384だが、文字数かバイト数か不明
         // そのためコメント長は未チェック
         $url = 'https://trello.com/1/cards/' . $event->id . '/actions/comments' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&text=' . urlencode($this->executor->getMessage());
         $updatedCard = $this->poster->post($url);
     }
     // 実行を終えたので、待機リストへ移動
     $url = 'https://trello.com/1/cards/' . $event->id . '/idList' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . env('TRELLO_BATCH_WAIT_STACK_LIST');
     $updatedCard = $this->putter->put($url);
 }
 /**
  * 受け取ったイベントをTrelloのリストにログする
  *
  * @param  HubConnectionBaseEvent  $event
  */
 public function handle(HubConnectionBaseEvent $event)
 {
     $url = 'https://trello.com/1/cards/' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&idList=' . env('TRELLO_LOG_LIST_ID') . '&name=' . urlencode($event);
     // 生成したカード情報がJSONで返ってくるが、今回は使用しない
     $this->poster->post($url);
 }