125 lines
3.1 KiB
PHP
125 lines
3.1 KiB
PHP
|
<?php
|
||
|
define("SLACK_REPLY_MAX_LEN", 3072);
|
||
|
|
||
|
function _slack_init($token, $chan_id, array $fields, $channel_field_name = 'channel')
|
||
|
{
|
||
|
if(!isset($fields['token']))
|
||
|
$fields['token'] = $token;
|
||
|
if(!isset($fields[$channel_field_name]))
|
||
|
$fields[$channel_field_name] = $chan_id;
|
||
|
return $fields;
|
||
|
}
|
||
|
|
||
|
function _slack_curl_exec($ch, $debug)
|
||
|
{
|
||
|
curl_setopt($ch, CURLOPT_VERBOSE, $debug);
|
||
|
|
||
|
$result = curl_exec($ch);
|
||
|
curl_close($ch);
|
||
|
|
||
|
if($debug)
|
||
|
{
|
||
|
echo "SLACK RAW RESP BEGIN\n";
|
||
|
var_dump($result);
|
||
|
echo "SLACK RAW RESP END\n\n";
|
||
|
}
|
||
|
|
||
|
$resp = json_decode($result, true);
|
||
|
|
||
|
if($debug)
|
||
|
{
|
||
|
echo "SLACK PARSED JSON RESP BEGIN\n";
|
||
|
var_dump($resp);
|
||
|
echo "SLACK PARSED JSON RESP END\n";
|
||
|
}
|
||
|
|
||
|
return $resp;
|
||
|
}
|
||
|
|
||
|
function slack_send_file($token, $chan_id, $post_text, $file_path, $mime, $fields = array(), $debug = false)
|
||
|
{
|
||
|
$file_name = basename($file_path);
|
||
|
$file = new \CurlFile($file_path, $mime, $file_name);
|
||
|
|
||
|
$header = array();
|
||
|
$header[] = 'Content-Type: multipart/form-data';
|
||
|
|
||
|
$fields = _slack_init($token, $chan_id, $fields, 'channels');
|
||
|
$fields['file'] = $file;
|
||
|
$fields['filename'] = $file_name;
|
||
|
$fields['title'] = $file_name;
|
||
|
$fields['initial_comment'] = $post_text;
|
||
|
$fields['filetype'] = pathinfo($file_path, PATHINFO_EXTENSION);
|
||
|
|
||
|
$ch = curl_init("https://slack.com/api/files.upload");
|
||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
|
||
|
curl_setopt($ch, CURLOPT_POST, 1);
|
||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
|
||
|
curl_setopt($ch, CURLOPT_MAX_SEND_SPEED_LARGE, 10*1024*1024);
|
||
|
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
|
||
|
|
||
|
return _slack_curl_exec($ch, $debug);
|
||
|
}
|
||
|
|
||
|
function slack_send_message($token, $chan_id, $message, $fields = array(), $debug = false)
|
||
|
{
|
||
|
$ch = curl_init("https://slack.com/api/chat.postMessage");
|
||
|
$fields = _slack_init($token, $chan_id, $fields);
|
||
|
$fields["text"] = $message;
|
||
|
|
||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
|
||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
|
||
|
return _slack_curl_exec($ch, $debug);
|
||
|
}
|
||
|
|
||
|
function slack_send_reply($token, $chan_id, $thread_ts, $message, $fields = array(), $debug = false)
|
||
|
{
|
||
|
$fields["thread_ts"] = $thread_ts;
|
||
|
return slack_send_message($message, $fields, $debug, $token, $chan_id);
|
||
|
}
|
||
|
|
||
|
function slack_send_thread_with_replies($token, $chan_id, $message, array $replies, $fields = array(), $debug = false)
|
||
|
{
|
||
|
$slack_orig_resp = slack_send_message(
|
||
|
$token,
|
||
|
$chan_id,
|
||
|
$message,
|
||
|
$fields,
|
||
|
$debug,
|
||
|
);
|
||
|
|
||
|
if(!isset($slack_orig_resp['ts']))
|
||
|
{
|
||
|
echo "Failed to post to Slack: response contains no 'ts' value to post thread replies\n";
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
$ts = $slack_orig_resp['ts'];
|
||
|
|
||
|
foreach($replies as $reply)
|
||
|
{
|
||
|
slack_send_reply(
|
||
|
$ts,
|
||
|
$reply,
|
||
|
$fields,
|
||
|
$debug,
|
||
|
$token,
|
||
|
$chan_id
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return $ts;
|
||
|
}
|
||
|
|
||
|
function slack_trim_reply($reply, $len = SLACK_REPLY_MAX_LEN)
|
||
|
{
|
||
|
if(strlen($reply) < $len)
|
||
|
return $reply;
|
||
|
return substr($reply, 0, $len - 3) . "...";
|
||
|
}
|
||
|
|