/** * @param SlackTimestamp $slackTimestamp * @return SlackMessage[] */ public function getMessages(SlackTimestamp $slackTimestamp) { $response = $this->commander->execute('channels.history', ['channel' => $this->channel, 'oldest' => $slackTimestamp->getValue()]); $responseBody = $response->getBody(); $responses = []; if (isset($responseBody['messages'])) { foreach ($responseBody['messages'] as $message) { \array_push($responses, new SlackMessage($message['text'], SlackTimestamp::createFromSlackString($message['ts']))); } } return $responses; }
public function testPollRespondsToKeyWordMessage() { $slackTimestamp = SlackTimestamp::createFromDatetimeAndCounter(new \DateTime('-1 hour'), 0); $this->mockSince->expects(self::once())->method('getLastTime')->willReturn($slackTimestamp); $this->mockSlack->expects(self::once())->method('getMessages')->willReturn([new SlackMessage(Input::KEYWORD . ' does respond to', $slackTimestamp)]); $message = $this->input->poll(); self::assertInstanceOf(InputMessage::class, $message); self::assertFalse($message->isEmpty()); self::assertEquals(' does respond to', $message->toString()); }
/** * @return MessageInterface */ public function poll() { $messages = $this->slack->getMessages($this->since->getLastTime()); $returnValue = InputMessage::createFromNothing(); foreach ($messages as $message) { if ($returnValue->isEmpty() === true && \strtolower(\substr($message->toString(), 0, \strlen(self::KEYWORD))) == self::KEYWORD) { $this->logger->info(self::class . ": " . $message->toString()); $returnValue = InputMessage::createFromString(\substr($message->toString(), \strlen(self::KEYWORD))); $this->since->update($message->getTimestamp()); } } if ($returnValue->isEmpty()) { $this->logger->info(self::class . ': No Message', ['messages' => $messages]); $this->since->update(SlackTimestamp::createNow()); } return $returnValue; }
/** * @param $timestamp * @return SlackTimestamp */ private function createSinceFromTimestamp($timestamp) { return SlackTimestamp::createFromSlackString($timestamp); }