You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

527 lines
15 KiB

<?php
namespace app\Providers;
use app\Interfaces\IApiMedia;
use app\Providers\RequestURL;
class ApiTelegram implements IApiMedia
{
private $token;
private $url;
private $metodo;
########################################################################
## VARIAVEIS DA CLASSE ##
########################################################################
private $query;
private $requestType;
private $request;
private $params = array();
private $hook;
private $storage = "/var/www/html/aplicativo/audio/";
public $channel = CONF_TELEGRAM_CHANNEL;
public $timeout_client_resposta = CONF_TELEGRAM_TIMEOUT_CLIENT_RESPOSTA;
function __construct()
{
$this->token = CONF_TELEGRAM_AUTH_TOKEN;
$this->url = CONF_TELEGRAM_AUTH_URL;
$this->request = new RequestURL();
}
function convertToWebsocket($msg)
{
}
function enviarMsgIterativaLista($telegram, $mensagem, $nomeButton, $lista, $prex = '')
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"text" => array("body" => utf8_encode("$mensagem")),
"options" => array(
"reply_markup" => array(
"inline_keyboard" => $this->montaOp($lista, $prex)
)
)
);
$this->requestType("POST");
$this->setMetodo('sendMessage');
return $this->exec();
}
return false;
}
function montaOp($lista, $prex = '')
{
$botoes = [];
for ($i = 0; $i < count($lista); $i++) {
array_push(
$botoes,
array(
array(
"text" => utf8_encode("{$lista[$i]['title']}"),
"callback_data" => $prex == "C" ? utf8_encode("{$lista[$i]['title']}") : utf8_encode("{$lista[$i]['sub']}")
),
)
);
}
return $botoes;
}
function enviarMsgIterativaBotao($telegram, $mensagem, $buttons)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"text" => array("body" => utf8_encode("$mensagem")),
"options" => array(
"reply_markup" => array(
"inline_keyboard" => array(
array(
array(
"text" => utf8_encode("/presente"),
"callback_data" => utf8_encode("/presente")
),
)
)
)
)
);
$this->requestType("POST");
$this->setMetodo('sendMessage');
return $this->exec();
}
return false;
}
function enviarMsg($telegram, $mensagem)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"text" => array("body" => "$mensagem")
);
$this->requestType("POST");
$this->setMetodo('sendMessage');
return $this->exec();
}
return false;
}
function enviarContato($telegram, $nome, $contato)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"type" => "contacts",
"contacts" => array(
array(
"name" => array(
"first_name" => "$nome",
"formatted_name" => "$nome"
),
"phones" => array(
array(
"phone" => "$contato",
"type" => "CELL",
"wa_id" => "$contato"
)
)
)
)
);
$this->requestType("POST");
$this->setMetodo('sendContact');
return $this->exec();
}
return false;
}
function enviarLocalizacao($telegram, $longitude, $latitude, $nome = null, $endereco = null)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"longitude" => "$longitude",
"latitude" => "$latitude",
);
$this->requestType("POST");
$this->setMetodo('sendLocation');
return $this->exec();
}
return false;
}
function enviaDocumento($telegram, $link, $titulo = null)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"file" => "$link",
"options" => array(
"caption" => "$titulo"
),
"fileOptions" => array(
"filename" => "$titulo"
)
);
$this->requestType("POST");
$this->setMetodo('sendDocument');
return $this->exec();
}
return false;
}
function enviaImagem($telegram, $link, $titulo = null)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"file" => "$link",
);
$this->requestType("POST");
$this->setMetodo('sendPhoto');
return $this->exec();
}
return false;
}
function enviaSticker($telegram, $link)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"file" => "$link",
);
$this->requestType("POST");
$this->setMetodo('sendSticker');
return $this->exec();
}
return false;
}
function enviaVideo($telegram, $link, $titulo = null)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"file" => "$link",
"options" => array(
"caption" => "$titulo"
)
);
$this->requestType("POST");
$this->setMetodo('sendVideo');
return $this->exec();
}
return false;
}
function enviaAudio($telegram, $link)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
"chatId" => "$telegram",
"file" => "$link",
);
$this->requestType("POST");
$this->setMetodo('sendVoice');
return $this->exec();
}
return false;
}
function baixarMidia($name)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->requestType("GET");
$this->setMetodo('media/' . $name);
$file = $this->storage . $name;
file_put_contents($file, $this->exec());
if (file_exists($file)) {
return $file;
}
}
return false;
}
function setStorage($storage)
{
$this->storage = $storage;
}
/**
* Profile WhatsApp
* @return string
*/
public function getProfile()
{
return $this->hook['from']['first_name'];
}
/**
* Phone WhatsApp
* @return string
*/
public function getPhone()
{
if ($this->hook['chat']['id']) {
return $this->hook['chat']['id'];
} else {
return $this->hook['from']['id'];
}
}
/**
* Returns the type of the message
* @return string|boolean
*/
public function getType()
{
if ($this->hook) {
if (array_key_exists("contact", $this->hook)) {
return 'contacts';
}
if (array_key_exists("location", $this->hook)) {
return 'location';
}
if (array_key_exists("document", $this->hook)) {
return 'document';
}
if (array_key_exists("audio", $this->hook)) {
return 'audio';
}
if (array_key_exists("video", $this->hook)) {
return 'video';
}
if (array_key_exists("sticker", $this->hook)) {
return 'sticker';
}
if (array_key_exists("photo", $this->hook)) {
return 'image';
}
if (array_key_exists("text", $this->hook)) {
return 'text';
}
if (array_key_exists("data", $this->hook)) {
return 'text';
}
return $this->hook['messages'][0]['type'];
}
return false;
}
/**
* Returns the mime of the message
* @return string|boolean
*/
public function getMimetype()
{
if ($this->hook['messages'][0][$this->getType()]['mime_type']) {
return base64_encode($this->hook['messages'][0][$this->getType()]['mime_type']);
}
return false;
}
/**
* Returns the id of the message
* @return string|boolean
*/
public function getId()
{
if ($this->hook && $this->getType()) {
return $this->hook['messages'][0][$this->getType()]['id'];
}
return false;
}
/**
* Returns the (text, body) of the message
* @return string|boolean
*/
public function getIsValidMessage()
{
return true;
}
/**
* Returns the (text, body) of the message
* @return string|boolean
*/
public function getMessage()
{
if ($this->hook['data']) {
return $this->hook['data'];
}
if ($this->hook['text']) {
return $this->hook['text'];
}
$message = $this->hook['data'];
return ($message ? $message : false);
}
/**
* Returns the name of the contact
* @return string|boolean
*/
public function getContactFormatted()
{
$formatted = $this->hook['messages'][0]['contacts'][0]['name']['formatted_name'];
if ($formatted) {
return $formatted;
}
return false;
}
/**
* Returns the phone of the contact
* @return string|boolean
*/
public function getContactPhone()
{
$contact = $this->hook['messages'][0]['contacts'][0]['phones'][0]['wa_id'];
if ($contact) {
return $contact;
}
return false;
}
/**
* Returns the latitude|longitude of the location
* @return string|boolean
*/
public function getGeolocation($type)
{
$geolocation = $this->hook['location'][strtolower($type)];
if ($geolocation) {
return $geolocation;
}
return false;
}
function setHook($hook)
{
$this->hook = $hook;
}
########################################################################
## FUNCOES DO SISTEMA ##
########################################################################
function setMetodo($metodo)
{
$this->metodo = $metodo;
}
/**
* Escreve a query para ser passada para o curl
*
* @param string $query
*/
function setQuery($query)
{
return $this->query .= $query;
}
/**
* retorna a string pronta da query do curl e limpa a variavel.
*
* @return string $query
*/
function getQuery()
{
$query = $this->query;
unset($this->query);
return $query;
}
/**
* Verifica se todos os parametros passados foram completados.
*
* @param array $args
* @return true|false
*/
function getArgs($args)
{
foreach ($args as $value) {
if (!$value) {
return false;
}
}
return true;
}
/**
* Recebe o tipo de Requisi<EFBFBD><EFBFBD>o GET/POST
*
* @return boolean
*/
function requestType($req = null)
{
if (!$req) {
return $this->requestType;
}
if (strtoupper($req) == "GET") {
return $this->requestType = "GET";
} else if (strtoupper($req) == "POST") {
return $this->requestType = "POST";
}
}
function exec()
{
$this->setQuery(json_encode($this->params)); //SET QUERY
$this->request->setUrl($this->url . $this->metodo);
$header = array();
//$header[] = "Authorization: Bearer {$this->token}";
if ($this->requestType == 'POST') {
$header[] = 'Content-Type: application/json';
$this->request->post_field($this->getQuery(), true);
}
$this->request->header($header);
$this->request->method_request($this->requestType);
$response = $this->request->exec_request();
return $this->response($response);
}
function response($result)
{
if ($result) {
if (json_decode($result, true) !== null) {
return json_decode($result, true);
}
return $result;
} else {
return false;
}
}
public function getLinkDownload($host)
{
if ($this->hook['photo']) {
return end($this->hook['photo'])['file_id'];
}
if ($this->hook['sticker']) {
return $this->hook['sticker']['file_id'];
}
if ($this->hook['video']) {
return $this->hook['video']['file_id'];
}
if ($this->hook['audio']) {
return $this->hook['audio']['file_id'];
}
if ($this->hook['document']) {
return $this->hook['document']['file_id'];
}
}
public function retornaTituloDocument($msg)
{
return $this->hook['document']['file_name'];
}
}