slack/slack.inc.php

125 lines
3.1 KiB
PHP
Raw Permalink Normal View History

2023-10-23 19:02:35 +03:00
<?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) . "...";
}