/** * {@inheritDoc} */ public function jsonUnserialize(array $data) { if (!isset($this->data['attachments'])) { return; } for ($i = 0; $i < count($this->data['attachments']); $i++) { $this->data['attachments'][$i] = Attachment::fromData($this->data['attachments'][$i]); } }
/** * @param Message $payload * @param string $channel * * @throws \Doctrine\DBAL\DBALException */ protected function postToSlack(Message $payload, $channel) { $data = []; $data['unfurl_links'] = false; $data['unfurl_media'] = false; $data['parse'] = 'none'; $data['text'] = $payload->getText(); $data['channel'] = $channel; $attachments = $payload->getAttachments(); if (count($attachments)) { $data['attachments'] = array(); } /** @var \T3Bot\Slack\Message\Attachment $attachment */ foreach ($attachments as $attachment) { $data['attachments'][] = Attachment::fromData(['title' => $attachment->getTitle(), 'title_link' => $attachment->getTitleLink(), 'text' => $attachment->getText(), 'fallback' => $attachment->getFallback(), 'color' => $attachment->getColor(), 'pretext' => $attachment->getPretext(), 'author_name' => $attachment->getAuthorName(), 'author_icon' => $attachment->getAuthorIcon(), 'author_link' => $attachment->getAuthorLink(), 'image_url' => $attachment->getImageUrl(), 'thumb_url' => $attachment->getThumbUrl()]); } if (!empty($GLOBALS['config']['slack']['botAvatar'])) { /* @noinspection PhpUndefinedFieldInspection */ $data['icon_emoji'] = $GLOBALS['config']['slack']['botAvatar']; } // since the bot is a real bot, we can't push directly to slack // lets put the message into our messages pool $this->addMessageToQueue($data); }
$command->processChannelCreated($payload->getData()); } }); $client->on('presence_change', function (Slack\Payload $payload) use($client) { if ($payload->getData()['user'] !== $GLOBALS['config']['slack']['botId']) { $command = new \T3Bot\Commands\TellCommand($payload, $client); $command->processPresenceChange($payload->getData()['user'], $payload->getData()['presence']); } }); $client->connect()->then(function () use($client) { echo "Connected!\n"; }); /* @noinspection PhpInternalEntityUsedInspection */ $db = \Doctrine\DBAL\DriverManager::getConnection($GLOBALS['config']['db'], new \Doctrine\DBAL\Configuration()); $loop->addPeriodicTimer(5, function () use($client, $db) { $messages = $db->fetchAll('SELECT * FROM messages ORDER BY id ASC'); foreach ($messages as $message) { $data = json_decode($message['message'], true); $attachments = $data['attachments']; $data['attachments'] = []; foreach ($attachments as $attachment) { $data['attachments'][] = \Slack\Message\Attachment::fromData($attachment); } // process data $messageToSent = new \Slack\Message\Message($client, $data); $client->postMessage($messageToSent); // delete message $db->delete('messages', ['id' => $message['id']]); } }); $loop->run();
/** * @param \T3Bot\Slack\Message|string $messageToSent * @param string $user * @param string $channel the channel id */ public function sendResponse($messageToSent, $user = null, $channel = null) { $data = []; if ($user !== null) { $this->client->apiCall('im.open', ['user' => $user])->then(function (Payload $response) use($messageToSent) { $channel = $response->getData()['channel']['id']; if ($messageToSent instanceof Message) { $data = []; $data['unfurl_links'] = false; $data['unfurl_media'] = false; $data['parse'] = 'none'; $data['text'] = $messageToSent->getText(); $data['channel'] = $channel; $attachments = $messageToSent->getAttachments(); if (count($attachments)) { $data['attachments'] = array(); } /** @var \T3Bot\Slack\Message\Attachment $attachment */ foreach ($attachments as $attachment) { $data['attachments'][] = Attachment::fromData(['title' => $attachment->getTitle(), 'title_link' => $attachment->getTitleLink(), 'text' => $attachment->getText(), 'fallback' => $attachment->getFallback(), 'color' => $attachment->getColor(), 'pretext' => $attachment->getPretext(), 'author_name' => $attachment->getAuthorName(), 'author_icon' => $attachment->getAuthorIcon(), 'author_link' => $attachment->getAuthorLink(), 'image_url' => $attachment->getImageUrl(), 'thumb_url' => $attachment->getThumbUrl()]); } $message = new \Slack\Message\Message($this->client, $data); $this->client->postMessage($message); } elseif (is_string($messageToSent)) { $data = []; $data['unfurl_links'] = false; $data['unfurl_media'] = false; $data['parse'] = 'none'; $data['text'] = $messageToSent; $data['channel'] = $channel; $data['as_user'] = true; $this->client->apiCall('chat.postMessage', $data); } }); } else { $channel = $channel !== null ? $channel : $this->payload->getData()['channel']; if ($messageToSent instanceof Message) { $data['unfurl_links'] = false; $data['unfurl_media'] = false; $data['parse'] = 'none'; $data['text'] = $messageToSent->getText(); $data['channel'] = $channel; $attachments = $messageToSent->getAttachments(); if (count($attachments)) { $data['attachments'] = array(); } /** @var \T3Bot\Slack\Message\Attachment $attachment */ foreach ($attachments as $attachment) { $data['attachments'][] = Attachment::fromData(['title' => $attachment->getTitle(), 'title_link' => $attachment->getTitleLink(), 'text' => $attachment->getText(), 'fallback' => $attachment->getFallback(), 'color' => $attachment->getColor(), 'pretext' => $attachment->getPretext(), 'author_name' => $attachment->getAuthorName(), 'author_icon' => $attachment->getAuthorIcon(), 'author_link' => $attachment->getAuthorLink(), 'image_url' => $attachment->getImageUrl(), 'thumb_url' => $attachment->getThumbUrl()]); } $message = new \Slack\Message\Message($this->client, $data); $this->client->postMessage($message); } elseif (is_string($messageToSent)) { $data['unfurl_links'] = false; $data['unfurl_media'] = false; $data['parse'] = 'none'; $data['text'] = $messageToSent; $data['channel'] = $channel; $data['as_user'] = true; $this->client->apiCall('chat.postMessage', $data); } } }
public function testGetThumbUrl() { $attachment = Attachment::fromData(['thumb_url' => $this->faker->url]); $this->assertEquals($attachment->data['thumb_url'], $attachment->getThumbUrl()); }