4242 lines
110 KiB
Bash
4242 lines
110 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
#-----------------------------------------------------------------------------------------------------------
|
||
|
|
# DATA: 07 de Março de 2017
|
||
|
|
# SCRIPT: ShellBot.sh
|
||
|
|
# VERSÃO: 5.3
|
||
|
|
# DESENVOLVIDO POR: Juliano Santos [SHAMAN]
|
||
|
|
# PÁGINA: http://www.shellscriptx.blogspot.com.br
|
||
|
|
# FANPAGE: https://www.facebook.com/shellscriptx
|
||
|
|
# GITHUB: https://github.com/shellscriptx
|
||
|
|
# CONTATO: shellscriptx@gmail.com
|
||
|
|
#
|
||
|
|
# DESCRIÇÃO: ShellBot é uma API não-oficial desenvolvida para facilitar a criação de
|
||
|
|
# bots na plataforma TELEGRAM. Constituída por uma coleção de métodos
|
||
|
|
# e funções que permitem ao desenvolvedor:
|
||
|
|
#
|
||
|
|
# * Gerenciar grupos, canais e membros.
|
||
|
|
# * Enviar mensagens, documentos, músicas, contatos e etc.
|
||
|
|
# * Enviar teclados (KeyboardMarkup e InlineKeyboard).
|
||
|
|
# * Obter informações sobre membros, arquivos, grupos e canais.
|
||
|
|
# * Para mais informações consulte a documentação:
|
||
|
|
#
|
||
|
|
# https://github.com/shellscriptx/ShellBot/wiki
|
||
|
|
#
|
||
|
|
# O ShellBot mantém o padrão da nomenclatura dos métodos registrados da
|
||
|
|
# API original (Telegram), assim como seus campos e valores. Os métodos
|
||
|
|
# requerem parâmetros e argumentos para a chamada e execução. Parâmetros
|
||
|
|
# obrigatórios retornam uma mensagem de erro caso o argumento seja omitido.
|
||
|
|
#
|
||
|
|
# NOTAS: Desenvolvida na linguagem Shell Script, utilizando o interpretador de
|
||
|
|
# comandos BASH e explorando ao máximo os recursos built-in do mesmo,
|
||
|
|
# reduzindo o nível de dependências de pacotes externos.
|
||
|
|
#-----------------------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
# Verifica se a API já foi instanciada.
|
||
|
|
[[ $_SHELLBOT_SH_ ]] && return 1
|
||
|
|
|
||
|
|
# Verifica se os pacotes necessários estão instalados.
|
||
|
|
for _pkg_ in curl jq getopt; do
|
||
|
|
# Se estiver ausente, trata o erro e finaliza o script.
|
||
|
|
if ! which $_pkg_ &>/dev/null; then
|
||
|
|
echo "ShellBot.sh: erro: '$_pkg_' O pacote requerido não está instalado." 1>&2
|
||
|
|
exit 1 # Status
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Script que importou a API.
|
||
|
|
declare -r _BOT_SCRIPT_=$(basename "$0")
|
||
|
|
|
||
|
|
# API inicializada.
|
||
|
|
declare -r _SHELLBOT_SH_=1
|
||
|
|
|
||
|
|
# Desabilitar globbing
|
||
|
|
set -f
|
||
|
|
|
||
|
|
# curl parâmetros
|
||
|
|
declare -r _CURL_OPT_='--silent --request'
|
||
|
|
|
||
|
|
# Erros registrados da API (Parâmetros/Argumentos)
|
||
|
|
declare -r _ERR_TYPE_BOOL_='Tipo incompatível: Suporta somente "true" ou "false".'
|
||
|
|
declare -r _ERR_TYPE_PARSE_MODE_='Formatação inválida: Suporta somente "markdown" ou "html".'
|
||
|
|
declare -r _ERR_TYPE_INT_='Tipo incompatível: Suporta somente inteiro.'
|
||
|
|
declare -r _ERR_TYPE_FLOAT_='Tipo incompatível: Suporta somente float.'
|
||
|
|
declare -r _ERR_TYPE_POINT_='Máscara inválida: Deve ser “forehead”, “eyes”, “mouth” ou “chin”.'
|
||
|
|
declare -r _ERR_ACTION_MODE_='Ação inválida: A definição da ação não é suportada.'
|
||
|
|
declare -r _ERR_PARAM_REQUIRED_='Opção requerida: Verique se o(s) parâmetro(s) ou argumento(s) obrigatório(s) estão presente(s).'
|
||
|
|
declare -r _ERR_TOKEN_UNAUTHORIZED_='Não autorizado: Verifique se possui permissões para utilizar o token.'
|
||
|
|
declare -r _ERR_TOKEN_INVALID_='TOKEN inválido: Verique o número do token e tente novamente.'
|
||
|
|
declare -r _ERR_FUNCTION_NOT_FOUND_='Função inválida: Verique se o nome está correto ou se a função existe.'
|
||
|
|
declare -r _ERR_BOT_ALREADY_INIT_='Ação não permitida: O bot já foi inicializado.'
|
||
|
|
declare -r _ERR_FILE_NOT_FOUND_='Arquivo não encontrado: Não foi possível ler o arquivo especificado.'
|
||
|
|
declare -r _ERR_DIR_WRITE_DENIED_='Permissão negada: Não é possível gravar no diretório.'
|
||
|
|
declare -r _ERR_DIR_NOT_FOUND_='Não foi possível acessar: Diretório não encontrado.'
|
||
|
|
declare -r _ERR_FILE_DOWNLOAD_='Falha no download: Arquivo não encontrado.'
|
||
|
|
declare -r _ERR_FILE_INVALID_ID_='ID inválido: Arquivo não encontrado.'
|
||
|
|
declare -r _ERR_UNKNOWN_='Erro desconhecido: Ocorreu uma falha inesperada. Reporte o problema ao desenvolvedor.'
|
||
|
|
declare -r _ERR_SERVICE_NOT_ROOT_='Acesso negado: Requer privilégios de root.'
|
||
|
|
declare -r _ERR_SERVICE_EXISTS_='Erro ao criar o serviço: O nome do serviço já existe.'
|
||
|
|
declare -r _ERR_SERVICE_SYSTEMD_NOT_FOUND_='Erro ao ativar: O sistema não possui suporte ao gerenciamento de serviços "systemd".'
|
||
|
|
declare -r _ERR_SERVICE_USER_NOT_FOUND_='Usuário não encontrado: A conta de usuário informada é inválida.'
|
||
|
|
declare -r _ERR_VAR_NAME='O identificador da variável é inválido.'
|
||
|
|
|
||
|
|
Json() { jq "$1" <<< "${*:2}" 2>/dev/null | sed -r 's/(^"|"$)//g'; }
|
||
|
|
GetObjValue(){ sed -nr 's/^\s+"[a-z_]+":\s+"?(.+[^",])*"?,?$/\1/p' | sed ':a;N;s/\n/|/;ta'; }
|
||
|
|
JsonStatus(){ [[ $(jq '.ok' <<< "$*") == true ]] && return 0 || return 1; }
|
||
|
|
|
||
|
|
MessageError()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local err_message err_param err_line err_func assert ind
|
||
|
|
|
||
|
|
# A variável 'BASH_LINENO' é dinâmica e armazena o número da linha onde foi expandida.
|
||
|
|
# Quando chamada dentro de um subshell, passa ser instanciada como um array, armazenando diversos
|
||
|
|
# valores onde cada índice refere-se a um shell/subshell. As mesmas caracteristicas se aplicam a variável
|
||
|
|
# 'FUNCNAME', onde é armazenado o nome da função onde foi chamada.
|
||
|
|
|
||
|
|
# Obtem o índice da função na hierarquia de chamada.
|
||
|
|
[[ ${FUNCNAME[1]} == CheckArgType ]] && ind=2 || ind=1
|
||
|
|
err_line=${BASH_LINENO[$ind]} # linha
|
||
|
|
err_func=${FUNCNAME[$ind]} # função
|
||
|
|
|
||
|
|
# Lê o tipo de ocorrência.
|
||
|
|
# TG - Erro externo retornado pelo core do telegram.
|
||
|
|
# API - Erro interno gerado pela API do ShellBot.
|
||
|
|
case $1 in
|
||
|
|
TG)
|
||
|
|
# arquivo Json
|
||
|
|
err_param="$(Json '.error_code' ${*:2})"
|
||
|
|
err_message="$(Json '.description' ${*:2})"
|
||
|
|
;;
|
||
|
|
API)
|
||
|
|
err_param="${3:--}: ${4:--}"
|
||
|
|
err_message="$2"
|
||
|
|
assert=1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
# Imprime erro
|
||
|
|
printf "%s: erro: linha %s: %s: %s: %s\n" "${_BOT_SCRIPT_}" \
|
||
|
|
"${err_line:--}" \
|
||
|
|
"${err_func:--}" \
|
||
|
|
"${err_param:--}" \
|
||
|
|
"${err_message:-$_ERR_UNKNOWN_}" 1>&2
|
||
|
|
|
||
|
|
# Finaliza script/thread em caso de erro interno, caso contrário retorna 1
|
||
|
|
[[ $assert ]] && exit 1 || return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
CheckArgType(){
|
||
|
|
|
||
|
|
local ctype="$1"
|
||
|
|
local param="$2"
|
||
|
|
local value="$3"
|
||
|
|
|
||
|
|
# CheckArgType recebe os dados da função chamadora e verifica
|
||
|
|
# o dado recebido com o tipo suportado pelo parâmetro.
|
||
|
|
# É retornado '0' para sucesso, caso contrário uma mensagem
|
||
|
|
# de erro é retornada e o script/thread é finalizado com status '1'.
|
||
|
|
case $ctype in
|
||
|
|
var) [[ $value =~ ^[a-zA-Z_]+[a-zA-Z0-9_]*$ ]] || MessageError API "$_ERR_VAR_NAME" "$param" "$value";;
|
||
|
|
int) [[ $value =~ ^[0-9]+$ ]] || MessageError API "$_ERR_TYPE_INT_" "$param" "$value";;
|
||
|
|
float) [[ $value =~ ^-?[0-9]+\.[0-9]+$ ]] || MessageError API "$_ERR_TYPE_FLOAT_" "$param" "$value";;
|
||
|
|
bool) [[ $value =~ ^(true|false)$ ]] || MessageError API "$_ERR_TYPE_BOOL_" "$param" "$value";;
|
||
|
|
token) [[ $value =~ ^[0-9]+:[a-zA-Z0-9_-]+$ ]] || MessageError API "$_ERR_TOKEN_INVALID_" "$param" "$value";;
|
||
|
|
file) [[ $value =~ ^@ && ! -f ${value#@} ]] && MessageError API "$_ERR_FILE_NOT_FOUND_" "$param" "$value";;
|
||
|
|
parsemode) [[ $value =~ ^(markdown|html)$ ]] || MessageError API "$_ERR_TYPE_PARSE_MODE_" "$param" "$value";;
|
||
|
|
point) [[ $value =~ ^(forehead|eyes|mouth|chin)$ ]] || MessageError API "$_ERR_TYPE_POINT_" "$param" "$value";;
|
||
|
|
action) [[ $value =~ ^(typing|
|
||
|
|
upload_photo|
|
||
|
|
record_video|
|
||
|
|
upload_video|
|
||
|
|
record_audio|
|
||
|
|
upload_audio|
|
||
|
|
upload_document|
|
||
|
|
find_location|
|
||
|
|
record_video_note|
|
||
|
|
upload_video_note)$ ]] || MessageError API "$_ERR_ACTION_MODE_" "$param" "$value";;
|
||
|
|
esac
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
FlushOffset()
|
||
|
|
{
|
||
|
|
local first_id last_id cod end jq_obj
|
||
|
|
|
||
|
|
# Sem erro
|
||
|
|
cod=0
|
||
|
|
update_id=0
|
||
|
|
|
||
|
|
while [[ $update_id ]]
|
||
|
|
do
|
||
|
|
# Lê as atualizações do offset atual. É possível listar no máximo 100 objetos por offset.
|
||
|
|
if jq_obj=$(ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext))
|
||
|
|
then
|
||
|
|
# Lê os IDs das atualizações disponíveis, salva o primeiro e último elemento da lista.
|
||
|
|
# Interrompe o laço se não houver mais atualizações.
|
||
|
|
unset update_id
|
||
|
|
update_id=($(Json '.result|.[]|.update_id' $jq_obj))
|
||
|
|
|
||
|
|
first_id=${first_id:-$update_id}
|
||
|
|
end=$(ShellBot.OffsetEnd)
|
||
|
|
((end > 0)) && last_id=$end
|
||
|
|
else
|
||
|
|
# Seta o erro e finaliza o laço em caso de falha na chamada do método.
|
||
|
|
cod=1
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Retorna '0' se não houver registro.
|
||
|
|
# Saída: 0|0
|
||
|
|
echo "${first_id:-0}|${last_id:-0}"
|
||
|
|
|
||
|
|
# Desativa a flag
|
||
|
|
unset _FLUSH_OFFSET_
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $cod
|
||
|
|
}
|
||
|
|
|
||
|
|
CreateUnitService()
|
||
|
|
{
|
||
|
|
local service=${1%.*}.service
|
||
|
|
local ok='\033[0;32m[OK]\033[0;m'
|
||
|
|
local fail='\033[0;31m[FALHA]\033[0;m'
|
||
|
|
|
||
|
|
((UID == 0)) || MessageError API "$_ERR_SERVICE_NOT_ROOT_"
|
||
|
|
|
||
|
|
# O modo 'service' requer que o sistema de gerenciamento de processos 'systemd'
|
||
|
|
# esteja presente para que o Unit target seja linkado ao serviço.
|
||
|
|
if ! which systemd &>/dev/null; then
|
||
|
|
MessageError API "$_ERR_SERVICE_SYSTEMD_NOT_FOUND_"; fi
|
||
|
|
|
||
|
|
|
||
|
|
# Se o serviço existe.
|
||
|
|
test -e /lib/systemd/system/$service && \
|
||
|
|
MessageError API "$_ERR_SERVICE_EXISTS_" "$service"
|
||
|
|
|
||
|
|
# Gerando as configurações do target.
|
||
|
|
cat > /lib/systemd/system/$service << _eof
|
||
|
|
[Unit]
|
||
|
|
Description=$1 - (SHELLBOT)
|
||
|
|
After=network-online.target
|
||
|
|
|
||
|
|
[Service]
|
||
|
|
User=$2
|
||
|
|
WorkingDirectory=$PWD
|
||
|
|
ExecStart=/bin/bash $1
|
||
|
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||
|
|
ExecStop=/bin/kill -KILL \$MAINPID
|
||
|
|
KillMode=process
|
||
|
|
Restart=on-failure
|
||
|
|
RestartPreventExitStatus=255
|
||
|
|
Type=simple
|
||
|
|
|
||
|
|
[Install]
|
||
|
|
WantedBy=multi-user.target
|
||
|
|
_eof
|
||
|
|
|
||
|
|
[[ $? -eq 0 ]] && {
|
||
|
|
|
||
|
|
printf '%s foi criado com sucesso !!\n' $service
|
||
|
|
|
||
|
|
ln -s /lib/systemd/system/$service /etc/systemd/system/$service
|
||
|
|
systemctl daemon-reload
|
||
|
|
|
||
|
|
echo -n "Habilitando..."
|
||
|
|
systemctl enable $service &>/dev/null && echo -e $ok || \
|
||
|
|
{ echo -e $fail; MessageError API; }
|
||
|
|
|
||
|
|
sed -i -r '/^\s*ShellBot.init\s/s/\s--?(s(ervice)?|u(ser)?\s+\w+)\b//g' "$1"
|
||
|
|
|
||
|
|
echo -n "Iniciando..."
|
||
|
|
systemctl start $service &>/dev/null && {
|
||
|
|
|
||
|
|
echo -e $ok
|
||
|
|
systemctl status $service
|
||
|
|
echo -e "\nUso: sudo systemctl {start|stop|restart|reload|status} $service"
|
||
|
|
|
||
|
|
} || echo -e $fail
|
||
|
|
|
||
|
|
} || MessageError API
|
||
|
|
|
||
|
|
exit 0
|
||
|
|
}
|
||
|
|
|
||
|
|
# Inicializa o bot, definindo sua API e _TOKEN_.
|
||
|
|
ShellBot.init()
|
||
|
|
{
|
||
|
|
# Verifica se o bot já foi inicializado.
|
||
|
|
[[ $_SHELLBOT_INIT_ ]] && MessageError API "$_ERR_BOT_ALREADY_INIT_"
|
||
|
|
|
||
|
|
local enable_service user_unit _jq_bot_info
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 't:mfsu:' \
|
||
|
|
--longoptions 'token:,
|
||
|
|
monitor,
|
||
|
|
flush,
|
||
|
|
service,
|
||
|
|
user:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-t|--token)
|
||
|
|
CheckArgType token "$1" "$2"
|
||
|
|
declare -gr _TOKEN_="$2" # TOKEN
|
||
|
|
declare -gr _API_TELEGRAM_="https://api.telegram.org/bot$_TOKEN_" # API
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--monitor)
|
||
|
|
# Ativa modo monitor
|
||
|
|
declare -gr _BOT_MONITOR_=1
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-f|--flush)
|
||
|
|
# Define a FLAG flush para o método 'ShellBot.getUpdates'. Se ativada, faz com que
|
||
|
|
# o método obtenha somente as atualizações disponíveis, ignorando a extração dos
|
||
|
|
# objetos JSON e a inicialização das variáveis.
|
||
|
|
declare -x _FLUSH_OFFSET_=1
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-s|--service)
|
||
|
|
enable_service=1
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-u|--user)
|
||
|
|
if ! id "$2" &>/dev/null; then
|
||
|
|
MessageError API "$_ERR_SERVICE_USER_NOT_FOUND_" "[-u, --user]" "$2"; fi
|
||
|
|
|
||
|
|
user_unit="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetro obrigatório.
|
||
|
|
[[ $_TOKEN_ ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --token]"
|
||
|
|
[[ $user_unit && ! $enable_service ]] && MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --service]"
|
||
|
|
[[ $enable_service ]] && CreateUnitService "$_BOT_SCRIPT_" "${user_unit:-$USER}"
|
||
|
|
|
||
|
|
# Um método simples para testar o token de autenticação do seu bot.
|
||
|
|
# Não requer parâmetros. Retorna informações básicas sobre o bot em forma de um objeto Usuário.
|
||
|
|
|
||
|
|
ShellBot.getMe()
|
||
|
|
{
|
||
|
|
# Chama o método getMe passando o endereço da API, seguido do nome do método.
|
||
|
|
local jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.})
|
||
|
|
|
||
|
|
_jq_bot_info=$jq_obj
|
||
|
|
|
||
|
|
# Verifica o status de retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
# Retorna as informações armazenadas em "result".
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getMe &>/dev/null || MessageError API "$_ERR_TOKEN_UNAUTHORIZED_" '[-t, --token]'
|
||
|
|
|
||
|
|
# Salva as informações do bot.
|
||
|
|
_BOT_INFO_[0]=$_TOKEN_
|
||
|
|
_BOT_INFO_[1]=$(Json '.result.id' $_jq_bot_info)
|
||
|
|
_BOT_INFO_[2]=$(Json '.result.first_name' $_jq_bot_info)
|
||
|
|
_BOT_INFO_[3]=$(Json '.result.username' $_jq_bot_info)
|
||
|
|
|
||
|
|
# Bot inicializado
|
||
|
|
declare -gr _BOT_INFO_
|
||
|
|
declare -gr _SHELLBOT_INIT_=1
|
||
|
|
|
||
|
|
# SHELLBOT (FUNÇÕES)
|
||
|
|
# Inicializa as funções para chamadas aos métodos da API do telegram.
|
||
|
|
ShellBot.ListUpdates(){ echo ${!update_id[@]}; }
|
||
|
|
ShellBot.TotalUpdates(){ echo ${#update_id[@]}; }
|
||
|
|
ShellBot.OffsetEnd(){ local -i offset=${update_id[@]: -1}; echo $offset; }
|
||
|
|
ShellBot.OffsetNext(){ echo $(($(ShellBot.OffsetEnd)+1)); }
|
||
|
|
|
||
|
|
ShellBot.token() { echo "${_BOT_INFO_[0]}"; }
|
||
|
|
ShellBot.id() { echo "${_BOT_INFO_[1]}"; }
|
||
|
|
ShellBot.first_name() { echo "${_BOT_INFO_[2]}"; }
|
||
|
|
ShellBot.username() { echo "${_BOT_INFO_[3]}"; }
|
||
|
|
|
||
|
|
ShellBot.regHandleFunction()
|
||
|
|
{
|
||
|
|
local function callback_data handle args
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'f:a:d:' \
|
||
|
|
--longoptions 'function:,
|
||
|
|
args:,
|
||
|
|
callback_data:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-f|--function)
|
||
|
|
# Verifica se a função especificada existe.
|
||
|
|
if ! declare -fp $2 &>/dev/null; then
|
||
|
|
MessageError API "$_ERR_FUNCTION_NOT_FOUND_" "$1" "$2"
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
function="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--args)
|
||
|
|
args="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--callback_data)
|
||
|
|
callback_data="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $function ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --function]"
|
||
|
|
[[ $callback_data ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --callback_data]"
|
||
|
|
|
||
|
|
# Testa se o indentificador armazenado em handle já existe. Caso já exista, repete
|
||
|
|
# o procedimento até que um handle válido seja gerado; Evitando sobreescrever handle's existentes.
|
||
|
|
until ! declare -fp $handle &>/dev/null; do
|
||
|
|
handle=$(mktemp --dry-run HandleID:XXXXXXXXXXXXXXX)
|
||
|
|
done
|
||
|
|
|
||
|
|
# Cria a função com o nome gerado e adiciona a chamada com os argumentos especificados.
|
||
|
|
# Anexa o novo handle a lista no índice associativo definindo em callback_data
|
||
|
|
function="$handle(){ $function $args; }"
|
||
|
|
eval "$function"
|
||
|
|
|
||
|
|
declare -Ag _reg_func_handle_list_
|
||
|
|
_reg_func_handle_list_[$callback_data]+="$handle "
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.watchHandle()
|
||
|
|
{
|
||
|
|
local callback_data func_handle \
|
||
|
|
param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'd' \
|
||
|
|
--longoptions 'callback_data' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-d|--callback_data)
|
||
|
|
shift 2
|
||
|
|
callback_data="$1"
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# O parâmetro callback_data é parcial, ou seja, Se o handle for válido, os elementos
|
||
|
|
# serão listados. Caso contrário a função é finalizada.
|
||
|
|
[[ $callback_data ]] || return 1
|
||
|
|
|
||
|
|
# Lista todos os handles no índice callback_data e executa-os
|
||
|
|
# consecutivamente. A ordem de execução das funções é determinada
|
||
|
|
# pela ordem de declaração.
|
||
|
|
for func_handle in ${_reg_func_handle_list_[$callback_data]}; do
|
||
|
|
$func_handle; done # executa
|
||
|
|
|
||
|
|
# retorno
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getWebhookInfo()
|
||
|
|
{
|
||
|
|
# Variável local
|
||
|
|
local jq_obj
|
||
|
|
|
||
|
|
# Chama o método getMe passando o endereço da API, seguido do nome do método.
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.})
|
||
|
|
|
||
|
|
# Verifica o status de retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.deleteWebhook()
|
||
|
|
{
|
||
|
|
# Variável local
|
||
|
|
local jq_obj
|
||
|
|
|
||
|
|
# Chama o método getMe passando o endereço da API, seguido do nome do método.
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.})
|
||
|
|
|
||
|
|
# Verifica o status de retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.setWebhook()
|
||
|
|
{
|
||
|
|
local url certificate max_connections allowed_updates jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'u:c:m:a:' \
|
||
|
|
--longoptions 'url:,
|
||
|
|
certificate:,
|
||
|
|
max_connections:,
|
||
|
|
allowed_updates:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-u|--url)
|
||
|
|
url="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-c|--certificate)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
certificate="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--max_connections)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
max_connections="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--allowed_updates)
|
||
|
|
allowed_updates="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $url ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --url]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${url:+-d url="$url"} \
|
||
|
|
${certificate:+-d certificate="$certificate"} \
|
||
|
|
${max_connections:+-d max_connections="$max_connections"} \
|
||
|
|
${allowed_updates:+-d allowed_updates="$allowed_updates"})
|
||
|
|
|
||
|
|
# Testa o retorno do método.
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.setChatPhoto()
|
||
|
|
{
|
||
|
|
local chat_id photo jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:p:' \
|
||
|
|
--longoptions 'chat_id:,photo:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--photo)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
photo="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $photo ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --photo]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${photo:+-F photo="$photo"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.deleteChatPhoto()
|
||
|
|
{
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.setChatTitle()
|
||
|
|
{
|
||
|
|
|
||
|
|
local chat_id title jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:t:' \
|
||
|
|
--longoptions 'chat_id:,title:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--title)
|
||
|
|
title="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --title]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${title:+-d title="$title"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
ShellBot.setChatDescription()
|
||
|
|
{
|
||
|
|
|
||
|
|
local chat_id description jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:d:' \
|
||
|
|
--longoptions 'chat_id:,description:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--description)
|
||
|
|
description="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $description ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --description]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${description:+-d description="$description"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.pinChatMessage()
|
||
|
|
{
|
||
|
|
|
||
|
|
local chat_id message_id disable_notification jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:n:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
disable_notification:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${disable_notification:+-d disable_notification="$disable_notification"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.unpinChatMessage()
|
||
|
|
{
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.restrictChatMember()
|
||
|
|
{
|
||
|
|
local chat_id user_id until_date can_send_messages \
|
||
|
|
can_send_media_messages can_send_other_messages \
|
||
|
|
can_add_web_page_previews jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:u:d:s:m:o:w:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
user_id:,
|
||
|
|
until_date:,
|
||
|
|
can_send_messages:,
|
||
|
|
can_send_media_messages:,
|
||
|
|
can_send_other_messages:,
|
||
|
|
can_add_web_page_previews:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--until_date)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
until_date="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--can_send_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_send_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--can_send_media_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_send_media_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-o|--can_send_other_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_send_other_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-w|--can_add_web_page_previews)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_add_web_page_previews="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --user_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${user_id:+-d user_id="$user_id"} \
|
||
|
|
${until_date_:+-d until_date="$until_date"} \
|
||
|
|
${can_send_messages:+-d can_send_messages="$can_send_messages"} \
|
||
|
|
${can_send_media_messages:+-d can_send_media_messages="$can_send_media_messages"} \
|
||
|
|
${can_send_other_messages:+-d can_send_other_messages="$can_send_other_messages"} \
|
||
|
|
${can_add_web_page_previews:+-d can_add_web_page_previews="$can_add_web_page_previews"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
ShellBot.promoteChatMember()
|
||
|
|
{
|
||
|
|
local chat_id user_id can_change_info can_post_messages \
|
||
|
|
can_edit_messages can_delete_messages can_invite_users \
|
||
|
|
can_restrict_members can_pin_messages can_promote_members \
|
||
|
|
jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:u:i:p:e:d:v:r:f:m:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
user_id:,
|
||
|
|
can_change_info:,
|
||
|
|
can_post_messages:,
|
||
|
|
can_edit_messages:,
|
||
|
|
can_delete_messages:,
|
||
|
|
can_invite_users:,
|
||
|
|
can_restrict_members:,
|
||
|
|
can_pin_messages:,
|
||
|
|
can_promote_members:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--can_change_info)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_change_info="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--can_post_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_post_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-e|--can_edit_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_edit_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--can_delete_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_delete_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-v|--can_invite_users)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_invite_users="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--can_restrict_members)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_restrict_members="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-f|--can_pin_messages)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_pin_messages="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--can_promote_members)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
can_promote_members="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --user_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${user_id:+-d user_id="$user_id"} \
|
||
|
|
${can_change_info:+-d can_change_info="$can_change_info"} \
|
||
|
|
${can_post_messages:+-d can_post_messages="$can_post_messages"} \
|
||
|
|
${can_edit_messages:+-d can_edit_messages="$can_edit_messages"} \
|
||
|
|
${can_delete_messages:+-d can_delete_messages="$can_delete_messages"} \
|
||
|
|
${can_invite_users:+-d can_invite_users="$can_invite_users"} \
|
||
|
|
${can_restrict_members:+-d can_restrict_members="$can_restrict_members"} \
|
||
|
|
${can_pin_messages:+-d can_pin_messages="$can_pin_messages"} \
|
||
|
|
${can_promote_members:+-d can_promote_members="$can_promote_members"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.exportChatInviteLink()
|
||
|
|
{
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
# Testa o retorno do método.
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.sendVideoNote()
|
||
|
|
{
|
||
|
|
local chat_id video_note duration length disable_notification \
|
||
|
|
reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:v:t:l:n:r:m:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
video_note:,
|
||
|
|
duration:,
|
||
|
|
length:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-v|--video_note)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
video_note="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--duration)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
duration="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--length)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
length="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $video_note ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --video_note]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${video_note:+-F video_note="$video_note"} \
|
||
|
|
${duration:+-F duration="$duration"} \
|
||
|
|
${length:+-F length="$length"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método.
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
ShellBot.InlineKeyboardButton()
|
||
|
|
{
|
||
|
|
local __button __line __text __url __callback_data \
|
||
|
|
__switch_inline_query __switch_inline_query_current_chat \
|
||
|
|
__delm
|
||
|
|
|
||
|
|
local __param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'b:l:t:u:c:q:s:' \
|
||
|
|
--longoptions 'button:,
|
||
|
|
line:,
|
||
|
|
text:,
|
||
|
|
url:,
|
||
|
|
callback_data:,
|
||
|
|
switch_inline_query:,
|
||
|
|
switch_inline_query_chat:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$__param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-b|--button)
|
||
|
|
# Ponteiro que recebe o endereço de "button" com as definições
|
||
|
|
# da configuração do botão inserido.
|
||
|
|
CheckArgType var "$1" "$2"
|
||
|
|
__button="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--line)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
__line="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--text)
|
||
|
|
__text="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--url)
|
||
|
|
__url="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-c|--callback_data)
|
||
|
|
__callback_data="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-q|--switch_inline_query)
|
||
|
|
__switch_inline_query="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--switch_inline_query_current_chat)
|
||
|
|
__switch_inline_query_current_chat="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
|
||
|
|
[[ $__text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
|
||
|
|
[[ $__callback_data ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --callback_data]"
|
||
|
|
[[ $__line ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --line]"
|
||
|
|
|
||
|
|
# Inicializa a variável armazenada em button, definindo seu
|
||
|
|
# escopo como global, tornando-a visível em todo o projeto (source)
|
||
|
|
# O ponteiro button recebe o endereço do botão armazenado.
|
||
|
|
declare -n __button # Ponteiro
|
||
|
|
|
||
|
|
# Abre o array para receber o novo objeto
|
||
|
|
__button[$__line]="${__button[$__line]#[}"
|
||
|
|
__button[$__line]="${__button[$__line]%]}"
|
||
|
|
|
||
|
|
# Verifica se já existe um botão na linha especificada.
|
||
|
|
[[ ${__button[$__line]} ]] && __delm=','
|
||
|
|
|
||
|
|
# Salva as configurações do botão.
|
||
|
|
#
|
||
|
|
# Obrigatório: text, callback_data
|
||
|
|
# Opcional: url, switch_inline_query, switch_inline_query_current_chat
|
||
|
|
__button[$__line]+="$__delm{
|
||
|
|
\"text\":\"$__text\",
|
||
|
|
\"callback_data\":\"$__callback_data\"
|
||
|
|
${__url:+,\"url\":\"$__url\"}
|
||
|
|
${__switch_inline_query:+,\"switch_inline_query\":\"$__switch_inline_query\"}
|
||
|
|
${__switch_inline_query_current_chat:+,\"switch_inline_query_current_chat\":\"$__switch_inline_query_current_chat\"}
|
||
|
|
}" || return 1 # Erro ao salvar o botão.
|
||
|
|
|
||
|
|
# Fecha o array
|
||
|
|
__button[$__line]="${__button[$__line]/#/[}"
|
||
|
|
__button[$__line]="${__button[$__line]/%/]}"
|
||
|
|
|
||
|
|
# retorno
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.InlineKeyboardMarkup()
|
||
|
|
{
|
||
|
|
local __button __keyboard
|
||
|
|
|
||
|
|
local __param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'b:' \
|
||
|
|
--longoptions 'button:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$__param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-b|--button)
|
||
|
|
# Ponteiro que recebe o endereço da variável "teclado" com as definições
|
||
|
|
# de configuração do botão inserido.
|
||
|
|
CheckArgType var "$1" "$2"
|
||
|
|
__button="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
|
||
|
|
|
||
|
|
# Ponteiro
|
||
|
|
declare -n __button
|
||
|
|
|
||
|
|
# Salva todos elementos do array do teclado, convertendo-o em uma variável de índice 0.
|
||
|
|
# Cria-se uma estrutura do tipo 'inline_keyboard' e anexa os botões e fecha a estrutura.
|
||
|
|
# O ponteiro matriz é limpo para receber a nova estrutura contendo o layout do objeto.
|
||
|
|
# O tipo 'inline_keyboard' é definido, adicionando os botões separando-os pelo delimitador
|
||
|
|
# ',' vírgula. A posição dos botões é determinada pelo índice da linha na inicilização.
|
||
|
|
#
|
||
|
|
# Exemplo:
|
||
|
|
#
|
||
|
|
# Linha array
|
||
|
|
#
|
||
|
|
# 1 [inline_botao1] [inline_botao2] [inline_botao3]
|
||
|
|
# 2 [inline_botao4] [inline_botao5]
|
||
|
|
# 3 [inline_botao7]
|
||
|
|
|
||
|
|
__keyboard="${__button[@]}" || return 1
|
||
|
|
|
||
|
|
# Cria estrutura do teclado
|
||
|
|
__keyboard="${__keyboard/#/{\"inline_keyboard\":[}"
|
||
|
|
__keyboard="${__keyboard//]/],}"
|
||
|
|
__keyboard="${__keyboard%,}"
|
||
|
|
__keyboard="${__keyboard/%/]\}}"
|
||
|
|
|
||
|
|
# Retorna a estrutura
|
||
|
|
echo $__keyboard
|
||
|
|
|
||
|
|
# status
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.answerCallbackQuery()
|
||
|
|
{
|
||
|
|
local callback_query_id text show_alert url cache_time jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:t:s:u:e:' \
|
||
|
|
--longoptions 'callback_query_id:,
|
||
|
|
text:,
|
||
|
|
show_alert:,
|
||
|
|
url:,
|
||
|
|
cache_time:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--callback_query_id)
|
||
|
|
callback_query_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--text)
|
||
|
|
text="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--show_alert)
|
||
|
|
# boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
show_alert="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--url)
|
||
|
|
url="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-e|--cache_time)
|
||
|
|
# inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
cache_time="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $callback_query_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --callback_query_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${callback_query_id:+-d callback_query_id="$callback_query_id"} \
|
||
|
|
${text:+-d text="$text"} \
|
||
|
|
${show_alert:+-d show_alert="$show_alert"} \
|
||
|
|
${url:+-d url="$url"} \
|
||
|
|
${cache_time:+-d cache_time="$cache_time"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Cria objeto que representa um teclado personalizado com opções de resposta
|
||
|
|
ShellBot.ReplyKeyboardMarkup()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local __button __resize_keyboard __on_time_keyboard __selective
|
||
|
|
|
||
|
|
# Lê os parâmetros da função.
|
||
|
|
local __param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'b:r:t:s:' \
|
||
|
|
--longoptions 'button:,
|
||
|
|
resize_keyboard:,
|
||
|
|
one_time_keyboard:,
|
||
|
|
selective:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Transforma os parâmetros da função em parâmetros posicionais
|
||
|
|
#
|
||
|
|
# Exemplo:
|
||
|
|
# --param1 arg1 --param2 arg2 --param3 arg3 ...
|
||
|
|
# $1 $2 $3
|
||
|
|
eval set -- "$__param"
|
||
|
|
|
||
|
|
# Aguarda leitura dos parâmetros
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
# Lê o parâmetro da primeira posição "$1"; Se for um parâmetro válido,
|
||
|
|
# salva o valor do argumento na posição '$2' e desloca duas posições a esquerda (shift 2); Repete o processo
|
||
|
|
# até que o valor de '$1' seja igual '--' e finaliza o loop.
|
||
|
|
case $1 in
|
||
|
|
-b|--button)
|
||
|
|
CheckArgType var "$1" "$2"
|
||
|
|
__button="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--resize_keyboard)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
__resize_keyboard="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--one_time_keyboard)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
__on_time_keyboard="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--selective)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
__selective="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Imprime mensagem de erro se o parâmetro obrigatório for omitido.
|
||
|
|
[[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
|
||
|
|
|
||
|
|
# Ponteiro
|
||
|
|
declare -n __button
|
||
|
|
|
||
|
|
# Constroi a estrutura dos objetos + array keyboard, define os valores e salva as configurações.
|
||
|
|
# Por padrão todos os valores são 'false', até que seja definido.
|
||
|
|
cat << _EOF
|
||
|
|
{"keyboard":$__button,
|
||
|
|
"resize_keyboard":${__resize_keyboard:-false},
|
||
|
|
"one_time_keyboard":${__on_time_keyboard:-false},
|
||
|
|
"selective": ${__selective:-false}}
|
||
|
|
_EOF
|
||
|
|
|
||
|
|
# status
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
# Envia mensagens
|
||
|
|
ShellBot.sendMessage()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id text parse_mode disable_web_page_preview
|
||
|
|
local disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:t:p:w:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
text:,
|
||
|
|
parse_mode:,
|
||
|
|
disable_web_page_preview:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--text)
|
||
|
|
text="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--parse_mode)
|
||
|
|
# Tipo: "markdown" ou "html"
|
||
|
|
CheckArgType parsemode "$1" "$2"
|
||
|
|
parse_mode="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-w|--disable_web_page_preview)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_web_page_preview="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
|
||
|
|
|
||
|
|
# Chama o método da API, utilizando o comando request especificado; Os parâmetros
|
||
|
|
# e valores são passados no form e lidos pelo método. O retorno do método é redirecionado para o arquivo 'update.Json'.
|
||
|
|
# Variáveis com valores nulos são ignoradas e consequentemente os respectivos parâmetros omitidos.
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${text:+-d text="$text"} \
|
||
|
|
${parse_mode:+-d parse_mode="$parse_mode"} \
|
||
|
|
${disable_web_page_preview:+-d disable_web_page_preview="$disable_web_page_preview"} \
|
||
|
|
${disable_notification:+-d disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-d reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método.
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função para reencaminhar mensagens de qualquer tipo.
|
||
|
|
ShellBot.forwardMessage()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id form_chat_id disable_notification message_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:f:n:m:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
from_chat_id:,
|
||
|
|
disable_notification:,
|
||
|
|
message_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-f|--from_chat_id)
|
||
|
|
from_chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $from_chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --from_chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${from_chat_id:+-d from_chat_id="$from_chat_id"} \
|
||
|
|
${disable_notification:+-d disable_notification="$disable_notification"} \
|
||
|
|
${message_id:+-d message_id="$message_id"})
|
||
|
|
|
||
|
|
# Retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para enviar fotos.
|
||
|
|
ShellBot.sendPhoto()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id photo caption disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:p:t:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
photo:,
|
||
|
|
caption:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--photo)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
photo="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
# Limite máximo de caracteres: 200
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $photo ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --photo]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${photo:+-F photo="$photo"} \
|
||
|
|
${caption:+-F caption="$caption"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para enviar arquivos de audio.
|
||
|
|
ShellBot.sendAudio()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id audio caption duration performer title disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:a:t:d:e:i:n:r:k' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
audio:,
|
||
|
|
caption:,
|
||
|
|
duration:,
|
||
|
|
performer:,
|
||
|
|
title:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--audio)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
audio="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--duration)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
duration="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-e|--performer)
|
||
|
|
performer="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--title)
|
||
|
|
title="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $audio ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --audio]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${audio:+-F audio="$audio"} \
|
||
|
|
${caption:+-F caption="$caption"} \
|
||
|
|
${duration:+-F duration="$duration"} \
|
||
|
|
${performer:+-F performer="$performer"} \
|
||
|
|
${title:+-F title="$title"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para enviar documentos.
|
||
|
|
ShellBot.sendDocument()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id document caption disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:d:t:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
document:,
|
||
|
|
caption:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--document)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
document="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_MARKUP="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $document ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --document]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${document:+-F document="$document"} \
|
||
|
|
${caption:+-F caption="$caption"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para enviat stickers
|
||
|
|
ShellBot.sendSticker()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id sticker disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:s:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
sticker:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--sticker)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${sticker:+-F sticker="$sticker"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getStickerSet()
|
||
|
|
{
|
||
|
|
local name jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'n:' \
|
||
|
|
--longoptions 'name:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-n|--name)
|
||
|
|
name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${name:+-d name="$name"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.uploadStickerFile()
|
||
|
|
{
|
||
|
|
local user_id png_sticker jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'u:s:' \
|
||
|
|
--longoptions 'user_id:,
|
||
|
|
png_sticker:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--png_sticker)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
png_sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
[[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${user_id:+-F user_id="$user_id"} \
|
||
|
|
${png_sticker:+-F png_sticker="$png_sticker"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.setStickerPositionInSet()
|
||
|
|
{
|
||
|
|
local sticker position jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 's:p:' \
|
||
|
|
--longoptions 'sticker:,
|
||
|
|
position:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-s|--sticker)
|
||
|
|
sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--position)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
position="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
|
||
|
|
[[ $position ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --position]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${sticker:+-d sticker="$sticker"} \
|
||
|
|
${position:+-d position="$position"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.deleteStickerFromSet()
|
||
|
|
{
|
||
|
|
local sticker jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 's:' \
|
||
|
|
--longoptions 'sticker:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-s|--sticker)
|
||
|
|
sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${sticker:+-d sticker="$sticker"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.stickerMaskPosition()
|
||
|
|
{
|
||
|
|
|
||
|
|
local point x_shift y_shift scale zoom
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'p:x:y:s:z:' \
|
||
|
|
--longoptions 'point:,
|
||
|
|
x_shift:,
|
||
|
|
y_shift:,
|
||
|
|
scale:,
|
||
|
|
zoom:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-p|--point)
|
||
|
|
CheckArgType point "$1" "$2"
|
||
|
|
point="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-x|--x_shift)
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
x_shift="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-y|--y_shift)
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
y_shift="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--scale)
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
scale="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-z|--zoom)
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
zoom="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $point ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --point]"
|
||
|
|
[[ $x_shift ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-x, --x_shift]"
|
||
|
|
[[ $y_shift ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-y, --y_shift]"
|
||
|
|
[[ $scale ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --scale]"
|
||
|
|
[[ $zoom ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-z, --zoom]"
|
||
|
|
|
||
|
|
cat << _EOF
|
||
|
|
{ "point": "$point", "x_shift": $x_shift, "y_shift": $y_shift, "scale": $scale, "zoom": $zoom }
|
||
|
|
_EOF
|
||
|
|
|
||
|
|
return 0
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.createNewStickerSet()
|
||
|
|
{
|
||
|
|
local user_id name title png_sticker emojis contains_masks mask_position jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'u:n:t:s:e:c:m:' \
|
||
|
|
--longoptions 'user_id:,
|
||
|
|
name:,
|
||
|
|
title:,
|
||
|
|
png_sticker:,
|
||
|
|
emojis:,
|
||
|
|
contains_mask:,
|
||
|
|
mask_position:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--name)
|
||
|
|
name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--title)
|
||
|
|
title="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--png_sticker)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
png_sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-e|--emojis)
|
||
|
|
emojis="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-c|--contains_masks)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
contains_masks="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--mask_position)
|
||
|
|
mask_position="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
[[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
|
||
|
|
[[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --title]"
|
||
|
|
[[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
|
||
|
|
[[ $emojis ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-e, --emojis]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${user_id:+-F user_id="$user_id"} \
|
||
|
|
${name:+-F name="$name"} \
|
||
|
|
${title:+-F title="$title"} \
|
||
|
|
${png_sticker:+-F png_sticker="$png_sticker"} \
|
||
|
|
${emojis:+-F emojis="$emojis"} \
|
||
|
|
${contains_masks:+-F contains_masks="$contains_masks"} \
|
||
|
|
${mask_position:+-F mask_position="$mask_position"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.addStickerToSet()
|
||
|
|
{
|
||
|
|
local user_id name png_sticker emojis mask_position jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'u:n:s:e:m:' \
|
||
|
|
--longoptions 'user_id:,
|
||
|
|
name:,
|
||
|
|
png_sticker:,
|
||
|
|
emojis:,
|
||
|
|
mask_position:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--name)
|
||
|
|
name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--png_sticker)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
png_sticker="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-e|--emojis)
|
||
|
|
emojis="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--mask_position)
|
||
|
|
mask_position="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
[[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
|
||
|
|
[[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
|
||
|
|
[[ $emojis ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-e, --emojis]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${user_id:+-F user_id="$user_id"} \
|
||
|
|
${name:+-F name="$name"} \
|
||
|
|
${png_sticker:+-F png_sticker="$png_sticker"} \
|
||
|
|
${emojis:+-F emojis="$emojis"} \
|
||
|
|
${mask_position:+-F mask_position="$mask_position"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função para enviar arquivos de vídeo.
|
||
|
|
ShellBot.sendVideo()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id video duration width height caption disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:v:d:w:h:t:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
video:,
|
||
|
|
duration:,
|
||
|
|
width:,
|
||
|
|
height:,
|
||
|
|
caption:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-v|--video)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
video="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--duration)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
duration="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-w|--width)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
width="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-h|--height)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
height="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $video ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --video]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${video:+-F video="$video"} \
|
||
|
|
${duration:+-F duration="$duration"} \
|
||
|
|
${width:+-F width="$width"} \
|
||
|
|
${height:+-F height="$height"} \
|
||
|
|
${caption:+-F caption="$caption"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função para enviar audio.
|
||
|
|
ShellBot.sendVoice()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id voice caption duration disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:v:t:d:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
voice:,
|
||
|
|
caption:,
|
||
|
|
duration:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-v|--voice)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
voice="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--duration)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
duration="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $voice ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --voice]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${voice:+-F voice="$voice"} \
|
||
|
|
${caption:+-F caption="$caption"} \
|
||
|
|
${duration:+-F duration="$duration"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função utilizada para enviar uma localidade utilizando coordenadas de latitude e longitude.
|
||
|
|
ShellBot.sendLocation()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id latitude longitude live_period
|
||
|
|
local disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:l:g:p:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
latitude:,
|
||
|
|
longitude:,
|
||
|
|
live_period:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--latitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
latitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-g|--longitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
longitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--live_period)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
live_period="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $latitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --latitude]"
|
||
|
|
[[ $longitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-g, --longitude]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${latitude:+-F latitude="$latitude"} \
|
||
|
|
${longitude:+-F longitude="$longitude"} \
|
||
|
|
${live_period:+-F live_period="$live_period"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função utlizada para enviar detalhes de um local.
|
||
|
|
ShellBot.sendVenue()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id latitude longitude title address foursquare_id disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:l:g:i:a:f:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
latitude:,
|
||
|
|
longitude:,
|
||
|
|
title:,
|
||
|
|
address:,
|
||
|
|
foursquare_id:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--latitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
latitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-g|--longitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
longitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--title)
|
||
|
|
title="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--address)
|
||
|
|
address="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-f|--foursquare_id)
|
||
|
|
foursquare_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $latitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --latitude]"
|
||
|
|
[[ $longitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-g, --longitude]"
|
||
|
|
[[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --title]"
|
||
|
|
[[ $address ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --address]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${latitude:+-F latitude="$latitude"} \
|
||
|
|
${longitude:+-F longitude="$longitude"} \
|
||
|
|
${title:+-F title="$title"} \
|
||
|
|
${address:+-F address="$address"} \
|
||
|
|
${foursquare_id:+-F foursquare_id="$foursquare_id"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para enviar um contato + numero
|
||
|
|
ShellBot.sendContact()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id phone_number first_name last_name disable_notification reply_to_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:p:f:l:n:r:k:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
phone_number:,
|
||
|
|
first_name:,
|
||
|
|
last_name:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--phone_number)
|
||
|
|
phone_number="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-f|--first_name)
|
||
|
|
first_name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--last_name)
|
||
|
|
last_name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
# Tipo: boolean
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
# Tipo: inteiro
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-k|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $phone_number ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --phone_number]"
|
||
|
|
[[ $first_name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --first_name]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${phone_number:+-F phone_number="$phone_number"} \
|
||
|
|
${first_name:+-F first_name="$first_name"} \
|
||
|
|
${last_name:+-F last_name="$last_name"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
|
||
|
|
${reply_markup:+-F reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Envia uma ação para bot.
|
||
|
|
ShellBot.sendChatAction()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id action jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:a:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
action:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--action)
|
||
|
|
[[ $2 =~ ^(typing|upload_photo|record_video|upload_video|
|
||
|
|
record_audio|upload_audio|upload_document|
|
||
|
|
find_location|record_video_note|upload_video_note)$ ]] || \
|
||
|
|
# erro
|
||
|
|
MessageError API "$_ERR_ACTION_MODE_" "$1" "$2"
|
||
|
|
action="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $action ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --action]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${action:+-d action="$action"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para obter as fotos de um determinado usuário.
|
||
|
|
ShellBot.getUserProfilePhotos()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local user_id offset limit ind last index max item total jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'u:o:l:' \
|
||
|
|
--longoptions 'user_id:,
|
||
|
|
offset:,
|
||
|
|
limit:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-o|--offset)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
offset="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--limit)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
limit="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${user_id:+-d user_id="$user_id"} \
|
||
|
|
${offset:+-d offset="$offset"} \
|
||
|
|
${limit:+-d limit="$limit"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
|
||
|
|
total=$(Json '.result.total_count' $jq_obj)
|
||
|
|
|
||
|
|
if [[ $total -gt 0 ]]; then
|
||
|
|
for index in $(seq 0 $((total-1)))
|
||
|
|
do
|
||
|
|
max=$(Json ".result.photos[$index]|length" $jq_obj)
|
||
|
|
for item in $(seq 0 $((max-1)))
|
||
|
|
do
|
||
|
|
Json ".result.photos[$index][$item]" $jq_obj | GetObjValue
|
||
|
|
done
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Função para listar informações do arquivo especificado.
|
||
|
|
ShellBot.getFile()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local file_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'f:' \
|
||
|
|
--longoptions 'file_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-f|--file_id)
|
||
|
|
file_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parâmetros obrigatórios.
|
||
|
|
[[ $file_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --file_id]"
|
||
|
|
|
||
|
|
# Chama o método.
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${file_id:+-d file_id="$file_id"})
|
||
|
|
|
||
|
|
# Testa o retorno do método.
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Essa função kicka o usuário do chat ou canal. (somente administradores)
|
||
|
|
ShellBot.kickChatMember()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id user_id until_date jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:u:d:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
user_id:,
|
||
|
|
until_date:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
# Trata os parâmetros
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--until_date)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
until_date="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Parametros obrigatórios.
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
|
||
|
|
# Chama o método
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${user_id:+-d user_id="$user_id"} \
|
||
|
|
${until_date:+-d until_date="$until_date"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Utilize essa função para remove o bot do grupo ou canal.
|
||
|
|
ShellBot.leaveChat()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.unbanChatMember()
|
||
|
|
{
|
||
|
|
local chat_id user_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:u:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
user_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${user_id:+-d user_id="$user_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getChat()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getChatAdministrators()
|
||
|
|
{
|
||
|
|
local chat_id total key index jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
|
||
|
|
# Total de administratores
|
||
|
|
declare -i total=$(Json '.result|length' $jq_obj)
|
||
|
|
|
||
|
|
# Lê os administradores do grupo se houver.
|
||
|
|
if [ $total -gt 0 ]; then
|
||
|
|
for index in $(seq 0 $((total-1)))
|
||
|
|
do
|
||
|
|
Json ".result[$index]" $jq_obj | GetObjValue
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getChatMembersCount()
|
||
|
|
{
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getChatMember()
|
||
|
|
{
|
||
|
|
# Variáveis locais
|
||
|
|
local chat_id user_id jq_obj
|
||
|
|
|
||
|
|
# Lê os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:u:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
user_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
# Define os parâmetros posicionais
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-u|--user_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
user_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${user_id:+-d user_id="$user_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.editMessageText()
|
||
|
|
{
|
||
|
|
local chat_id message_id inline_message_id text parse_mode disable_web_page_preview reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:i:t:p:w:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
inline_message_id:,
|
||
|
|
text:,
|
||
|
|
parse_mode:,
|
||
|
|
disable_web_page_preview:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--inline_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
inline_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--text)
|
||
|
|
text="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-p|--parse_mode)
|
||
|
|
CheckArgType parsemode "$1" "$2"
|
||
|
|
parse_mode="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-w|--disable_web_page_preview)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_web_page_preview="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
|
||
|
|
[[ $inline_message_id ]] && unset chat_id message_id || {
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${inline_message_id:+-d inline_message_id="$inline_message_id"} \
|
||
|
|
${text:+-d text="$text"} \
|
||
|
|
${parse_mode:+-d parse_mode="$parse_mode"} \
|
||
|
|
${disable_web_page_preview:+-d disable_web_page_preview="$disable_web_page_preview"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.editMessageCaption()
|
||
|
|
{
|
||
|
|
local chat_id message_id inline_message_id caption reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:i:t:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
inline_message_id:,
|
||
|
|
caption:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--inline_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
inline_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--caption)
|
||
|
|
caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${inline_message_id:+-d inline_message_id="$inline_message_id"} \
|
||
|
|
${caption:+-d caption="$caption"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.editMessageReplyMarkup()
|
||
|
|
{
|
||
|
|
local chat_id message_id inline_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:i:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
inline_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--inline_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
inline_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $inline_message_id ]] && unset chat_id message_id || {
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
}
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${inline_message_id:+-d inline_message_id="$inline_message_id"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.deleteMessage()
|
||
|
|
{
|
||
|
|
local chat_id message_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"})
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.downloadFile() {
|
||
|
|
|
||
|
|
local file_id file_info file_remote file_path filename dir opt ext
|
||
|
|
local uri="https://api.telegram.org/file/bot$_TOKEN_"
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'f:d:' \
|
||
|
|
--longoptions 'file_id:,
|
||
|
|
dir:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-f|--file_id)
|
||
|
|
opt="$1"
|
||
|
|
file_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--dir)
|
||
|
|
[[ -d $2 ]] && {
|
||
|
|
[[ -w $2 ]] || MessageError API "$_ERR_DIR_WRITE_DENIED_" "$1" "$2"
|
||
|
|
} || MessageError API "$_ERR_DIR_NOT_FOUND_" "$1" "$2"
|
||
|
|
dir="${2%/}"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $file_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --file_id]"
|
||
|
|
[[ $dir ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --dir]"
|
||
|
|
|
||
|
|
if file_info=$(ShellBot.getFile --file_id "$file_id" 2>/dev/null); then
|
||
|
|
|
||
|
|
file_remote="$(echo $file_info | cut -d'|' -f3)"
|
||
|
|
file_info="$(echo $file_info | cut -d'|' -f-2)"
|
||
|
|
filename=${file_remote##*/}
|
||
|
|
ext="${filename##*.}"
|
||
|
|
|
||
|
|
file_path="$(mktemp -u --tmpdir="$dir" "file$(date +%d%m%Y%H%M%S)-XXXXX${ext:+.$ext}")"
|
||
|
|
|
||
|
|
if wget "$uri/$file_remote" -O "$file_path" &>/dev/null; then
|
||
|
|
echo "$file_info|$file_path"
|
||
|
|
else
|
||
|
|
MessageError API "$_ERR_FILE_DOWNLOAD_" "$opt" "$file_remote"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
MessageError API "$_ERR_FILE_INVALID_ID_" "$opt" "$file_id"
|
||
|
|
fi
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.editMessageLiveLocation()
|
||
|
|
{
|
||
|
|
local chat_id message_id inline_message_id
|
||
|
|
local latitude longitude reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:i:l:g:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
inline_message_id:,
|
||
|
|
latitude:,
|
||
|
|
longitude:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--inline_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
inline_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--latitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
latitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-g|--longitude)
|
||
|
|
# Tipo: float
|
||
|
|
CheckArgType float "$1" "$2"
|
||
|
|
longitude="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $inline_message_id ]] && unset chat_id message_id || {
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
}
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${inline_message_id:+-d inline_message_id="$inline_message_id"} \
|
||
|
|
${latitude:+-d latitude="$latitude"} \
|
||
|
|
${longitude:+-d longitude="$longitude"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.stopMessageLiveLocation()
|
||
|
|
{
|
||
|
|
local chat_id message_id inline_message_id reply_markup jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:i:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
message_id:,
|
||
|
|
inline_message_id:,
|
||
|
|
reply_markup:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-i|--inline_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
inline_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_markup)
|
||
|
|
reply_markup="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $inline_message_id ]] && unset chat_id message_id || {
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
|
||
|
|
}
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${message_id:+-d message_id="$message_id"} \
|
||
|
|
${inline_message_id:+-d inline_message_id="$inline_message_id"} \
|
||
|
|
${reply_markup:+-d reply_markup="$reply_markup"})
|
||
|
|
|
||
|
|
# Testa o retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.setChatStickerSet()
|
||
|
|
{
|
||
|
|
local chat_id sticker_set_name jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:s:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
sticker_set_name:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s|--sticker_set_name)
|
||
|
|
sticker_set_name="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $sticker_set_name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker_set_name]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"} \
|
||
|
|
${sticker_set_name:+-d sticker_set_name="$sticker_set_name"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.deleteChatStickerSet()
|
||
|
|
{
|
||
|
|
local chat_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:' \
|
||
|
|
--longoptions 'chat_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
|
||
|
|
|
||
|
|
JsonStatus $jq_obj || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.inputMediaPhoto()
|
||
|
|
{
|
||
|
|
local __media __caption __album __delm
|
||
|
|
|
||
|
|
local __param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'a:m:c:' \
|
||
|
|
--longoptions 'album:,
|
||
|
|
media:,
|
||
|
|
caption:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
eval set -- "$__param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-a|--album)
|
||
|
|
CheckArgType var "$1" "$2"
|
||
|
|
__album="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--media)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
__media="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-c|--caption)
|
||
|
|
__caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $__album ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --album]"
|
||
|
|
[[ $__media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
|
||
|
|
|
||
|
|
declare -n __album
|
||
|
|
|
||
|
|
__album=${__album#[}
|
||
|
|
__album=${__album%]}
|
||
|
|
|
||
|
|
[[ $__album ]] && __delm=','
|
||
|
|
|
||
|
|
__album+="$__delm{\"type\":\"photo\","
|
||
|
|
__album+="\"media\":\"$__media\""
|
||
|
|
__album+="${__caption:+,\"caption\":\"$__caption\"}}"
|
||
|
|
|
||
|
|
__album=${__album/#/[}
|
||
|
|
__album=${__album/%/]}
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.inputMediaVideo()
|
||
|
|
{
|
||
|
|
local __media __album __delm
|
||
|
|
local __width __height __duration __caption
|
||
|
|
|
||
|
|
local __param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'a:m:c:w:h:d:' \
|
||
|
|
--longoptions 'album:,
|
||
|
|
media:,
|
||
|
|
caption:,
|
||
|
|
width:,
|
||
|
|
height:,
|
||
|
|
duration:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
|
||
|
|
eval set -- "$__param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-a|--album)
|
||
|
|
CheckArgType var "$1" "$2"
|
||
|
|
__album="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--media)
|
||
|
|
CheckArgType file "$1" "$2"
|
||
|
|
__media="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-c|--caption)
|
||
|
|
__caption="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-w|--width)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
__width="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-h|--height)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
__height="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-d|--duration)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
__duration="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $__album ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --album]"
|
||
|
|
[[ $__media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
|
||
|
|
|
||
|
|
declare -n __album
|
||
|
|
|
||
|
|
__album=${__album#[}
|
||
|
|
__album=${__album%]}
|
||
|
|
|
||
|
|
[[ $__album ]] && __delm=','
|
||
|
|
|
||
|
|
__album+="$__delm{\"type\":\"video\","
|
||
|
|
__album+="\"media\":\"$__media\""
|
||
|
|
__album+="${__caption:+,\"caption\":\"$__caption\"}"
|
||
|
|
__album+="${__width:+,\"width\":$__width}"
|
||
|
|
__album+="${__height:+,\"height\":$__height}"
|
||
|
|
__album+="${__duration:+,\"duration\":$__duration}}"
|
||
|
|
|
||
|
|
__album=${__album/#/[}
|
||
|
|
__album=${__album/%/]}
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.sendMediaGroup()
|
||
|
|
{
|
||
|
|
local chat_id media disable_notification reply_to_message_id jq_obj
|
||
|
|
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'c:m:n:r:' \
|
||
|
|
--longoptions 'chat_id:,
|
||
|
|
media:,
|
||
|
|
disable_notification:,
|
||
|
|
reply_to_message_id:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-c|--chat_id)
|
||
|
|
chat_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-m|--media)
|
||
|
|
media="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-n|--disable_notification)
|
||
|
|
CheckArgType bool "$1" "$2"
|
||
|
|
disable_notification="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--reply_to_message_id)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
reply_to_message_id="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
|
||
|
|
[[ $media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
|
||
|
|
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-F chat_id="$chat_id"} \
|
||
|
|
${media:+-F media="$media"} \
|
||
|
|
${disable_notification:+-F disable_notification="$disable_notification"} \
|
||
|
|
${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"})
|
||
|
|
|
||
|
|
# Retorno do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
Json '.result' $jq_obj | GetObjValue
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
ShellBot.getUpdates()
|
||
|
|
{
|
||
|
|
local total_keys offset limit timeout allowed_updates jq_obj
|
||
|
|
|
||
|
|
# Define os parâmetros da função
|
||
|
|
local param=$(getopt --name "$FUNCNAME" \
|
||
|
|
--options 'o:l:t:a:' \
|
||
|
|
--longoptions 'offset:,
|
||
|
|
limit:,
|
||
|
|
timeout:,
|
||
|
|
allowed_updates:' \
|
||
|
|
-- "$@")
|
||
|
|
|
||
|
|
eval set -- "$param"
|
||
|
|
|
||
|
|
while :
|
||
|
|
do
|
||
|
|
case $1 in
|
||
|
|
-o|--offset)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
offset="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-l|--limit)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
limit="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-t|--timeout)
|
||
|
|
CheckArgType int "$1" "$2"
|
||
|
|
timeout="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-a|--allowed_updates)
|
||
|
|
allowed_updates="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
# Se não houver mais parâmetros
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Seta os parâmetros
|
||
|
|
jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${offset:+-d offset="$offset"} \
|
||
|
|
${limit:+-d limit="$limit"} \
|
||
|
|
${timeout:+-d timeout="$timeout"} \
|
||
|
|
${allowed_updates:+-d allowed_updates="$allowed_updates"})
|
||
|
|
|
||
|
|
# Limpa as variáveis inicializadas.
|
||
|
|
unset ${_var_init_list_[@]}
|
||
|
|
unset _var_init_list_
|
||
|
|
|
||
|
|
declare -ag _var_init_list_
|
||
|
|
|
||
|
|
# Verifica se ocorreu erros durante a chamada do método
|
||
|
|
JsonStatus $jq_obj && {
|
||
|
|
|
||
|
|
# Se o modo flush estiver ativado, retorna uma coleção de objetos Json contendo as atualizações.
|
||
|
|
((_FLUSH_OFFSET_)) && { echo "$jq_obj"; return 0; }
|
||
|
|
|
||
|
|
local key key_list obj obj_cur obj_type var_name i
|
||
|
|
|
||
|
|
# Total de atualizações
|
||
|
|
total_keys=$(Json '.result|length' $jq_obj)
|
||
|
|
|
||
|
|
if [[ $total_keys -gt 0 ]]; then
|
||
|
|
|
||
|
|
# Modo monitor
|
||
|
|
((_BOT_MONITOR_)) && cat << _eof
|
||
|
|
=================== MONITOR ===================
|
||
|
|
Data: $(date '+%d/%m/%Y %T')
|
||
|
|
Script: $_BOT_SCRIPT_
|
||
|
|
Bot (nome): $(ShellBot.first_name)
|
||
|
|
Bot (usuario): $(ShellBot.username)
|
||
|
|
Bot (id): $(ShellBot.id)
|
||
|
|
_eof
|
||
|
|
|
||
|
|
# Salva e fecha o descritor de erro
|
||
|
|
exec 5<&2
|
||
|
|
exec 2<&-
|
||
|
|
|
||
|
|
for index in $(seq 0 $((total_keys-1)))
|
||
|
|
do
|
||
|
|
# Imprime a mensagem em fila
|
||
|
|
((_BOT_MONITOR_)) && cat << _eof
|
||
|
|
-----------------------------------------------
|
||
|
|
Mensagem: $((index + 1))
|
||
|
|
-----------------------------------------------
|
||
|
|
_eof
|
||
|
|
# Insere o primeiro elemento da consulta.
|
||
|
|
unset key_list
|
||
|
|
key_list[0]=".result[$index]"
|
||
|
|
|
||
|
|
# Lê recursivamente todos os objetos.
|
||
|
|
while [[ ${key_list[@]} ]]
|
||
|
|
do
|
||
|
|
i=0
|
||
|
|
|
||
|
|
# Lista objetos.
|
||
|
|
for key in ${key_list[@]}
|
||
|
|
do
|
||
|
|
# Limpa o buffer
|
||
|
|
unset key_list
|
||
|
|
|
||
|
|
# Lê as chaves do atual objeto
|
||
|
|
for obj in $(Json "$key|keys[]" $jq_obj)
|
||
|
|
do
|
||
|
|
# Se o tipo da chave for string, number ou boolean, imprime o valor armazenado.
|
||
|
|
# Se for object salva o nível atual em key_list. Caso contrário, lê o próximo
|
||
|
|
# elemento da lista.
|
||
|
|
obj_cur="$key.$obj"
|
||
|
|
obj_type=$(Json "$obj_cur|type" $jq_obj)
|
||
|
|
|
||
|
|
if [[ $obj_type =~ (string|number|boolean) ]]; then
|
||
|
|
|
||
|
|
# Define a nomenclatura válida para a variável que irá armazenar o valor da chave.
|
||
|
|
var_name=${obj_cur#.result\[$index\].}
|
||
|
|
var_name=${var_name//[]/}
|
||
|
|
var_name=${var_name//./_}
|
||
|
|
|
||
|
|
# Cria um ponteiro para a variável armazenada em 'var_name'.
|
||
|
|
declare -g $var_name
|
||
|
|
declare -n byref=$var_name
|
||
|
|
|
||
|
|
[[ ${byref[$index]} ]] || {
|
||
|
|
|
||
|
|
# Atribui o valor de 'var_name', se a mesma não foi inicializada.
|
||
|
|
byref[$index]="$(Json "$obj_cur" $jq_obj)"
|
||
|
|
|
||
|
|
# Exibe a inicialização das variáveis.
|
||
|
|
((_BOT_MONITOR_)) && sed ':a;N;s/\n/ /;ta' <<< "$var_name = '${byref[$index]}'"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Remove ponteiro
|
||
|
|
declare +n byref
|
||
|
|
unset byref
|
||
|
|
|
||
|
|
# Anexa a variável a lista caso não exista.
|
||
|
|
if ! grep -qw $var_name <<< ${_var_init_list_[@]}; then
|
||
|
|
_var_init_list_+=($var_name); fi
|
||
|
|
|
||
|
|
elif [[ $obj_type = object ]]; then
|
||
|
|
key_list[$((i++))]=$obj_cur
|
||
|
|
elif [[ $obj_type = array ]]; then
|
||
|
|
key_list[$((i++))]=$obj_cur[]
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
done
|
||
|
|
done
|
||
|
|
done
|
||
|
|
|
||
|
|
# restaura o descritor de erro
|
||
|
|
exec 2<&5
|
||
|
|
fi
|
||
|
|
|
||
|
|
} || MessageError TG $jq_obj
|
||
|
|
|
||
|
|
# Status
|
||
|
|
return $?
|
||
|
|
}
|
||
|
|
|
||
|
|
# Bot métodos (somente leitura)
|
||
|
|
declare -rf ShellBot.token \
|
||
|
|
ShellBot.id \
|
||
|
|
ShellBot.username \
|
||
|
|
ShellBot.first_name \
|
||
|
|
ShellBot.regHandleFunction \
|
||
|
|
ShellBot.watchHandle \
|
||
|
|
ShellBot.ListUpdates \
|
||
|
|
ShellBot.TotalUpdates \
|
||
|
|
ShellBot.OffsetEnd \
|
||
|
|
ShellBot.OffsetNext \
|
||
|
|
ShellBot.getMe \
|
||
|
|
ShellBot.getWebhookInfo \
|
||
|
|
ShellBot.deleteWebhook \
|
||
|
|
ShellBot.setWebhook \
|
||
|
|
ShellBot.init \
|
||
|
|
ShellBot.ReplyKeyboardMarkup \
|
||
|
|
ShellBot.sendMessage \
|
||
|
|
ShellBot.forwardMessage \
|
||
|
|
ShellBot.sendPhoto \
|
||
|
|
ShellBot.sendAudio \
|
||
|
|
ShellBot.sendDocument \
|
||
|
|
ShellBot.sendSticker \
|
||
|
|
ShellBot.sendVideo \
|
||
|
|
ShellBot.sendVideoNote \
|
||
|
|
ShellBot.sendVoice \
|
||
|
|
ShellBot.sendLocation \
|
||
|
|
ShellBot.sendVenue \
|
||
|
|
ShellBot.sendContact \
|
||
|
|
ShellBot.sendChatAction \
|
||
|
|
ShellBot.getUserProfilePhotos \
|
||
|
|
ShellBot.getFile \
|
||
|
|
ShellBot.kickChatMember \
|
||
|
|
ShellBot.leaveChat \
|
||
|
|
ShellBot.unbanChatMember \
|
||
|
|
ShellBot.getChat \
|
||
|
|
ShellBot.getChatAdministrators \
|
||
|
|
ShellBot.getChatMembersCount \
|
||
|
|
ShellBot.getChatMember \
|
||
|
|
ShellBot.editMessageText \
|
||
|
|
ShellBot.editMessageCaption \
|
||
|
|
ShellBot.editMessageReplyMarkup \
|
||
|
|
ShellBot.InlineKeyboardMarkup \
|
||
|
|
ShellBot.InlineKeyboardButton \
|
||
|
|
ShellBot.answerCallbackQuery \
|
||
|
|
ShellBot.deleteMessage \
|
||
|
|
ShellBot.exportChatInviteLink \
|
||
|
|
ShellBot.setChatPhoto \
|
||
|
|
ShellBot.deleteChatPhoto \
|
||
|
|
ShellBot.setChatTitle \
|
||
|
|
ShellBot.setChatDescription \
|
||
|
|
ShellBot.pinChatMessage \
|
||
|
|
ShellBot.unpinChatMessage \
|
||
|
|
ShellBot.promoteChatMember \
|
||
|
|
ShellBot.restrictChatMember \
|
||
|
|
ShellBot.getStickerSet \
|
||
|
|
ShellBot.uploadStickerFile \
|
||
|
|
ShellBot.createNewStickerSet \
|
||
|
|
ShellBot.addStickerToSet \
|
||
|
|
ShellBot.setStickerPositionInSet \
|
||
|
|
ShellBot.deleteStickerFromSet \
|
||
|
|
ShellBot.stickerMaskPosition \
|
||
|
|
ShellBot.downloadFile \
|
||
|
|
ShellBot.editMessageLiveLocation \
|
||
|
|
ShellBot.stopMessageLiveLocation \
|
||
|
|
ShellBot.setChatStickerSet \
|
||
|
|
ShellBot.deleteChatStickerSet \
|
||
|
|
ShellBot.sendMediaGroup \
|
||
|
|
ShellBot.inputMediaPhoto \
|
||
|
|
ShellBot.inputMediaVideo \
|
||
|
|
ShellBot.getUpdates
|
||
|
|
|
||
|
|
# Retorna objetos
|
||
|
|
echo "$(ShellBot.id)|$(ShellBot.username)|$(ShellBot.first_name)|$(((_FLUSH_OFFSET_)) && FlushOffset)"
|
||
|
|
|
||
|
|
# status
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
# Funções (somente leitura)
|
||
|
|
declare -rf MessageError \
|
||
|
|
Json \
|
||
|
|
JsonStatus \
|
||
|
|
GetObjValue \
|
||
|
|
FlushOffset \
|
||
|
|
CreateUnitService \
|
||
|
|
CheckArgType
|