connorvg / php-slack
Requires
- php: >=5.3.0
Suggests
- connorvg/laravel-permissions: A Laravel permissions package that uses keys rather than roles
- connorvg/laravel-wolframalpha: A Laravel wrapper for the Wolfram|Alpha API
- connorvg/php-wtf: A PHP implementation of my WholeTextFunctions library
This package is not auto-updated.
Last update: 2016-08-30 15:02:30 UTC
README
PHP-Slack
一个为 Slack API 设计的 Eloquent ORM 风格的 PHP 实现,并提供 Laravel 绑定以帮助 Laravel 爱好者。
支持的 API 函数
users
list
channels
history
list
mark
files
list
im
history
list
groups
history
list
search
all
files
messages
chat
postMessage
auth
test
使用方法
如果您不使用 Laravel,则需要将 Slack API 令牌传递给 Slack 构造函数。
每个(非简单)API 调用都从一个 prepare 函数开始,这是您声明方法的地点。这样做:
Slack::prepare('COMMAND');
这将返回一个 SlackPayload 对象,稍后将用于属性分配并发送到 api.slack。
注意:如果您传递给 prepare 的命令格式不正确或不受支持,则返回值将为 NULL
一旦您有了 SlackPayload 对象,您就可以以非常自然的方式做任何事情。您只需设置变量(参考 Slack API,这因命令而异)然后发送。
要设置变量,操作非常简单。只需这样做:
payloadObject->set($key, $val);
您还可以这样做:
payloadObject->set(['key1' => 'value1', 'key2' => 'value2' /* etc */]);
要发送它,您只需这样做:
$response = payloadObject->send();
响应对象将包含一个与 Slack API JSON 响应等效的 PHP 数组。
您可能想要检查是否有错误,只需这样做:
$hasError = Slack::hasError($payloadObject); // returns a bool
这允许您,如果您有信心一切都会正确无误,这样做:
$lastTenMessages = Slack::prepare('channels.history')->set(['channel' => 'CHANNEL_CODE', 'count' => 10])->send();
注意:SlackPayload 对象中的设置器和辅助函数总是返回其自身以允许链式调用
辅助函数
需要注意的是,有几个辅助方法,包括特殊用途和通用用途。
通用$payloadObject->message
接收:String 或 Array。
这将自动将消息设置为附件或文本对象,具体取决于您发送的数据类型。Array -> Attachment,String -> Text。
$payloadObject->channel
设置目标频道。
$payloadObject->username
和$payloadObject->from
设置机器人的用户名。
$payloadObject->to
接收:String 或 Array。
这将自动将 'NAME: ' 应用到发送消息的开头,并带有格式化的用户链接。如果传递了一个数组,则将按如下方式格式化:'USER1, USER2, USER3: '。
$payloadObject->emoji
设置机器人的图标(仅限表情符号,例如:': octocat :' 不要有空格)。
$payloadObject->icon
设置机器人的图标(仅限 URL,例如:'example.com/example.png')。
Slack::message
接收:$message (String 或 Array),$channel,$from,$to,$icon_emoji,$icon_url。
这将自动根据给定参数创建消息,并返回 SlackPayload。
响应
在响应对象方面,您有两个选择,默认是一个直接表示 JSON 响应的数组。第二种选择是“动态响应”,允许您以这种方式访问数据:$response->members[0]->name
而不是 $response['members'][0]['name']
。
要启用动态响应,必须通过 config/app.php
中的 slack.dynamic
bool 配置来实现。
实用工具
我实现的 Slack 中一个主要的添加功能是“实用工具”功能。这允许我们非常快速地轮询 Slack API 并缓存数据,这样每次使用时我们就不必重新轮询 Slack。您甚至可以通过这样做来清除缓存
// Clear the full cache $utilities->clear(); // Clear a set of key's caches $utilities->clear([ 'users.list', 'channels.list' /* etc */ ]); // Clear one key's cache $utilities->clear('files.list');
这个类是在 Slack 实例级别上访问的。基本上,只需这样做
// For an instance $slack->utilities(); // For the Laravel Facade Slack::utilities();
实用工具包含获取所有列表的方法(只需使用它们的初始键即可)
// Gets all users $utilities->users(); // Gets all groups $utilities->groups(); /* etc */
这些函数中的每一个都有一个相应的非复数版本,允许您指定一个目标
// A user public function user($name = null, $id = null); // A channel public function channel($name = null, $id = null); // A file public function file($name = null, $id = null); // An im public function im($id = null, $user = null); // A group public function group($name = null, $id = null);
最后,我们有特定于身份验证的函数
// Does $slack->prepare('auth.test')->send() public function auth() // Returns the 'url' param from the 'auth.test' packet public function auth_url() // Returns the 'team' param from the 'auth.test' packet public function auth_team() // Returns the 'team_id' param from the 'auth.test' packet public function auth_team_id() // Returns the 'user' param from the 'auth.test' packet public function auth_user() // Returns the 'user_id' param from the 'auth.test' packet public function auth_user_id()
入站 Webhook(从 Slack 视角看输出的 Webhook!)
对入站 Webhook 的支持感觉非常自然,就像这个包的输出 API 那样。您需要做的只是将 API 请求的参数(来自 Slack 的发送)传递给一个 SlackIncoming 对象。在 Laravel 中,我们简单地这样做
$packet = new ConnorVG\Slack\SlackIncoming(Input::all());
有了这个包,我们可以做很多酷的事情。但最重要的还是这些
$errored = $packet->hasError(); $slack = $packet->slack();
如果 $errored
为真,则表示数据格式不正确或数据缺失,这是一个假请求(非 Slack 请求)的迹象。
如果 $slack
为 null,则表示该数据包来自非验证源(根据您对 Slack 的初始配置确定)。
现在我们已经解决了这个问题,您只需这样做
$slack->ANY_SLACK_FEATURE();
因为 $slack 对象是一个完整的 Slack 实例(就像您自己创建的一样),并设置了正确的 API 密钥来响应用户,随时可以开始。
我们现在需要知道的是 $packet
的内容,内容是 Slack 发送给您的所有内容。这包括它来自哪个频道 ID、来自哪个用户 ID、发送了什么文本等。
有一点需要注意,它与 Slack 发送的常规内容略有不同,我实际上在 source_text
中存储接收到的文本,并将文本作为一个格式化文本,基本上移除了 trigger_word
。
要访问这些变量中的任何一个,只需这样做
$packet->channel_id; $packet->user; $packet->token;
推荐
这可以与 ConnorVG/PHP-WTF 一起使用得非常好,一个用法的例子如下
命令
WTF::addCommand('wolframalpha Query:source', function($wtf, $executer, $args) { $answer = WA::easyQuery($args[0]); $executer->slack()->message($answer, $executer->channel_id, 'Wolfram|Alpha', $executer->user_id, ':equation')->send(); }); WTF::addAlias('wolframalpha', 'wa');
Incoming Webhook
Route::post('slack', function() { $packet = new ConnorVG\Slack\SlackIncoming(Input::all()); $ret = WTF::Execute($packet->text, $packet); if (!$ret[0]) { /* THERE WAS AN ERROR */ } return ''; });
Webhook slack.com/services/new -> DIY Integrations & Customisations -> Outgoing WebHooks
用法
注意:此示例使用 ConnorVG/Laravel-WolframAlpha 和 laravel/laravel
Composer 设置
在 composer.json
文件的 require
键中添加以下内容
"connorvg/php-slack": "dev-master"
运行 Composer 更新命令
$ composer update
注意:我建议您不要使用 dev-master 版本,并指定一个稳定版本(例如:1.0)
Laravel
如果您使用 Laravel,请添加此服务提供程序
'ConnorVG\Slack\SlackServiceProvider'
同时,此 Facade
'Slack' => 'ConnorVG\Slack\SlackFacade'
您需要将您的首选项添加到 config/app.php
'slack' => array( // Your unique Slack API token 'apikey' => 'XXX', // Whether or not to limit incoming webhook messages to verified only 'verified_only' => true, // The tokens you wish to associate with API keys 'installs' => [ 'TOKEN' => 'APIKEY' ], // Wether or not to use my Dynamic Response model 'dynamic' => true )