Initial commit
This commit is contained in:
commit
35cca5dfa0
|
@ -0,0 +1 @@
|
||||||
|
tags
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "bit/slask",
|
||||||
|
"description": "Slack simple posting utils",
|
||||||
|
"homepage": "https://git.bit5.ru/bit/slack",
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.4"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": ["slack.inc.php"]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?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) . "...";
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue