mirror of
				https://github.com/AAAAAEXQOSyIpN2JZ0ehUQ/SSHPLUS-MANAGER-FREE.git
				synced 2025-11-04 12:38:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			6092 lines
		
	
	
		
			171 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			6092 lines
		
	
	
		
			171 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------------------------------------
 | 
						|
#	DATA:				07 de Março de 2017
 | 
						|
#	SCRIPT:				ShellBot.sh
 | 
						|
#	VERSÃO:				6.4.0
 | 
						|
#	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.
 | 
						|
#-----------------------------------------------------------------------------------------------------------
 | 
						|
 | 
						|
[[ $_SHELLBOT_SH_ ]] && return 1
 | 
						|
 | 
						|
if ! awk 'BEGIN { exit ARGV[1] < 4.3 }' ${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}; then
 | 
						|
	echo "${BASH_SOURCE:-${0##*/}}: erro: requer o interpretador de comandos 'bash 4.3' ou superior." 1>&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
# Informações
 | 
						|
readonly -A _SHELLBOT_=(
 | 
						|
[name]='ShellBot'
 | 
						|
[keywords]='Shell Script Telegram API'
 | 
						|
[description]='API não-oficial para criação de bots na plataforma Telegram.'
 | 
						|
[version]='6.4.0'
 | 
						|
[language]='shellscript'
 | 
						|
[shell]=${SHELL}
 | 
						|
[shell_version]=${BASH_VERSION}
 | 
						|
[author]='Juliano Santos [SHAMAN]'
 | 
						|
[email]='shellscriptx@gmail.com'
 | 
						|
[wiki]='https://github.com/shellscriptx/shellbot/wiki'
 | 
						|
[github]='https://github.com/shellscriptx/shellbot'
 | 
						|
[packages]='curl 7.0, getopt 2.0, jq 1.5'
 | 
						|
)
 | 
						|
 | 
						|
# Verifica dependências.
 | 
						|
while read _pkg_ _ver_; do
 | 
						|
	if command -v $_pkg_ &>/dev/null; then
 | 
						|
		if [[ $($_pkg_ --version 2>&1) =~ [0-9]+\.[0-9]+ ]]; then
 | 
						|
			if ! awk 'BEGIN { exit ARGV[1] < ARGV[2] }' $BASH_REMATCH $_ver_; then
 | 
						|
				printf "%s: erro: requer o pacote '%s %s' ou superior.\n" ${_SHELLBOT_[name]} $_pkg_ $_ver_ 1>&2
 | 
						|
				exit 1
 | 
						|
			fi
 | 
						|
		else
 | 
						|
			printf "%s: erro: '%s' não foi possível obter a versão.\n" ${_SHELLBOT_[name]} $_pkg_ 1>&2
 | 
						|
			exit 1
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		printf "%s: erro: '%s' o pacote requerido está ausente.\n" ${_SHELLBOT_[name]} $_pkg_ 1>&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
done <<< "${_SHELLBOT_[packages]//,/$'\n'}"
 | 
						|
 | 
						|
# bash (opções).
 | 
						|
shopt -s	checkwinsize			\
 | 
						|
			cmdhist					\
 | 
						|
			complete_fullquote		\
 | 
						|
			expand_aliases			\
 | 
						|
			extglob					\
 | 
						|
			extquote				\
 | 
						|
			force_fignore			\
 | 
						|
			histappend				\
 | 
						|
			interactive_comments	\
 | 
						|
			progcomp				\
 | 
						|
			promptvars				\
 | 
						|
			sourcepath
 | 
						|
 | 
						|
# Desabilita a expansão de nomes de arquivos (globbing).
 | 
						|
set -f
 | 
						|
 | 
						|
readonly _SHELLBOT_SH_=1					# Inicialização
 | 
						|
readonly _BOT_SCRIPT_=${0##*/}				# Script
 | 
						|
readonly _CURL_OPT_='--silent --request'	# CURL (opções)
 | 
						|
 | 
						|
# Erros
 | 
						|
readonly _ERR_TYPE_BOOL_='tipo incompatível: suporta somente "true" ou "false".'
 | 
						|
readonly _ERR_TYPE_INT_='tipo incompatível: suporta somente inteiro.'
 | 
						|
readonly _ERR_TYPE_FLOAT_='tipo incompatível: suporta somente float.'
 | 
						|
readonly _ERR_PARAM_REQUIRED_='opção requerida: verique se o(s) parâmetro(s) ou argumento(s) obrigatório(s) estão presente(s).'
 | 
						|
readonly _ERR_TOKEN_UNAUTHORIZED_='não autorizado: verifique se possui permissões para utilizar o token.'
 | 
						|
readonly _ERR_TOKEN_INVALID_='token inválido: verique o número do token e tente novamente.'
 | 
						|
readonly _ERR_BOT_ALREADY_INIT_='ação não permitida: o bot já foi inicializado.'
 | 
						|
readonly _ERR_FILE_NOT_FOUND_='falha ao acessar: não foi possível ler o arquivo.'
 | 
						|
readonly _ERR_DIR_WRITE_DENIED_='permissão negada: não é possível gravar no diretório.'
 | 
						|
readonly _ERR_DIR_NOT_FOUND_='Não foi possível acessar: diretório não encontrado.'
 | 
						|
readonly _ERR_FILE_INVALID_ID_='id inválido: arquivo não encontrado.'
 | 
						|
readonly _ERR_UNKNOWN_='erro desconhecido: ocorreu uma falha inesperada. Reporte o problema ao desenvolvedor.'
 | 
						|
readonly _ERR_SERVICE_NOT_ROOT_='acesso negado: requer privilégios de root.'
 | 
						|
readonly _ERR_SERVICE_EXISTS_='erro ao criar o serviço: o nome do serviço já existe.'
 | 
						|
readonly _ERR_SERVICE_SYSTEMD_NOT_FOUND_='erro ao ativar: o sistema não possui suporte ao gerenciamento de serviços "systemd".'
 | 
						|
readonly _ERR_SERVICE_USER_NOT_FOUND_='usuário não encontrado: a conta de usuário informada é inválida.'
 | 
						|
readonly _ERR_VAR_NAME_='variável não encontrada: o identificador é inválido ou não existe.'
 | 
						|
readonly _ERR_FUNCTION_NOT_FOUND_='função não encontrada: o identificador especificado é inválido ou não existe.'
 | 
						|
readonly _ERR_ARG_='argumento inválido: o argumento não é suportado pelo parâmetro especificado.'
 | 
						|
readonly _ERR_RULE_ALREADY_EXISTS_='falha ao definir: o nome da regra já existe.'
 | 
						|
readonly _ERR_HANDLE_EXISTS_='erro ao registar: já existe um handle vinculado ao callback'
 | 
						|
readonly _ERR_CONNECTION_='falha de conexão: não foi possível estabelecer conexão com o Telegram.'
 | 
						|
 | 
						|
# Maps
 | 
						|
declare -A _BOT_HANDLE_
 | 
						|
declare -A _BOT_RULES_
 | 
						|
declare -A return
 | 
						|
 | 
						|
declare -i _BOT_RULES_INDEX_
 | 
						|
declare _VAR_INIT_
 | 
						|
 | 
						|
Json() { local obj=$(jq -Mc "$1" <<< "${*:2}"); obj=${obj#\"}; echo "${obj%\"}"; }
 | 
						|
 | 
						|
SetDelmValues(){ 
 | 
						|
	local obj=$(jq "[..|select(type == \"string\" or type == \"number\" or type == \"boolean\")|tostring]|join(\"${_BOT_DELM_/\"/\\\"}\")" <<< "$1")
 | 
						|
	obj=${obj#\"}; echo "${obj%\"}"
 | 
						|
}
 | 
						|
 | 
						|
GetAllValues(){
 | 
						|
	jq '[..|select(type == "string" or type == "number" or type == "boolean")|tostring]|.[]' <<< "$1"
 | 
						|
}
 | 
						|
 | 
						|
GetAllKeys(){
 | 
						|
	jq -r 'path(..|select(type == "string" or type == "number" or type == "boolean"))|map(if type == "number" then .|tostring|"["+.+"]" else . end)|join(".")|gsub("\\.\\[";"[")' <<< "$1"
 | 
						|
}
 | 
						|
 | 
						|
FlagConv()
 | 
						|
{
 | 
						|
	local var str=$2
 | 
						|
 | 
						|
	while [[ $str =~ \$\{([a-z_]+)\} ]]; do
 | 
						|
		if [[ ${BASH_REMATCH[1]} == @(${_VAR_INIT_// /|}) ]]; then
 | 
						|
			var=${BASH_REMATCH[1]}[$1]
 | 
						|
			str=${str//${BASH_REMATCH[0]}/${!var}}
 | 
						|
		else
 | 
						|
			str=${str//${BASH_REMATCH[0]}}
 | 
						|
		fi
 | 
						|
	done
 | 
						|
 | 
						|
	echo "$str"
 | 
						|
}
 | 
						|
 | 
						|
CreateLog()
 | 
						|
{
 | 
						|
	local fid fbot fname fuser lcode cid ctype 
 | 
						|
	local ctitle mid mdate mtext etype
 | 
						|
	local i fmt obj oid
 | 
						|
 | 
						|
	for ((i=0; i < $1; i++)); do
 | 
						|
		
 | 
						|
		printf -v fmt "$_BOT_LOG_FORMAT_" || MessageError API
 | 
						|
		
 | 
						|
		# Suprimir erros.
 | 
						|
		exec 5<&2
 | 
						|
		exec 2<&-
 | 
						|
 | 
						|
		# Objeto (tipo)
 | 
						|
		if 		[[ ${message_contact_phone_number[$i]:-${edited_message_contact_phone_number[$i]}}					]] ||
 | 
						|
				[[ ${channel_post_contact_phone_number[$i]:-${edited_channel_post_contact_phone_number[$i]}}		]]; then obj=contact
 | 
						|
		elif	[[ ${message_sticker_file_id[$i]:-${edited_message_sticker_file_id[$i]}}							]] ||
 | 
						|
				[[ ${channel_post_sticker_file_id[$i]:-${edited_channel_post_sticker_file_id[$i]}}					]]; then obj=sticker
 | 
						|
		elif	[[ ${message_animation_file_id[$i]:-${edited_message_animation_file_id[$i]}}						]] ||
 | 
						|
				[[ ${channel_post_animation_file_id[$i]:-${edited_channel_post_animation_file_id[$i]}}				]]; then obj=animation
 | 
						|
		elif	[[ ${message_photo_file_id[$i]:-${edited_message_photo_file_id[$i]}}								]] ||
 | 
						|
				[[ ${channel_post_photo_file_id[$i]:-${edited_channel_post_photo_file_id[$i]}}						]]; then obj=photo
 | 
						|
		elif	[[ ${message_audio_file_id[$i]:-${edited_message_audio_file_id[$i]}}								]] ||
 | 
						|
				[[ ${channel_post_audio_file_id[$i]:-${edited_channel_post_audio_file_id[$i]}}						]]; then obj=audio
 | 
						|
		elif	[[ ${message_video_file_id[$i]:-${edited_message_video_file_id[$i]}}								]] ||
 | 
						|
				[[ ${channel_post_video_file_id[$i]:-${edited_channel_post_video_file_id[$i]}}						]]; then obj=video
 | 
						|
		elif	[[ ${message_voice_file_id[$i]:-${edited_message_voice_file_id[$i]}}								]] ||
 | 
						|
				[[ ${channel_post_voice_file_id[$i]:-${edited_channel_post_voice_file_id[$i]}}						]]; then obj=voice
 | 
						|
		elif	[[ ${message_document_file_id[$i]:-${edited_message_document_file_id[$i]}}							]] ||
 | 
						|
				[[ ${channel_post_document_file_id[$i]:-${edited_channel_post_document_file_id[$i]}}				]]; then obj=document
 | 
						|
		elif	[[ ${message_venue_location_latitude[$i]:-${edited_message_venue_location_latitude[$i]}}			]] ||
 | 
						|
				[[ ${channel_post_venue_location_latitude[$i]-${edited_channel_post_venue_location_latitude[$i]}}	]]; then obj=venue
 | 
						|
		elif	[[ ${message_location_latitude[$i]:-${edited_message_location_latitude[$i]}}						]] ||
 | 
						|
				[[ ${channel_post_location_latitude[$i]:-${edited_channel_post_location_latitude[$i]}}				]]; then obj=location
 | 
						|
		elif	[[ ${message_text[$i]:-${edited_message_text[$i]}}													]] ||
 | 
						|
				[[ ${channel_post_text[$i]:-${edited_channel_post_text[$i]}}										]]; then obj=text
 | 
						|
		elif 	[[ ${callback_query_id[$i]}																			]]; then obj=callback
 | 
						|
		elif 	[[ ${inline_query_id[$i]}																			]]; then obj=inline
 | 
						|
		elif	[[ ${chosen_inline_result_result_id[$i]}															]]; then obj=chosen
 | 
						|
		fi
 | 
						|
	
 | 
						|
		# Objeto (id)	
 | 
						|
		[[ ${oid:=${message_contact_phone_number[$i]}} 				]] ||
 | 
						|
		[[ ${oid:=${message_sticker_file_id[$i]}}					]] ||
 | 
						|
		[[ ${oid:=${message_animation_file_id[$i]}}					]] ||
 | 
						|
		[[ ${oid:=${message_photo_file_id[$i]}}						]] ||
 | 
						|
		[[ ${oid:=${message_audio_file_id[$i]}}						]] ||
 | 
						|
		[[ ${oid:=${message_video_file_id[$i]}}						]] ||
 | 
						|
		[[ ${oid:=${message_voice_file_id[$i]}}						]] ||
 | 
						|
		[[ ${oid:=${message_document_file_id[$i]}}					]] ||
 | 
						|
		[[ ${oid:=${edited_message_contact_phone_number[$i]}} 		]] ||
 | 
						|
		[[ ${oid:=${edited_message_sticker_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_message_animation_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_message_photo_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${edited_message_audio_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${edited_message_video_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${edited_message_voice_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${edited_message_document_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${channel_post_contact_phone_number[$i]}} 		]] ||
 | 
						|
		[[ ${oid:=${channel_post_sticker_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${channel_post_animation_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${channel_post_photo_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${channel_post_audio_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${channel_post_video_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${channel_post_voice_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${channel_post_document_file_id[$i]}}				]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_contact_phone_number[$i]}} 	]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_sticker_file_id[$i]}}		]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_animation_file_id[$i]}}		]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_photo_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_audio_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_video_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_voice_file_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_document_file_id[$i]}}		]] ||
 | 
						|
		[[ ${oid:=${message_message_id[$i]}}						]] ||
 | 
						|
		[[ ${oid:=${edited_message_message_id[$i]}}					]] ||
 | 
						|
		[[ ${oid:=${channel_post_message_id[$i]}}					]] ||
 | 
						|
		[[ ${oid:=${edited_channel_post_message_id[$i]}}			]] ||
 | 
						|
		[[ ${oid:=${callback_query_id[$i]}}							]] ||
 | 
						|
		[[ ${oid:=${inline_query_id[$i]}} 							]] ||
 | 
						|
		[[ ${oid:=${chosen_inline_result_result_id[$i]}}			]]
 | 
						|
 | 
						|
		# Remetente (id)
 | 
						|
		[[ ${fid:=${message_from_id[$i]}}				]] ||
 | 
						|
		[[ ${fid:=${edited_message_from_id[$i]}} 		]] ||
 | 
						|
		[[ ${fid:=${callback_query_from_id[$i]}} 		]] ||
 | 
						|
		[[ ${fid:=${inline_query_from_id[$i]}} 			]] ||
 | 
						|
		[[ ${fid:=${chosen_inline_result_from_id[$i]}} 	]]
 | 
						|
 | 
						|
		# Bot
 | 
						|
		[[ ${fbot:=${message_from_is_bot[$i]}} 				]] ||
 | 
						|
		[[ ${fbot:=${edited_message_from_is_bot[$i]}} 		]] ||
 | 
						|
		[[ ${fbot:=${callback_query_from_is_bot[$i]}} 		]] ||
 | 
						|
		[[ ${fbot:=${inline_query_from_is_bot[$i]}} 		]] ||
 | 
						|
		[[ ${fbot:=${chosen_inline_result_from_is_bot[$i]}} ]]
 | 
						|
 | 
						|
		# Usuário (nome)
 | 
						|
		[[ ${fname:=${message_from_first_name[$i]}} 				]] ||
 | 
						|
		[[ ${fname:=${edited_message_from_first_name[$i]}}			]] ||
 | 
						|
		[[ ${fname:=${callback_query_from_first_name[$i]}} 			]] ||
 | 
						|
		[[ ${fname:=${inline_query_from_first_name[$i]}}			]] ||
 | 
						|
		[[ ${fname:=${chosen_inline_result_from_first_name[$i]}}	]] ||
 | 
						|
		[[ ${fname:=${channel_post_author_signature[$i]}}			]] ||
 | 
						|
		[[ ${fname:=${edited_channel_post_author_signature[$i]}}	]]
 | 
						|
 | 
						|
		# Usuário (conta)
 | 
						|
		[[ ${fuser:=${message_from_username[$i]}}				]] ||
 | 
						|
		[[ ${fuser:=${edited_message_from_username[$i]}} 		]] ||
 | 
						|
		[[ ${fuser:=${callback_query_from_username[$i]}} 		]] ||
 | 
						|
		[[ ${fuser:=${inline_query_from_username[$i]}} 			]] ||
 | 
						|
		[[ ${fuser:=${chosen_inline_result_from_username[$i]}} 	]]
 | 
						|
 | 
						|
		# Idioma
 | 
						|
		[[ ${lcode:=${message_from_language_code[$i]}} 				]] ||
 | 
						|
		[[ ${lcode:=${edited_message_from_language_code[$i]}} 		]] ||
 | 
						|
		[[ ${lcode:=${callback_query_from_language_code[$i]}} 		]] ||
 | 
						|
		[[ ${lcode:=${inline_query_from_language_code[$i]}} 		]] ||
 | 
						|
		[[ ${lcode:=${chosen_inline_result_from_language_code[$i]}}	]]
 | 
						|
 | 
						|
		# Bate-papo (id)
 | 
						|
		[[ ${cid:=${message_chat_id[$i]}}					]] ||
 | 
						|
		[[ ${cid:=${edited_message_chat_id[$i]}}			]] ||
 | 
						|
		[[ ${cid:=${callback_query_message_chat_id[$i]}} 	]] ||
 | 
						|
		[[ ${cid:=${channel_post_chat_id[$i]}}				]] ||
 | 
						|
		[[ ${cid:=${edited_channel_post_chat_id[$i]}}		]]
 | 
						|
 | 
						|
		# Bate-papo (tipo)
 | 
						|
		[[ ${ctype:=${message_chat_type[$i]}} 					]] ||
 | 
						|
		[[ ${ctype:=${edited_message_chat_type[$i]}} 			]] ||
 | 
						|
		[[ ${ctype:=${callback_query_message_chat_type[$i]}} 	]] ||
 | 
						|
		[[ ${ctype:=${channel_post_chat_type[$i]}}				]] ||
 | 
						|
		[[ ${ctype:=${edited_channel_post_chat_type[$i]}}		]]
 | 
						|
 | 
						|
		# Bate-papo (título)
 | 
						|
		[[ ${ctitle:=${message_chat_title[$i]}}					]] ||
 | 
						|
		[[ ${ctitle:=${edited_message_chat_title[$i]}} 			]] ||
 | 
						|
		[[ ${ctitle:=${callback_query_message_chat_title[$i]}} 	]] ||
 | 
						|
		[[ ${ctitle:=${channel_post_chat_title[$i]}}			]] ||
 | 
						|
		[[ ${ctitle:=${edited_channel_post_chat_title[$i]}}		]]
 | 
						|
 | 
						|
		# Mensagem (id)
 | 
						|
		[[ ${mid:=${message_message_id[$i]}} 				]] ||
 | 
						|
		[[ ${mid:=${edited_message_message_id[$i]}} 		]] ||
 | 
						|
		[[ ${mid:=${callback_query_id[$i]}} 				]] ||
 | 
						|
		[[ ${mid:=${inline_query_id[$i]}} 					]] ||
 | 
						|
		[[ ${mid:=${chosen_inline_result_result_id[$i]}}	]] ||
 | 
						|
		[[ ${mid:=${channel_post_message_id[$i]}}			]] ||
 | 
						|
		[[ ${mid:=${edited_channel_post_message_id[$i]}}	]]
 | 
						|
 | 
						|
		# Mensagem (data)
 | 
						|
		[[ ${mdate:=${message_date[$i]}}				]] ||
 | 
						|
		[[ ${mdate:=${edited_message_date[$i]}} 		]] ||
 | 
						|
		[[ ${mdate:=${callback_query_message_date[$i]}}	]] ||
 | 
						|
		[[ ${mdate:=${channel_post_date[$i]}}			]] ||
 | 
						|
		[[ ${mdate:=${edited_channel_post_date[$i]}}	]]
 | 
						|
 | 
						|
		# Mensagem (texto)
 | 
						|
		[[ ${mtext:=${message_text[$i]}} 				]] ||
 | 
						|
		[[ ${mtext:=${edited_message_text[$i]}} 		]] ||
 | 
						|
		[[ ${mtext:=${callback_query_message_text[$i]}} ]] ||
 | 
						|
		[[ ${mtext:=${inline_query_query[$i]}} 			]] ||
 | 
						|
		[[ ${mtext:=${chosen_inline_result_query[$i]}}	]] ||
 | 
						|
		[[ ${mtext:=${channel_post_text[$i]}}			]] ||
 | 
						|
		[[ ${mtext:=${edited_channel_post_text[$i]}}	]]
 | 
						|
 | 
						|
		# Mensagem (tipo)
 | 
						|
		[[ ${etype:=${message_entities_type[$i]}} 					]] ||
 | 
						|
		[[ ${etype:=${edited_message_entities_type[$i]}} 			]] ||
 | 
						|
		[[ ${etype:=${callback_query_message_entities_type[$i]}}	]] ||
 | 
						|
		[[ ${etype:=${channel_post_entities_type[$i]}}				]] ||
 | 
						|
		[[ ${etype:=${edited_channel_post_entities_type[$i]}}		]]
 | 
						|
 | 
						|
		# Flags
 | 
						|
		fmt=${fmt//\{BOT_TOKEN\}/${_BOT_INFO_[0]:--}}
 | 
						|
		fmt=${fmt//\{BOT_ID\}/${_BOT_INFO_[1]:--}}
 | 
						|
		fmt=${fmt//\{BOT_FIRST_NAME\}/${_BOT_INFO_[2]:--}}
 | 
						|
		fmt=${fmt//\{BOT_USERNAME\}/${_BOT_INFO_[3]:--}}
 | 
						|
		fmt=${fmt//\{BASENAME\}/${_BOT_SCRIPT_:--}}
 | 
						|
		fmt=${fmt//\{OK\}/${return[ok]:-${ok:--}}}
 | 
						|
		fmt=${fmt//\{UPDATE_ID\}/${update_id[$i]:--}}
 | 
						|
		fmt=${fmt//\{OBJECT_TYPE\}/${obj:--}}
 | 
						|
		fmt=${fmt//\{OBJECT_ID\}/${oid:--}}
 | 
						|
		fmt=${fmt//\{FROM_ID\}/${fid:--}}
 | 
						|
		fmt=${fmt//\{FROM_IS_BOT\}/${fbot:--}}
 | 
						|
		fmt=${fmt//\{FROM_FIRST_NAME\}/${fname:--}}
 | 
						|
		fmt=${fmt//\{FROM_USERNAME\}/${fuser:--}}
 | 
						|
		fmt=${fmt//\{FROM_LANGUAGE_CODE\}/${lcode:--}}
 | 
						|
		fmt=${fmt//\{CHAT_ID\}/${cid:--}}
 | 
						|
		fmt=${fmt//\{CHAT_TYPE\}/${ctype:--}}
 | 
						|
		fmt=${fmt//\{CHAT_TITLE\}/${ctitle:--}}
 | 
						|
		fmt=${fmt//\{MESSAGE_ID\}/${mid:--}}
 | 
						|
		fmt=${fmt//\{MESSAGE_DATE\}/${mdate:--}}
 | 
						|
		fmt=${fmt//\{MESSAGE_TEXT\}/${mtext:--}}
 | 
						|
		fmt=${fmt//\{ENTITIES_TYPE\}/${etype:--}}
 | 
						|
		fmt=${fmt//\{METHOD\}/${FUNCNAME[2]/main/ShellBot.getUpdates}}
 | 
						|
		fmt=${fmt//\{RETURN\}/$(SetDelmValues "$2")}
 | 
						|
 | 
						|
		exec 2<&5
 | 
						|
 | 
						|
		# log
 | 
						|
		[[ $fmt ]] && { echo "$fmt" >> "$_BOT_LOG_FILE_" || MessageError API; }
 | 
						|
 | 
						|
		# Limpa objetos
 | 
						|
		fid= fbot= fname= fuser= lcode= cid= ctype= 
 | 
						|
		ctitle= mid= mdate= mtext= etype= obj= oid=
 | 
						|
	done
 | 
						|
 | 
						|
	return $?
 | 
						|
}
 | 
						|
 | 
						|
MethodReturn()
 | 
						|
{
 | 
						|
	# Retorno
 | 
						|
	case $_BOT_TYPE_RETURN_ in
 | 
						|
		json) echo "$1";;
 | 
						|
		value) SetDelmValues "$1";;
 | 
						|
		map)
 | 
						|
			local key val vars vals i obj
 | 
						|
			return=()
 | 
						|
 | 
						|
			mapfile -t vars <<< $(GetAllKeys "$1")
 | 
						|
			mapfile -t vals <<< $(GetAllValues "$1")
 | 
						|
 | 
						|
			for i in ${!vars[@]}; do
 | 
						|
				key=${vars[$i]//[0-9\[\]]/}
 | 
						|
				key=${key#result.}
 | 
						|
				key=${key//./_}
 | 
						|
 | 
						|
				val=${vals[$i]}
 | 
						|
				val=${val#\"}
 | 
						|
				val=${val%\"}
 | 
						|
				
 | 
						|
				[[ ${return[$key]} ]] && return[$key]+=${_BOT_DELM_}${val} || return[$key]=$val
 | 
						|
				[[ $_BOT_MONITOR_ ]] && printf "[%s]: return[%s] = '%s'\n" "${FUNCNAME[1]}" "$key" "$val"
 | 
						|
			done
 | 
						|
			;;
 | 
						|
	esac
 | 
						|
	
 | 
						|
	[[ $(jq -r '.ok' <<< "$1") == true ]]
 | 
						|
 | 
						|
	return $?
 | 
						|
}
 | 
						|
 | 
						|
MessageError()
 | 
						|
{
 | 
						|
	# Variáveis locais
 | 
						|
	local err_message err_param assert i
 | 
						|
	
 | 
						|
	# 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 ]] && i=2 || i=1
 | 
						|
	
 | 
						|
	# 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)
 | 
						|
			err_param="$(Json '.error_code' "$2")"
 | 
						|
			err_message="$(Json '.description' "$2")"
 | 
						|
			;;
 | 
						|
		API)
 | 
						|
			err_param="${3:--}: ${4:--}"
 | 
						|
			err_message="$2"
 | 
						|
			assert=true
 | 
						|
			;;
 | 
						|
	esac
 | 
						|
 | 
						|
	# Imprime erro
 | 
						|
	printf "%s: erro: linha %s: %s: %s: %s\n"					\
 | 
						|
							"${_BOT_SCRIPT_}"					\
 | 
						|
							"${BASH_LINENO[$i]:--}" 			\
 | 
						|
							"${FUNCNAME[$i]:--}" 				\
 | 
						|
							"${err_param:--}" 					\
 | 
						|
							"${err_message:-$_ERR_UNKNOWN_}" 	1>&2 
 | 
						|
 | 
						|
	# Finaliza script/thread em caso de erro interno, caso contrário retorna 1
 | 
						|
	${assert:-false} && exit 1 || return 1
 | 
						|
}
 | 
						|
 | 
						|
CheckArgType()
 | 
						|
{
 | 
						|
	# 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 $1 in
 | 
						|
		user)		id "$3" &>/dev/null						|| MessageError API "$_ERR_SERVICE_USER_NOT_FOUND_" "$2" "$3";;
 | 
						|
		func)		[[ $(type -t "$3") == function			]] 	|| MessageError API "$_ERR_FUNCTION_NOT_FOUND_" "$2" "$3";;
 | 
						|
		var)		[[ -v $3 								]] 	|| MessageError API "$_ERR_VAR_NAME_" "$2" "$3";;
 | 
						|
		int)		[[ $3 =~ ^-?[0-9]+$ 					]] 	|| MessageError API "$_ERR_TYPE_INT_" "$2" "$3";;
 | 
						|
		float)		[[ $3 =~ ^-?[0-9]+\.[0-9]+$ 			]] 	|| MessageError API "$_ERR_TYPE_FLOAT_" "$2" "$3";;
 | 
						|
		bool)		[[ $3 =~ ^(true|false)$ 				]] 	|| MessageError API "$_ERR_TYPE_BOOL_" "$2" "$3";;
 | 
						|
		token)		[[ $3 =~ ^[0-9]+:[a-zA-Z0-9_-]+$		]] 	|| MessageError API "$_ERR_TOKEN_INVALID_" "$2" "$3";;
 | 
						|
		file)		[[ $3 =~ ^@ && ! -f ${3#@} 				]] 	&& MessageError API "$_ERR_FILE_NOT_FOUND_" "$2" "$3";;
 | 
						|
		return)		[[ $3 == @(json|map|value) 				]] 	|| MessageError API "$_ERR_ARG_" "$2" "$3";;
 | 
						|
		cmd)		[[ $3 =~ ^/[a-zA-Z0-9_]+$ 				]] 	|| MessageError API "$_ERR_ARG_" "$2" "$3";;
 | 
						|
		flag)		[[ $3 =~ ^[a-zA-Z0-9_]+$ 				]] 	|| MessageError API "$_ERR_ARG_" "$2" "$3";;
 | 
						|
	esac
 | 
						|
 | 
						|
	return $?
 | 
						|
}
 | 
						|
 | 
						|
FlushOffset()
 | 
						|
{    
 | 
						|
	local sid eid jq_obj
 | 
						|
 | 
						|
	while :; do
 | 
						|
		jq_obj=$(ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext))
 | 
						|
		IFS=' ' read -a update_id <<< $(jq -r '.result|.[]|.update_id' <<< $jq_obj)
 | 
						|
		[[ $update_id ]] || break
 | 
						|
		sid=${sid:-${update_id[0]}}
 | 
						|
		eid=${update_id[-1]}
 | 
						|
	done
 | 
						|
	
 | 
						|
	echo "${sid:-0}|${eid:-0}"
 | 
						|
 | 
						|
	return $?
 | 
						|
}
 | 
						|
 | 
						|
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 systemctl &>/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	
 | 
						|
		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"
 | 
						|
		systemctl daemon-reload
 | 
						|
 | 
						|
		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()
 | 
						|
{
 | 
						|
	local method_return delm ret logfmt jq_obj offset
 | 
						|
	local token monitor flush service user logfile logfmt
 | 
						|
	
 | 
						|
	# Verifica se o bot já foi inicializado.
 | 
						|
	[[ $_SHELLBOT_INIT_ ]] && MessageError API "$_ERR_BOT_ALREADY_INIT_"
 | 
						|
 | 
						|
	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
						 --options 't:mfsu:l:o:r:d:' \
 | 
						|
						 --longoptions 'token:,
 | 
						|
										monitor,
 | 
						|
										flush,
 | 
						|
										service,
 | 
						|
										user:,
 | 
						|
										log_file:,
 | 
						|
										log_format:,
 | 
						|
										return:,
 | 
						|
										delimiter:' \
 | 
						|
    					 -- "$@")
 | 
						|
    
 | 
						|
	# Define os parâmetros posicionais
 | 
						|
	eval set -- "$param"
 | 
						|
	
 | 
						|
	while :
 | 
						|
    	do
 | 
						|
			case $1 in
 | 
						|
				-t|--token)
 | 
						|
	    			CheckArgType token "$1" "$2"
 | 
						|
					token=$2
 | 
						|
	    			shift 2
 | 
						|
	   				;;
 | 
						|
	   			-m|--monitor)
 | 
						|
					# Ativa modo monitor
 | 
						|
					monitor=true
 | 
						|
	   				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.
 | 
						|
					flush=true
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				-s|--service)
 | 
						|
					service=true
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				-u|--user)
 | 
						|
					CheckArgType user "$1" "$2"
 | 
						|
					user=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-l|--log_file)
 | 
						|
					logfile=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-o|--log_format)
 | 
						|
					logfmt=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-r|--return)
 | 
						|
					CheckArgType return "$1" "$2"
 | 
						|
					ret=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-d|--delimiter)
 | 
						|
					delm=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
	   			--)
 | 
						|
	   				shift
 | 
						|
	   				break
 | 
						|
	   				;;
 | 
						|
	   		esac
 | 
						|
	   	done
 | 
						|
  
 | 
						|
	# Parâmetro obrigatório.	
 | 
						|
	[[ $token 					]]	|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --token]"
 | 
						|
	[[ $user && ! $service 		]] 	&& MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --service]" 
 | 
						|
	[[ $service 				]]	&& CreateUnitService "$_BOT_SCRIPT_" "${user:-$USER}"
 | 
						|
		   
 | 
						|
	declare -gr _TOKEN_=$token											# TOKEN
 | 
						|
	declare -gr _API_TELEGRAM_="https://api.telegram.org/bot$_TOKEN_"	# API
 | 
						|
 | 
						|
	# Testa conexão.
 | 
						|
	curl -s "$_API_TELEGRAM_" &>- || MessageError API "$_ERR_CONNECTION_"
 | 
						|
 | 
						|
    # 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.
 | 
						|
    	jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.})
 | 
						|
 | 
						|
		# Verifica o status de retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	return $?
 | 
						|
    }
 | 
						|
 | 
						|
	ShellBot.getMe &>- || MessageError API "$_ERR_TOKEN_UNAUTHORIZED_" '[-t, --token]'
 | 
						|
	
 | 
						|
	# Salva as informações do bot.
 | 
						|
	declare -gr _BOT_INFO_=(
 | 
						|
		[0]=$_TOKEN_
 | 
						|
		[1]=$(Json '.result.id' $jq_obj)
 | 
						|
		[2]=$(Json '.result.first_name' $jq_obj)
 | 
						|
		[3]=$(Json '.result.username' $jq_obj)
 | 
						|
	)
 | 
						|
 | 
						|
	# Configurações.
 | 
						|
	declare -gr _BOT_FLUSH_=$flush
 | 
						|
	declare -gr _BOT_MONITOR_=$monitor
 | 
						|
	declare -gr _BOT_SERVICE_=$service
 | 
						|
	declare -gr _BOT_USER_SERVICE_=$user
 | 
						|
	declare -gr _BOT_TYPE_RETURN_=${ret:-value}
 | 
						|
	declare -gr _BOT_DELM_=${delm:-|}
 | 
						|
	declare -gr _BOT_LOG_FILE_=${logfile}
 | 
						|
	declare -gr _BOT_LOG_FORMAT_=${logfmt:-%(%d/%m/%Y %H:%M:%S)T: \{BASENAME\}: \{BOT_USERNAME\}: \{UPDATE_ID\}: \{METHOD\}: \{CHAT_TYPE\}: \{FROM_USERNAME\}: \{OBJECT_TYPE\}: \{OBJECT_ID\}: \{MESSAGE_TEXT\}}
 | 
						|
	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 $((${update_id[@]: -1}+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.getConfig()
 | 
						|
	{
 | 
						|
		local jq_obj
 | 
						|
 | 
						|
		printf -v jq_obj '{"monitor":%s,"flush":%s,"service":%s,"return":"%s","delimiter":"%s","user":"%s","log_file":"%s","log_format":"%s"}'	\
 | 
						|
							"${_BOT_MONITOR_:-false}"   \
 | 
						|
							"${_BOT_FLUSH_:-false}"  	\
 | 
						|
							"${_BOT_SERVICE_:-false}"   \
 | 
						|
							"${_BOT_TYPE_RETURN_}"      \
 | 
						|
							"${_BOT_DELM_}"				\
 | 
						|
							"${_BOT_USER_SERVICE_}"     \
 | 
						|
							"${_BOT_LOG_FILE_}"         \
 | 
						|
							"${_BOT_LOG_FORMAT_}"
 | 
						|
 | 
						|
		MethodReturn "$jq_obj"
 | 
						|
 | 
						|
		return $?	
 | 
						|
	}
 | 
						|
 | 
						|
    ShellBot.regHandleFunction()
 | 
						|
    {
 | 
						|
    	local function 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)
 | 
						|
					CheckArgType func "$1" "$2"
 | 
						|
   					function=$2
 | 
						|
   					shift 2
 | 
						|
   					;;
 | 
						|
    			-a|--args)
 | 
						|
   					args=$2
 | 
						|
   					shift 2
 | 
						|
   					;;
 | 
						|
   				-d|--callback_data)
 | 
						|
   					data=$2
 | 
						|
   					shift 2
 | 
						|
   					;;
 | 
						|
   				--)
 | 
						|
   					shift
 | 
						|
   					break
 | 
						|
   					;;
 | 
						|
   			esac
 | 
						|
   		done
 | 
						|
 | 
						|
		[[ $function ]] 		|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --function]"
 | 
						|
   		[[ $data ]] 			|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --callback_data]"
 | 
						|
 | 
						|
   		[[ ${_BOT_HANDLE_[$data]} ]] && MessageError API "$_ERR_HANDLE_EXISTS_" '[-d, --callback_data]'
 | 
						|
 | 
						|
   		_BOT_HANDLE_[$data]=func:$function' '$args
 | 
						|
 | 
						|
   		return 0
 | 
						|
    }
 | 
						|
    
 | 
						|
	ShellBot.regHandleExec()
 | 
						|
    {
 | 
						|
    	local cmd data
 | 
						|
    
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:d:' \
 | 
						|
								--longoptions	'command:,
 | 
						|
												callback_data:' \
 | 
						|
								-- "$@")
 | 
						|
    
 | 
						|
		eval set -- "$param"
 | 
						|
    		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
   			case $1 in
 | 
						|
   				-c|--command)
 | 
						|
   					cmd=$2
 | 
						|
   					shift 2
 | 
						|
   					;;
 | 
						|
   				-d|--callback_data)
 | 
						|
   					data=$2
 | 
						|
   					shift 2
 | 
						|
   					;;
 | 
						|
   				--)
 | 
						|
   					shift
 | 
						|
   					break
 | 
						|
   					;;
 | 
						|
   			esac
 | 
						|
   		done
 | 
						|
 | 
						|
		[[ $cmd ]]	|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --command]"
 | 
						|
   		[[ $data ]]	|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --callback_data]"
 | 
						|
 | 
						|
   		[[ ${_BOT_HANDLE_[$data]} ]] && MessageError API "$_ERR_HANDLE_EXISTS_" "[-d, --callback_data]"
 | 
						|
 | 
						|
   		_BOT_HANDLE_[$data]=exec:$cmd
 | 
						|
 | 
						|
   		return 0
 | 
						|
    }
 | 
						|
    
 | 
						|
    ShellBot.watchHandle()
 | 
						|
    {
 | 
						|
    	local data flag cmd
 | 
						|
 | 
						|
		local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							--options 'd' \
 | 
						|
							--longoptions 'callback_data' \
 | 
						|
							-- "$@")
 | 
						|
    
 | 
						|
    	eval set -- "$param"
 | 
						|
    
 | 
						|
    	while :
 | 
						|
    	do
 | 
						|
    		case $1 in
 | 
						|
    			-d|--callback_data)
 | 
						|
    				shift 2
 | 
						|
    				data=$1
 | 
						|
    				;;
 | 
						|
    			*)
 | 
						|
    				shift
 | 
						|
    				break
 | 
						|
    				;;
 | 
						|
    		esac
 | 
						|
    	done
 | 
						|
    	
 | 
						|
		# Handles (somente-leitura)
 | 
						|
		readonly _BOT_HANDLE_
 | 
						|
 | 
						|
    	[[ $data ]] || return 1 # vazio
 | 
						|
   	
 | 
						|
		IFS=':' read -r flag cmd <<< "${_BOT_HANDLE_[$data]}"
 | 
						|
 | 
						|
		case $flag in
 | 
						|
			func) $cmd;;
 | 
						|
			exec) eval "$cmd";;
 | 
						|
		esac
 | 
						|
    
 | 
						|
    	# 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$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.
 | 
						|
    	MethodReturn "$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"})
 | 
						|
    
 | 
						|
    	MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    		
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
    }
 | 
						|
    
 | 
						|
    ShellBot.restrictChatMember()
 | 
						|
    {
 | 
						|
    	local chat_id user_id until_date permissions jq_obj
 | 
						|
    
 | 
						|
    	local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:u:d:p:' \
 | 
						|
								--longoptions 'chat_id:,
 | 
						|
												user_id:,
 | 
						|
												until_date:,
 | 
						|
												permissions:' \
 | 
						|
								-- "$@")
 | 
						|
    	
 | 
						|
    	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
 | 
						|
    				;;
 | 
						|
				-p|--permissions)
 | 
						|
					permissions=$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]"
 | 
						|
    	[[ $permissions ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --permissions]"
 | 
						|
    	
 | 
						|
    	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"} \
 | 
						|
									${permissions:+-d permissions="$permissions"})
 | 
						|
    
 | 
						|
		MethodReturn "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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.
 | 
						|
    	MethodReturn "$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:k:' \
 | 
						|
							 --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
 | 
						|
    				;;
 | 
						|
    			-k|--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.
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    	
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
    }
 | 
						|
    
 | 
						|
    
 | 
						|
    ShellBot.InlineKeyboardButton()
 | 
						|
    {
 | 
						|
        local 	__button __line __text __url __callback_data \
 | 
						|
                __switch_inline_query __switch_inline_query_current_chat
 | 
						|
    
 | 
						|
        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-1))
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
    			-t|--text)
 | 
						|
					__text=$(echo -e "$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]"
 | 
						|
    	
 | 
						|
		__button=$__button[$__line]
 | 
						|
 | 
						|
		printf -v $__button '%s' "${!__button#[}"
 | 
						|
		printf -v $__button '%s' "${!__button%]}"
 | 
						|
		
 | 
						|
		printf -v $__button '%s {"text": "%s", "callback_data": "%s", "url": "%s", "switch_inline_query": "%s", "switch_inline_query_current_chat": "%s"}' 	\
 | 
						|
							"${!__button:+${!__button},}"																									\
 | 
						|
							"${__text}"																														\
 | 
						|
							"${__callback_data}"																											\
 | 
						|
							"${__url}"																														\
 | 
						|
							"${__switch_inline_query}"																										\
 | 
						|
							"${__switch_inline_query_current_chat}"
 | 
						|
 | 
						|
		printf -v $__button '%s' "[${!__button}]"
 | 
						|
 | 
						|
    	return $?
 | 
						|
    }
 | 
						|
    
 | 
						|
    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]"
 | 
						|
    
 | 
						|
		__button=$__button[@]
 | 
						|
 | 
						|
		printf -v __keyboard '%s,' "${!__button}"
 | 
						|
		printf -v __keyboard '%s' "${__keyboard%,}"
 | 
						|
 | 
						|
    	# 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.
 | 
						|
		printf '{"inline_keyboard": [%s]}' "${__keyboard}"
 | 
						|
    
 | 
						|
		return $?
 | 
						|
    }
 | 
						|
    
 | 
						|
    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=$(echo -e "$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"})
 | 
						|
    
 | 
						|
		MethodReturn "$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 __keyboard
 | 
						|
    	
 | 
						|
    	# 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]"
 | 
						|
		
 | 
						|
		__button=$__button[@]
 | 
						|
 | 
						|
		printf -v __keyboard '%s,' "${!__button}"
 | 
						|
		printf -v __keyboard '%s' "${__keyboard%,}"
 | 
						|
 | 
						|
    	# 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.
 | 
						|
		printf '{"keyboard": [%s], "resize_keyboard": %s, "one_time_keyboard": %s, "selective": %s}'	\
 | 
						|
				"${__keyboard}"																			\
 | 
						|
				"${__resize_keyboard:-false}" 															\
 | 
						|
				"${__on_time_keyboard:-false}"															\
 | 
						|
				"${__selective:-false}"
 | 
						|
 | 
						|
    	# status
 | 
						|
    	return $?
 | 
						|
    }
 | 
						|
 | 
						|
	ShellBot.KeyboardButton()
 | 
						|
	{
 | 
						|
		local __text __contact __location __button __line __request_poll
 | 
						|
 | 
						|
		local __param=$(getopt	--name "$FUNCNAME"	\
 | 
						|
								--options 'b:l:t:c:o:r:'	\
 | 
						|
								--longoptions 'button:,
 | 
						|
												line:,
 | 
						|
												text:,
 | 
						|
												request_contact:,
 | 
						|
												request_location:,
 | 
						|
												request_poll:' \
 | 
						|
								-- "$@")
 | 
						|
	
 | 
						|
		eval set -- "$__param"
 | 
						|
	
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-b|--button)
 | 
						|
					CheckArgType var "$1" "$2"
 | 
						|
					__button=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-l|--line)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					__line=$(($2-1))
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-t|--text)
 | 
						|
					__text=$(echo -e "$2")
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-c|--request_contact)
 | 
						|
					CheckArgType bool "$1" "$2"
 | 
						|
					__contact=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-o|--request_location)
 | 
						|
					CheckArgType bool "$1" "$2"
 | 
						|
					__location=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-r|--request_poll)
 | 
						|
					__request_poll=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
    	[[ $__button ]] 		|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
 | 
						|
    	[[ $__text ]] 			|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
 | 
						|
    	[[ $__line ]] 			|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --line]"
 | 
						|
    
 | 
						|
		__button=$__button[$__line]
 | 
						|
 | 
						|
		printf -v $__button '%s' "${!__button#[}"
 | 
						|
		printf -v $__button '%s' "${!__button%]}"
 | 
						|
		
 | 
						|
		printf -v $__button '%s {"text": "%s", "request_contact": %s, "request_location": %s, "request_poll": %s}' 	\
 | 
						|
							"${!__button:+${!__button},}"															\
 | 
						|
							"${__text}"																				\
 | 
						|
							"${__contact:-false}"																	\
 | 
						|
							"${__location:-false}"																	\
 | 
						|
							"${__request_poll:-\"\"}"
 | 
						|
 | 
						|
		printf -v $__button '%s' "[${!__button}]"
 | 
						|
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.ForceReply()
 | 
						|
	{
 | 
						|
		local selective
 | 
						|
 | 
						|
		local param=$(getopt 	--name "$FUNCNAME" 			\
 | 
						|
								--options 's:' 				\
 | 
						|
								--longoptions 'selective:' 	\
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-s|--selective)
 | 
						|
					CheckArgType bool "$1" "$2"
 | 
						|
					selective=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		printf '{"force_reply": true, "selective": %s}' ${selective:-false}
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.ReplyKeyboardRemove()
 | 
						|
	{
 | 
						|
		local selective
 | 
						|
 | 
						|
		local param=$(getopt 	--name "$FUNCNAME" 			\
 | 
						|
								--options 's:' 				\
 | 
						|
								--longoptions 'selective:' 	\
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-s|--selective)
 | 
						|
					CheckArgType bool "$1" "$2"
 | 
						|
					selective=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		printf '{"remove_keyboard": true, "selective": %s}' ${selective:-false}
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
    # 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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
    			-p|--parse_mode)
 | 
						|
    				# Tipo: "markdown" ou "html"
 | 
						|
    				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.
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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 
 | 
						|
		local parse_mode reply_to_message_id reply_markup jq_obj
 | 
						|
 | 
						|
    	# Lê os parâmetros da função
 | 
						|
    	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							 --options 'c:p:t:m:n:r:k:' \
 | 
						|
    						 --longoptions 'chat_id:, 
 | 
						|
    										photo:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
				-m|--parse_mode)
 | 
						|
					parse_mode=$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"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
									${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
 | 
						|
    	MethodReturn "$jq_obj" || 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 
 | 
						|
		local parse_mode 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:m:d:e:i:n:r:k' \
 | 
						|
    						 --longoptions 'chat_id:,
 | 
						|
    										audio:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
				-m|--parse_mode)
 | 
						|
					parse_mode=$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"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
									${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
 | 
						|
    	MethodReturn "$jq_obj" || 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 
 | 
						|
		local parse_mode reply_to_message_id reply_markup jq_obj
 | 
						|
    	
 | 
						|
    	# Lê os parâmetros da função
 | 
						|
    	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							 --options 'c:d:t:m:n:r:k:' \
 | 
						|
    						 --longoptions 'chat_id:,
 | 
						|
											document:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
				-m|--parse_mode)
 | 
						|
					parse_mode=$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"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
									${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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$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
 | 
						|
    	MethodReturn "$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)
 | 
						|
					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
 | 
						|
    	MethodReturn "$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
 | 
						|
    	MethodReturn "$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
 | 
						|
		local parse_mode reply_to_message_id reply_markup jq_obj supports_streaming
 | 
						|
    
 | 
						|
    	# Lê os parâmetros da função
 | 
						|
    	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							 --options 'c:v:d:w:h:t:m:n:r:k:s:' \
 | 
						|
							 --longoptions 'chat_id:,
 | 
						|
    										video:,
 | 
						|
    										duration:,
 | 
						|
    										width:,
 | 
						|
    										height:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										disable_notification:,
 | 
						|
    										reply_to_message_id:,
 | 
						|
    										reply_markup:,
 | 
						|
											supports_streaming:' \
 | 
						|
    						 -- "$@")
 | 
						|
    
 | 
						|
    	
 | 
						|
    	# 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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
				-m|--parse_mode)
 | 
						|
					parse_mode=$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
 | 
						|
    				;;
 | 
						|
				-s|--supports_streaming)
 | 
						|
    				CheckArgType bool "$1" "$2"
 | 
						|
					supports_streaming=$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"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
									${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"} \
 | 
						|
									${supports_streaming:+-F supports_streaming="$supports_streaming"})
 | 
						|
    
 | 
						|
    	# Testa o retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
    	
 | 
						|
    }
 | 
						|
    
 | 
						|
    # Função para enviar audio.
 | 
						|
    ShellBot.sendVoice()
 | 
						|
    {
 | 
						|
    	# Variáveis locais
 | 
						|
    	local chat_id voice caption duration disable_notification 
 | 
						|
		local parse_mode reply_to_message_id reply_markup jq_obj
 | 
						|
    
 | 
						|
    	# Lê os parâmetros da função
 | 
						|
    	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							 --options 'c:v:t:m:d:n:r:k:' \
 | 
						|
    						 --longoptions 'chat_id:,
 | 
						|
    										voice:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										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=$(echo -e "$2")
 | 
						|
    				shift 2
 | 
						|
    				;;
 | 
						|
				-m|--parse_mode)
 | 
						|
					parse_mode=$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"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
    								${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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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)
 | 
						|
    				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
 | 
						|
    	MethodReturn "$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	
 | 
						|
    	MethodReturn "$jq_obj" || 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.
 | 
						|
    	MethodReturn "$jq_obj" || 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	
 | 
						|
    	MethodReturn "$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	
 | 
						|
    	MethodReturn "$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	
 | 
						|
    	MethodReturn "$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	
 | 
						|
    	MethodReturn "$jq_obj" || 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	
 | 
						|
    	MethodReturn "$jq_obj" || 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	
 | 
						|
    	MethodReturn "$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	
 | 
						|
    	MethodReturn "$jq_obj" || 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=$(echo -e "$2")
 | 
						|
    					shift 2
 | 
						|
    					;;
 | 
						|
    				-p|--parse_mode)
 | 
						|
    					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	
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    	
 | 
						|
    	return $?
 | 
						|
    	
 | 
						|
    }
 | 
						|
    
 | 
						|
    ShellBot.editMessageCaption()
 | 
						|
    {
 | 
						|
    	local chat_id message_id inline_message_id 
 | 
						|
		local parse_mode caption reply_markup jq_obj
 | 
						|
    	
 | 
						|
    	local param=$(getopt --name "$FUNCNAME" \
 | 
						|
							 --options 'c:m:i:t:p:r:' \
 | 
						|
    						 --longoptions 'chat_id:,
 | 
						|
    										message_id:,
 | 
						|
    										inline_message_id:,
 | 
						|
    										caption:,
 | 
						|
											parse_mode:,
 | 
						|
    										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=$(echo -e "$2")
 | 
						|
    					shift 2
 | 
						|
    					;;
 | 
						|
					-p|--parse_mode)
 | 
						|
						parse_mode=$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"} \
 | 
						|
									${parse_mode:+-d parse_mode="$parse_mode"} \
 | 
						|
    								${reply_markup:+-d reply_markup="$reply_markup"})
 | 
						|
    
 | 
						|
    	# Verifica se ocorreu erros durante a chamada do método	
 | 
						|
    	MethodReturn "$jq_obj" || 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	
 | 
						|
    	MethodReturn "$jq_obj" || 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	
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    	
 | 
						|
    	return $?
 | 
						|
    
 | 
						|
    }
 | 
						|
   
 | 
						|
	ShellBot.downloadFile()
 | 
						|
	{
 | 
						|
		local file_path dir ext file jq_obj
 | 
						|
		local uri="https://api.telegram.org/file/bot$_TOKEN_"
 | 
						|
 | 
						|
		local param=$(getopt --name "$FUNCNAME" \
 | 
						|
								--options 'f:d:' \
 | 
						|
								--longoptions 'file_path:,
 | 
						|
												dir:' \
 | 
						|
								-- "$@")
 | 
						|
		
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-f|--file_path)
 | 
						|
					[[ $2 =~ \.[^.]+$ ]]
 | 
						|
					ext=$BASH_REMATCH
 | 
						|
					file_path=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-d|--dir)
 | 
						|
					[[ -d $2 ]] || MessageError API "$_ERR_DIR_NOT_FOUND_" "$1" "$2"
 | 
						|
					[[ -w $2 ]] || MessageError API "$_ERR_DIR_WRITE_DENIED_" "$1" "$2"
 | 
						|
					dir=${2%/}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $file_path ]] 	|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --file_path]"
 | 
						|
		[[ $dir ]] 			|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --dir]"
 | 
						|
 | 
						|
		# Gera o nome do arquivo anexando o horário de criação.
 | 
						|
		file=file$(date +%d%m%Y%H%M%S%N)${ext:-.dat}
 | 
						|
 | 
						|
		# Executa o download da uri especificada e retorna um objeto json
 | 
						|
		# com as informações do processo. Se tiver sucesso o diretório de
 | 
						|
		# destino é retornado, caso contrário uma mensagem de erro é apresentada.
 | 
						|
		if wget -qO "$dir/$file" "$uri/$file_path"; then
 | 
						|
			# Sucesso
 | 
						|
			printf -v jq_obj '{"ok":true,"result":{"file_path":"%s"}}' "$dir/$file"
 | 
						|
		else
 | 
						|
			# Falha
 | 
						|
			printf -v jq_obj '{"ok":false,"error_code":404,"description":"Bad Request: file not found"}'
 | 
						|
			rm -f "$dir/$file" 2>/dev/null # Remove arquivo inválido.
 | 
						|
		fi
 | 
						|
 | 
						|
		MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
 | 
						|
		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
 | 
						|
    	MethodReturn "$jq_obj" || 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
 | 
						|
    	MethodReturn "$jq_obj" || 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"})
 | 
						|
		
 | 
						|
    	MethodReturn "$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"})
 | 
						|
		
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    	
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.inputMedia()
 | 
						|
	{
 | 
						|
		local __type __input __media __caption __parse_mode __thumb __width 
 | 
						|
		local __height __duration __supports_streaming __performer __title
 | 
						|
 | 
						|
		local __param=$(getopt --name "$FUNCNAME" \
 | 
						|
								--options 't:i:m:c:p:b:w:h:d:s:f:e:' \
 | 
						|
								--longoptions 'type:,
 | 
						|
												input:,
 | 
						|
												media:,
 | 
						|
												caption:,
 | 
						|
												parse_mode:,
 | 
						|
												thumb:,
 | 
						|
												witdh:,
 | 
						|
												height:,
 | 
						|
												duration:,
 | 
						|
												supports_streaming:,
 | 
						|
												performer:,
 | 
						|
												title:' \
 | 
						|
								-- "$@")
 | 
						|
	
 | 
						|
	
 | 
						|
		eval set -- "$__param"
 | 
						|
		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-t|--type)
 | 
						|
					__type=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-i|--input)
 | 
						|
					CheckArgType var "$1" "$2"
 | 
						|
					__input=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-m|--media)
 | 
						|
					CheckArgType file "$1" "$2"
 | 
						|
					__media=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-c|--caption)
 | 
						|
					__caption=$(echo -e "$2")
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-p|--parse_mode)
 | 
						|
					__parse_mode=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-b|--thumb)
 | 
						|
					CheckArgType file "$1" "$2"
 | 
						|
					__thumb=$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
 | 
						|
					;;
 | 
						|
				-s|--supports_streaming)
 | 
						|
					CheckArgType bool "$1" "$2"
 | 
						|
					__supports_streaming=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-f|--performer)
 | 
						|
					__performer=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-e|--title)
 | 
						|
					__title=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $__type ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --type]"
 | 
						|
		[[ $__input ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --input]"
 | 
						|
		[[ $__media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
 | 
						|
 | 
						|
		local -n __input=$__input
 | 
						|
		
 | 
						|
    	__input=${__input:+$__input,}{\"type\":\"$__type\",
 | 
						|
		__input+=\"media\":\"$__media\"
 | 
						|
		__input+=${__caption:+,\"caption\":\"$__caption\"}
 | 
						|
		__input+=${__parse_mode:+,\"parse_mode\":\"$__parse_mode\"}
 | 
						|
		__input+=${__thumb:+,\"thumb\":\"$__thumb\"}
 | 
						|
		__input+=${__width:+,\"width\":$__width}
 | 
						|
		__input+=${__height:+,\"height\":$__height}
 | 
						|
		__input+=${__duration:+,\"duration\":$__duration}
 | 
						|
		__input+=${__supports_streaming:+,\"supports_streaming\":$__supports_streaming}
 | 
						|
		__input+=${__performer:+,\"performer\":\"$__performer\"}
 | 
						|
		__input+=${__title:+,\"title\":\"$__title\"}}
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
	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
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.editMessageMedia()
 | 
						|
	{
 | 
						|
		local chat_id message_id inline_message_id media reply_markup jq_obj
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:i:n:m:k:' \
 | 
						|
								--longoptions	'chat_id:,
 | 
						|
												message_id:,
 | 
						|
												inline_message_id:,
 | 
						|
												media:,
 | 
						|
												reply_markup:'	\
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id)
 | 
						|
					chat_id=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-i|--message_id)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					message_id=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-n|--inline_message_id)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					inline_message_id=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-m|--media)
 | 
						|
					media=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-k|--reply_markup)
 | 
						|
					reply_markup=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $inline_message_id ]] || {
 | 
						|
			[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
 | 
						|
			[[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --message_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"} \
 | 
						|
									${message_id:+-F message_id="$message_id"} \
 | 
						|
									${inline_message_id:+-F inline_message_id="$inline_message_id"} \
 | 
						|
    								${media:+-F media="$media"} \
 | 
						|
    								${reply_markup:+-F reply_markup="$reply_markup"})   
 | 
						|
		 
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.sendAnimation()
 | 
						|
	{
 | 
						|
		local chat_id animation duration width height 
 | 
						|
		local thumb caption parse_mode disable_notification 
 | 
						|
		local reply_to_message_id reply_markup jq_obj
 | 
						|
		
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:a:d:w:h:b:o:p:n:r:k:' \
 | 
						|
								--longoptions 'chat_id:,
 | 
						|
												animation:,
 | 
						|
												duration:,
 | 
						|
												width:,
 | 
						|
												height:,
 | 
						|
												thumb:,
 | 
						|
												caption:,
 | 
						|
												parse_mode:,
 | 
						|
												disable_notification:,
 | 
						|
												reply_to_message_id:,
 | 
						|
												reply_markup:' \
 | 
						|
								-- "$@")
 | 
						|
		
 | 
						|
		eval set -- "$param"
 | 
						|
		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id)
 | 
						|
					chat_id=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-a|--animation)
 | 
						|
					CheckArgType file "$1" "$2"
 | 
						|
					animation=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-d|--duration)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					duartion=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-w|--width)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					width=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-h|--height)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					height=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-b|--thumb)
 | 
						|
					CheckArgType file "$1" "$2"
 | 
						|
					thumb=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-o|--caption)
 | 
						|
					caption=$(echo -e "$2")
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-p|--parse_mode)
 | 
						|
					parse_mode=$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
 | 
						|
 | 
						|
		[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
 | 
						|
		[[ $animation ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --animation]"
 | 
						|
		
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
 | 
						|
									${chat_id:+-F chat_id="$chat_id"} \
 | 
						|
									${animation:+-F animation="$animation"} \
 | 
						|
									${duration:+-F duration="$duration"} \
 | 
						|
									${width:+-F width="$width"} \
 | 
						|
									${height:+-F height="$height"} \
 | 
						|
									${thumb:+-F thumb="$thumb"} \
 | 
						|
									${caption:+-F caption="$caption"} \
 | 
						|
									${parse_mode:+-F parse_mode="$parse_mode"} \
 | 
						|
									${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
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.answerInlineQuery()
 | 
						|
	{
 | 
						|
		local inline_query_id results cache_time is_personal
 | 
						|
		local next_offset switch_pm_text switch_pm_parameter
 | 
						|
		local jq_obj
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'i:r:c:p:o:s:m:' \
 | 
						|
								--longoptions 'inline_query_id:,
 | 
						|
												results:,
 | 
						|
												cache_time:,
 | 
						|
												is_personal:,
 | 
						|
												next_offset:,
 | 
						|
												switch_pm_text:,
 | 
						|
												switch_pm_parameter:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-i|--inline_query_id)		inline_query_id=$2;		shift 2;;
 | 
						|
				-r|--results)				results=[$2];			shift 2;;
 | 
						|
				-c|--cache_time)			cache_time=$2;			shift 2;;
 | 
						|
				-p|--is_personal)			cache_time=$2;			shift 2;;
 | 
						|
				-o|--next_offset)			next_offset=$2;			shift 2;;
 | 
						|
				-s|--switch_pm_text)		switch_pm_text=$2;		shift 2;;
 | 
						|
				-m|--switch_pm_parameter)	switch_pm_parameter=$2;	shift 2;;
 | 
						|
				--)													shift; break;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $inline_query_id ]] 	|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --inline_query_id]"
 | 
						|
		[[ $results ]] 			|| MessageError API "$_ERR_PARAM_REQUIRED_" "[-r, --results]"
 | 
						|
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
 | 
						|
									${inline_query_id:+-F inline_query_id="$inline_query_id"} \
 | 
						|
									${results:+-F results="$results"} \
 | 
						|
									${cache_time:+-F cache_time="$cache_time"} \
 | 
						|
									${is_personal:+-F is_personal="$is_personal"} \
 | 
						|
									${next_offset:+-F next_offset="$next_offset"} \
 | 
						|
									${switch_pm_text:+-F switch_pm_text="$switch_pm_text"} \
 | 
						|
									${switch_pm_parameter:+-F switch_pm_parameter="$switch_pm_parameter"})
 | 
						|
		
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
		
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.InlineQueryResult()
 | 
						|
	{
 | 
						|
		local __input __type __title __caption __reply_markup __parse_mode
 | 
						|
		local __description __input_message_content __address __audio_duration
 | 
						|
	   	local __audio_file_id __audio_url __document_file_id __document_url
 | 
						|
		local __first_name __foursquare_id __foursquare_type __gif_duration
 | 
						|
		local __gif_file_id __gif_height __gif_url __gif_width __hide_url
 | 
						|
		local __last_name __latitude __live_period __longitude __mime_type
 | 
						|
		local __mpeg4_duration __mpeg4_file_id __mpeg4_height __mpeg4_url
 | 
						|
		local __mpeg4_width __performer __photo_file_id __photo_height 
 | 
						|
		local __photo_url __photo_width __sticker_file_id __vcard __phone_number
 | 
						|
		local __thumb_height __thumb_url __thumb_width __url __id
 | 
						|
		local __video_duration __video_file_id __video_height __video_url
 | 
						|
		local __video_width __voice_duration __voice_file_id __voice_url
 | 
						|
 | 
						|
		local __param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'i:t:l:c:k:p:r:d:m:b:s:x:w:v:z:y:q:a:f:u:g:o:n:h:j:e:
 | 
						|
											N:R:D:A:X:G:C:Q:L:Y:E:V:H:Z:T:F:U:M:S:O:I:K:B:P:J:W:' \
 | 
						|
								--longoptions 'input:,
 | 
						|
												type:,
 | 
						|
												title:,
 | 
						|
												caption:,
 | 
						|
												reply_markup:,
 | 
						|
												parse_mode:,
 | 
						|
												id:,
 | 
						|
												description:,
 | 
						|
												input_message_content:,
 | 
						|
												address:,
 | 
						|
												audio_duration:,
 | 
						|
												audio_file_id:,
 | 
						|
												audio_url:,
 | 
						|
												document_file_id:,
 | 
						|
												document_url:,
 | 
						|
												first_name:,
 | 
						|
												foursquare_id:,
 | 
						|
												foursquare_type:,
 | 
						|
												gif_duration:,
 | 
						|
												gif_file_id:,
 | 
						|
												gif_height:,
 | 
						|
												gif_url:,
 | 
						|
												gif_width:,
 | 
						|
												hide_url:,
 | 
						|
												last_name:,
 | 
						|
												latitude:,
 | 
						|
												live_period:,
 | 
						|
												longitude:,
 | 
						|
												mime_type:,
 | 
						|
												mpeg4_duration:,
 | 
						|
												mpeg4_file_id:,
 | 
						|
												mpeg4_height:,
 | 
						|
												mpeg4_url:,
 | 
						|
												mpeg4_width:,
 | 
						|
												performer:,
 | 
						|
												photo_file_id:,
 | 
						|
												photo_height:,
 | 
						|
												photo_url:,
 | 
						|
												photo_width:,
 | 
						|
												sticker_file_id:,
 | 
						|
												thumb_height:,
 | 
						|
												thumb_url:,
 | 
						|
												thumb_width:,
 | 
						|
												url:,
 | 
						|
												vcard:,
 | 
						|
												video_duration:,
 | 
						|
												video_file_id:,
 | 
						|
												video_height:,
 | 
						|
												video_url:,
 | 
						|
												video_width:,
 | 
						|
												voice_duration:,
 | 
						|
												voice_file_id:,
 | 
						|
												voice_url:,
 | 
						|
												phone_number:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$__param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-i|--input) 				CheckArgType var "$1" "$2"
 | 
						|
					   						__input=$2; 				shift 2;;
 | 
						|
				-t|--type)					__type=$2; 					shift 2;;
 | 
						|
				-l|--title)					__title=$2;					shift 2;;
 | 
						|
				-c|--caption)				__caption=$2;				shift 2;;
 | 
						|
				-k|--reply_markup)			__reply_markup=$2;			shift 2;;
 | 
						|
				-p|--parse_mode)			__parse_mode=$2;			shift 2;;
 | 
						|
				-r|--id)					__id=$2;					shift 2;;
 | 
						|
				-d|--description)			__description=$2;			shift 2;;
 | 
						|
				-m|--input_message_content)	__input_message_content=$2;	shift 2;;
 | 
						|
				-b|--address)				__address=$2;				shift 2;;
 | 
						|
				-s|--audio_duration)		__audio_duration=$2;		shift 2;;
 | 
						|
				-x|--audio_file_id)			__audio_file_id=$2;			shift 2;;
 | 
						|
				-w|--audio_url)				__audio_url=$2;				shift 2;;
 | 
						|
				-v|--document_file_id)		__document_file_id=$2;		shift 2;;
 | 
						|
				-z|--document_url)			__document_url=$2;			shift 2;;
 | 
						|
				-y|--first_name)			__first_name=$2;			shift 2;;
 | 
						|
				-q|--foursquare_id)			__foursquare_id=$2;			shift 2;;
 | 
						|
				-a|--foursquare_type)		__foursquare_type=$2;		shift 2;;
 | 
						|
				-f|--gif_duration)			__gif_duration=$2;			shift 2;;
 | 
						|
				-u|--gif_file_id)			__gif_file_id=$2			shift 2;;
 | 
						|
				-g|--gif_height)			__gif_height=$2;			shift 2;;
 | 
						|
				-o|--gif_url)				__gif_url=$2;				shift 2;;
 | 
						|
				-n|--gif_width)				__gif_width=$2;				shift 2;;
 | 
						|
				-h|--hide_url)				__hide_url=$2;				shift 2;;
 | 
						|
				-j|--last_name)				__last_name=$2;				shift 2;;
 | 
						|
				-e|--latitude)				__latitude=$2;				shift 2;;
 | 
						|
				-N|--live_period)			__live_period=$2;			shift 2;;
 | 
						|
				-R|--longitude)				__longitude=$2;				shift 2;;
 | 
						|
				-D|--mime_type)				__mime_type=$2;				shift 2;;
 | 
						|
				-A|--mpeg4_duration)		__mpeg4_duration=$2;		shift 2;;
 | 
						|
				-X|--mpeg4_file_id)			__mpeg4_file_id=$2;			shift 2;;
 | 
						|
				-G|--mpeg4_height)			__mpeg4_height=$2;			shift 2;;
 | 
						|
				-C|--mpeg4_url)				__mpeg4_url=$2;				shift 2;;
 | 
						|
				-Q|--mpeg4_width)			__mpeg4_width=$2;			shift 2;;
 | 
						|
				-L|--performer)				__performer=$2;				shift 2;;
 | 
						|
				-Y|--photo_file_id)			__photo_file_id=$2;			shift 2;;
 | 
						|
				-E|--photo_height)			__photo_height=$2;			shift 2;;
 | 
						|
				-V|--photo_url)				__photo_url=$2;				shift 2;;
 | 
						|
				-H|--photo_width)			__photo_width=$2;			shift 2;;
 | 
						|
				-Z|--sticker_file_id)		__sticker_file_id=$2;		shift 2;;
 | 
						|
				-T|--thumb_height)			__thumb_height=$2;			shift 2;;
 | 
						|
				-F|--thumb_url)				__thumb_url=$2;				shift 2;;
 | 
						|
				-U|--thumb_width)			__thumb_width=$2;			shift 2;;
 | 
						|
				-M|--url)					__url=$2;					shift 2;;
 | 
						|
				-S|--vcard)					__vcard=$2;					shift 2;;
 | 
						|
				-O|--video_duration)		__video_duration=$2;		shift 2;;
 | 
						|
				-I|--video_file_id)			__video_file_id=$2;			shift 2;;
 | 
						|
				-K|--video_height)			__video_height=$2;			shift 2;;
 | 
						|
				-B|--video_url)				__video_url=$2;				shift 2;;
 | 
						|
				-P|--video_width)			__video_width=$2;			shift 2;;
 | 
						|
				-J|--voice_duration)		__voice_duration=$2;		shift 2;;
 | 
						|
				-W|--voice_file_id)			__voice_file_id=$2;			shift 2;;
 | 
						|
				--phone_number)				__phone_number=$2;			shift 2;;
 | 
						|
				--voice_url)				__voice_url=$2;				shift 2;;
 | 
						|
				--)														shift; break;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $__input ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --input]"
 | 
						|
 | 
						|
		local -n __input=$__input
 | 
						|
 | 
						|
    	__input=${__input:+$__input,}{\"type\":\"$__type\"
 | 
						|
		__input+=${__title:+,\"title\":\"$__title\"}
 | 
						|
		__input+=${__caption:+,\"caption\":\"$__caption\"}
 | 
						|
		__input+=${__reply_markup:+,\"reply_markup\":\"$__reply_markup\"}
 | 
						|
		__input+=${__parse_mode:+,\"parse_mode\":\"$__parse_mode\"}
 | 
						|
		__input+=${__id:+,\"id\":\"$__id\"}
 | 
						|
		__input+=${__description:+,\"description\":\"$__description\"}
 | 
						|
		__input+=${__input_message_content:+,\"input_message_content\":$__input_message_content}
 | 
						|
		__input+=${__address:+,\"address\":\"$__address\"}
 | 
						|
		__input+=${__audio_duration:+,\"audio_duration\":$__audio_duration}
 | 
						|
		__input+=${__audio_file_id:+,\"audio_file_id\":\"$__audio_file_id\"}
 | 
						|
		__input+=${__audio_url:+,\"audio_url\":\"$__audio_url\"}
 | 
						|
		__input+=${__document_file_id:+,\"document_file_id\":\"$__document_file_id\"}
 | 
						|
		__input+=${__document_url:+,\"document_url\":\"$__document_url\"}
 | 
						|
		__input+=${__first_name:+,\"first_name\":\"$__first_name\"}
 | 
						|
		__input+=${__foursquare_id:+,\"foursquare_id\":\"$__foursquare_id\"}
 | 
						|
		__input+=${__foursquare_type:+,\"foursquare_type\":\"$__foursquare_type\"}
 | 
						|
		__input+=${__gif_duration:+,\"gif_duration\":$__gif_duration}
 | 
						|
		__input+=${__gif_file_id:+,\"gif_file_id\":\"$__gif_file_id\"}
 | 
						|
		__input+=${__gif_height:+,\"gif_height\":$__gif_height}
 | 
						|
		__input+=${__gif_url:+,\"gif_url\":\"$__gif_url\"}
 | 
						|
		__input+=${__gif_width:+,\"gif_width\":$__gif_width}
 | 
						|
		__input+=${__hide_url:+,\"hide_url\":\"$__hide_url\"}
 | 
						|
		__input+=${__last_name:+,\"last_name\":\"$__last_name\"}
 | 
						|
		__input+=${__latitude:+,\"latitude\":$__latitude}
 | 
						|
		__input+=${__live_period:+,\"live_period\":$__live_period}
 | 
						|
		__input+=${__longitude:+,\"longitude\":$__longitude}
 | 
						|
		__input+=${__mime_type:+,\"mime_type\":\"$__mime_type\"}
 | 
						|
		__input+=${__mpeg4_duration:+,\"mpeg4_duration\":$__mpeg4_duration}
 | 
						|
		__input+=${__mpeg4_file_id:+,\"mpeg4_file_id\":\"$__mpeg4_file_id\"}
 | 
						|
		__input+=${__mpeg4_height:+,\"mpeg4_height\":$__mpeg4_height}
 | 
						|
		__input+=${__mpeg4_url:+,\"mpeg4_url\":\"$__mpeg4_url\"}
 | 
						|
		__input+=${__mpeg4_width:+,\"mpeg4_width\":$__mpeg4_width}
 | 
						|
		__input+=${__performer:+,\"performer\":\"$__performer\"}
 | 
						|
		__input+=${__photo_file_id:+,\"photo_file_id\":\"$__photo_file_id\"}
 | 
						|
		__input+=${__photo_height:+,\"photo_height\":$__photo_height}
 | 
						|
		__input+=${__photo_url:+,\"photo_url\":\"$__photo_url\"}
 | 
						|
		__input+=${__photo_width:+,\"photo_width\":$__photo_width}
 | 
						|
		__input+=${__sticker_file_id:+,\"sticker_file_id\":\"$__sticker_file_id\"}
 | 
						|
		__input+=${__thumb_height:+,\"thumb_height\":$__thumb_height}
 | 
						|
		__input+=${__thumb_url:+,\"thumb_url\":\"$__thumb_url\"}
 | 
						|
		__input+=${__thumb_width:+,\"thumb_width\":$__thumb_width}
 | 
						|
		__input+=${__url:+,\"url\":\"$__url\"}
 | 
						|
		__input+=${__vcard:+,\"vcard\":\"$__vcard\"}
 | 
						|
		__input+=${__video_duration:+,\"video_duration\":$__video_duration}
 | 
						|
		__input+=${__video_file_id:+,\"video_file_id\":\"$__video_file_id\"}
 | 
						|
		__input+=${__video_height:+,\"video_height\":$__video_height}
 | 
						|
		__input+=${__video_url:+,\"video_url\":\"$__video_url\"}
 | 
						|
		__input+=${__video_width:+,\"video_width\":$__video_width}
 | 
						|
		__input+=${__voice_duration:+,\"voice_duration\":$__voice_duration}
 | 
						|
		__input+=${__voice_file_id:+,\"voice_file_id\":\"$__voice_file_id\"}
 | 
						|
		__input+=${__voice_url:+,\"voice_url\":\"$__voice_url\"}
 | 
						|
		__input+=${__phone_number:+,\"phone_number\":\"$__phone_number\"}}
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.InputMessageContent()
 | 
						|
	{
 | 
						|
		local message_text parse_mode disable_web_page_preview json
 | 
						|
		local latitude longitude live_period title address foursquare_id
 | 
						|
		local foursquare_type phone_number first_name last_name vcard
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 't:p:w:l:v:e:a:f:q:n:m:s:d:' \
 | 
						|
								--longoptions 'message_text:,
 | 
						|
												parse_mode:,
 | 
						|
												disable_web_page_preview:,
 | 
						|
												latitude:,
 | 
						|
												longitude:,
 | 
						|
												live_period:,
 | 
						|
												title:,
 | 
						|
												address:,
 | 
						|
												foursquare_id:,
 | 
						|
												foursquare_type:,
 | 
						|
												phone_number:,
 | 
						|
												first_name:,
 | 
						|
												last_name:,
 | 
						|
												vcard:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-t|--message_text) 				message_text=$(echo -e "$2");	shift 2;;
 | 
						|
				-p|--parse_mode)				parse_mode=$2; 					shift 2;;
 | 
						|
				-w|--disable_web_page_preview)	disable_web_page_preview=$2; 	shift 2;;
 | 
						|
				-l|--latitude)					latitude=$2;					shift 2;;
 | 
						|
				-g|--longitude)					longitude=$2;					shift 2;;
 | 
						|
				-v|--live_period)				live_period=$2;					shift 2;;
 | 
						|
				-e|--title)						title=$2;						shift 2;;
 | 
						|
				-a|--address)					address=$2;						shift 2;;
 | 
						|
				-f|--foursquare_id)				foursquare_id=$2;				shift 2;;
 | 
						|
				-q|--foursquare_type)			foursquare_type=$2;				shift 2;;
 | 
						|
				-n|--phone_number)				phone_number=$2;				shift 2;;
 | 
						|
				-m|--first_name)				first_name=$2;					shift 2;;
 | 
						|
				-s|--last_name)					last_name=$2;					shift 2;;
 | 
						|
				-d|--vcard)						vcard=$2;						shift 2;;
 | 
						|
				--) 															shift; break;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
		
 | 
						|
		json=${message_text:+\"message_text\":\"$message_text\"}
 | 
						|
		json+=${parse_mode:+,\"parse_mode\":\"$parse_mode\"}
 | 
						|
		json+=${disable_web_page_preview:+,\"disable_web_page_preview\":$disable_web_page_preview}
 | 
						|
		json+=${latitude:+,\"latitude\":$latitude}
 | 
						|
		json+=${longitude:+,\"longtitude\":$longitude}
 | 
						|
		json+=${live_period:+,\"live_period\":$live_period}
 | 
						|
		json+=${title:+,\"title\":\"$title\"}
 | 
						|
		json+=${address:+,\"address\":\"$address\"}
 | 
						|
		json+=${foursquare_id:+,\"foursquare_id\":\"$foursquare_id\"}
 | 
						|
		json+=${foursquare_type:+,\"foursquare_type\":\"$foursquare_type\"}
 | 
						|
		json+=${phone_number:+,\"phone_number\":\"$phone_number\"}
 | 
						|
		json+=${first_name:+,\"first_name\":\"$first_name\"}
 | 
						|
		json+=${last_name:+,\"last_name\":\"$last_name\"}
 | 
						|
		json+=${vcard:+,\"vcard\":\"$vcard\"}
 | 
						|
		
 | 
						|
		echo "{${json#,}}"
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.ChatPermissions()
 | 
						|
	{
 | 
						|
		local can_send_messages can_send_media_messages can_send_polls
 | 
						|
		local can_send_other_messages can_add_web_page_previews json
 | 
						|
		local can_change_info can_invite_users can_pin_messages
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'm:d:l:o:w:c:i:p:' \
 | 
						|
								--longoptions 'can_send_messages:,
 | 
						|
												can_send_media_messages:,
 | 
						|
												can_send_polls:,
 | 
						|
												can_send_other_messages:,
 | 
						|
												can_add_web_page_previews:,
 | 
						|
												can_change_info:,
 | 
						|
												can_invite_users:,
 | 
						|
												can_pin_messages:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-m|--can_send_messages) 		can_send_messages=$2;;
 | 
						|
				-d|--can_send_media_messages) 	can_send_media_messages=$2;;
 | 
						|
				-l|--can_send_polls)			can_send_polls=$2;;
 | 
						|
				-o|--can_send_other_messages)	can_send_other_messages=$2;;
 | 
						|
				-w|--can_add_web_page_previews) can_add_web_page_previews=$2;;
 | 
						|
				-c|--can_change_info)			can_change_info=$2;;
 | 
						|
				-i|--can_invite_users)			can_invite_users=$2;;
 | 
						|
				-p|--can_pin_messages)			can_pin_messages=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
		
 | 
						|
		json=${can_send_messages:+\"can_send_messages\":$can_send_messages,}
 | 
						|
		json+=${can_send_media_messages:+\"can_send_media_messages\":$can_send_media_messages,}
 | 
						|
		json+=${can_send_polls:+\"can_send_polls\":$can_send_polls,}
 | 
						|
		json+=${can_send_other_messages:+\"can_send_other_messages\":$can_send_other_messages,}
 | 
						|
		json+=${can_add_web_page_previews:+\"can_add_web_page_previews\":$can_add_web_page_previews,}
 | 
						|
		json+=${can_change_info:+\"can_change_info\":$can_change_info,}
 | 
						|
		json+=${can_invite_users:+\"can_invite_users\":$can_invite_users,}
 | 
						|
		json+=${can_pin_messages:+\"can_pin_messages\":$can_pin_messages,}
 | 
						|
	
 | 
						|
		# Retorna o objeto de permissões.
 | 
						|
		echo "{${json%,}}"
 | 
						|
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.setChatPermissions()
 | 
						|
	{
 | 
						|
		local chat_id permissions jq_obj
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:p:' \
 | 
						|
								--longoptions 'chat_id:,permissions:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id) 		chat_id=$2;;
 | 
						|
				-p|--permissions)	permissions=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
 | 
						|
		[[ $permissions ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --permissions]"
 | 
						|
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
 | 
						|
									${chat_id:+-d chat_id="$chat_id"} \
 | 
						|
									${permissions:+-d permissions="$permissions"})
 | 
						|
		
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.setChatAdministratorCustomTitle()
 | 
						|
	{
 | 
						|
		local chat_id user_id custom_title jq_obj
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:u:t:' \
 | 
						|
								--longoptions 'chat_id:,
 | 
						|
												user_id:,
 | 
						|
												custom_title:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id) 		chat_id=$2;;
 | 
						|
				-u|--user_id) 		user_id=$2;;
 | 
						|
				-t|--custom_title) 	custom_title=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
 | 
						|
		[[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
 | 
						|
		[[ $custom_title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --custom_title]"
 | 
						|
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
 | 
						|
									${chat_id:+-d chat_id="$chat_id"} \
 | 
						|
									${user_id:+-d user_id="$user_id"} \
 | 
						|
									${custom_tilte:+-d custom_title="$custom_title"})
 | 
						|
		
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.sendPoll()
 | 
						|
	{
 | 
						|
		local chat_id question options is_anonymous reply_markup
 | 
						|
		local type allows_multiple_answers correct_option_id jq_obj
 | 
						|
		local is_closed disable_notification reply_to_message_id
 | 
						|
		local explanation explanation_parse_mode open_period close_date
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 'c:q:o:a:k:t:m:i:x:z:p:d:l:n:r:' \
 | 
						|
								--longoptions 'chat_id:,
 | 
						|
												question:,
 | 
						|
												options:,
 | 
						|
												is_anonymous:,
 | 
						|
												reply_markup:,
 | 
						|
												type:,
 | 
						|
												allows_multiple_answers:,
 | 
						|
												correct_option_id:,
 | 
						|
												explanation:,
 | 
						|
												explanation_parse_mode:,
 | 
						|
												open_period:,
 | 
						|
												close_date:,
 | 
						|
												is_closed:,
 | 
						|
												disable_notification:,
 | 
						|
												reply_to_message_id:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id) chat_id=$2;;
 | 
						|
				-q|--question) question=$(echo -e "$2");;
 | 
						|
				-o|--options) options=$(echo -e "$2");;
 | 
						|
				-a|--is_anonymous) is_anonymous=$2;;
 | 
						|
				-k|--reply_markup) reply_markup=$2;;
 | 
						|
				-t|--type) type=$2;;
 | 
						|
				-m|--allows_multiple_answers) allows_multiple_answers=$2;;
 | 
						|
				-i|--correct_option_id) correct_option_id=$2;;
 | 
						|
				-x|--explanation) explanation=$2;;
 | 
						|
				-z|--explanation_parse_mode) explanation_parse_mode=$2;;
 | 
						|
				-p|--open_period) open_period=$2;;
 | 
						|
				-d|--close_date) close_date=$2;;
 | 
						|
				-l|--is_closed) is_closed=$2;;
 | 
						|
				-n|--disable_notification) disable_notification=$2;;
 | 
						|
				-r|--reply_to_message_id) reply_to_message_id=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
 | 
						|
		[[ $question ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-q, --question]"
 | 
						|
		[[ $options ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-o, --options]"
 | 
						|
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
 | 
						|
									${chat_id:+-d chat_id="$chat_id"} \
 | 
						|
									${question:+-d question="$question"} \
 | 
						|
									${options:+-d options="$options"} \
 | 
						|
									${is_anonymous:+-d is_anonymous="$is_anonymous"} \
 | 
						|
									${reply_markup:+-d reply_markup="$reply_markup"} \
 | 
						|
									${type:+-d type="$type"} \
 | 
						|
									${allows_multiple_answers:+-d allows_multiple_answers="$allows_multiple_answers"} \
 | 
						|
									${correct_option_id:+-d correct_option_id="$correct_option_id"} \
 | 
						|
									${explanation:+-d explanation="$explanation"} \
 | 
						|
									${explanation_parse_mode:+-d explanation_parse_mode="$explanation_parse_mode"} \
 | 
						|
									${open_period:+-d open_period="$open_period"} \
 | 
						|
									${close_date:+-d close_date="$close_date"} \
 | 
						|
									${is_closed:+-d is_closed="$is_closed"} \
 | 
						|
									${disable_notification:+-d disable_notification="$disable_notification"} \
 | 
						|
									${reply_to_message_id:+-d reply_to_message_id="$reply_to_message_id"})
 | 
						|
		
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.KeyboardButtonPollType()
 | 
						|
	{
 | 
						|
		local type
 | 
						|
 | 
						|
		local param=$(getopt --name "$FUNCNAME" --options 't:' --longoptions 'type:' -- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-t|--type) type=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $type ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --type]"
 | 
						|
 | 
						|
		printf '{"type": "%s"}' "$type"
 | 
						|
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.sendDice()
 | 
						|
	{
 | 
						|
		local chat_id disable_notification reply_to_message_id 
 | 
						|
		local reply_markup jq_obj emoji
 | 
						|
 | 
						|
		local param=$(getopt 	--name "$FUNCNAME" \
 | 
						|
								--options 'c:e:n:r:k:' \
 | 
						|
								--longoptions 'chat_id:,
 | 
						|
												emoji:,
 | 
						|
												disable_notification:,
 | 
						|
												reply_to_message_id:,
 | 
						|
												reply_markup:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--chat_id) chat_id=$2;;
 | 
						|
				-e|--emoji) emoji=$2;;
 | 
						|
				-n|--disable_notification) disable_notification=$2;;
 | 
						|
				-r|--reply_to_message_id) reply_to_message_id=$2;;
 | 
						|
				-k|--reply_markup) reply_markup=$2;;
 | 
						|
				--) shift; break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		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"} \
 | 
						|
									${emoji:+-d emoji="$emoji"} \
 | 
						|
									${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"})
 | 
						|
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.getMyCommands()
 | 
						|
	{
 | 
						|
		local jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.})
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.setMyCommands()
 | 
						|
	{
 | 
						|
		local jq_obj commands
 | 
						|
 | 
						|
		local param=$(getopt 	--name "$FUNCNAME" \
 | 
						|
								--options 'c:' \
 | 
						|
								--longoptions 'commands:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-c|--commands) commands=$2;;
 | 
						|
				--) break;;	
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $commands ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --commands]"
 | 
						|
 | 
						|
		jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${commands:+-d commands="$commands"})
 | 
						|
 | 
						|
		# Retorno do método
 | 
						|
    	MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
 | 
						|
    
 | 
						|
    	# Status
 | 
						|
    	return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.BotCommand()
 | 
						|
	{
 | 
						|
		local __command __description __list
 | 
						|
		
 | 
						|
		local __param=$(getopt 	--name "$FUNCNAME" \
 | 
						|
								--options 'l:c:d:' \
 | 
						|
								--longoptions 'list:,
 | 
						|
												command:,
 | 
						|
												description:' \
 | 
						|
								-- "$@")
 | 
						|
 | 
						|
		eval set -- "$__param"
 | 
						|
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-l|--list) 	CheckArgType var "$1" "$2"; __list=$2;;
 | 
						|
				-c|--command) __command=$2;;
 | 
						|
				-d|--description) __description=$2;;
 | 
						|
				--) break;;
 | 
						|
			esac
 | 
						|
			shift 2
 | 
						|
		done
 | 
						|
 | 
						|
		[[ $__list ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --list]"
 | 
						|
		[[ $__command ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --command]"
 | 
						|
		[[ $__description ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --description]"
 | 
						|
 | 
						|
		printf -v $__list '%s' "${!__list#[}"
 | 
						|
		printf -v $__list '%s' "${!__list%]}"
 | 
						|
		
 | 
						|
		printf -v $__list '%s{"command": "%s", "description": "%s"}' 	\
 | 
						|
							"${!__list:+${!__list},}"					\
 | 
						|
							"$__command"								\
 | 
						|
							"$__description"
 | 
						|
 | 
						|
		printf -v $__list '%s' "[${!__list}]"
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
 | 
						|
	ShellBot.setMessageRules()
 | 
						|
	{
 | 
						|
		local action command user_id username chat_id 
 | 
						|
		local chat_type time date language message_id 
 | 
						|
		local is_bot text entities_type file_type name
 | 
						|
		local query_data query_id query_text send_message
 | 
						|
		local chat_member mime_type num_args exec rule
 | 
						|
		local action_args weekday user_status chat_name 
 | 
						|
		local message_status reply_message parse_mode
 | 
						|
		local forward_message reply_markup continue i
 | 
						|
		local author_signature bot_action auth_file
 | 
						|
 | 
						|
		local param=$(getopt	--name "$FUNCNAME" \
 | 
						|
								--options 's:a:z:c:i:u:h:v:y:l:m:b:t:n:f:p:q:r:g:o:e:d:w:j:x:R:S:F:K:P:E:A:C:B:T:' \
 | 
						|
								--longoptions	'name:,
 | 
						|
												action:,
 | 
						|
												action_args:,
 | 
						|
												command:,
 | 
						|
												user_id:,
 | 
						|
												username:,
 | 
						|
												chat_id:,
 | 
						|
												chat_name:,
 | 
						|
												chat_type:,
 | 
						|
												language_code:,
 | 
						|
												message_id:,
 | 
						|
												is_bot:,
 | 
						|
												text:,
 | 
						|
												entitie_type:,
 | 
						|
												file_type:,
 | 
						|
												mime_type:,
 | 
						|
												query_data:,
 | 
						|
												query_id:,
 | 
						|
												chat_member:,
 | 
						|
												num_args:,
 | 
						|
												time:,
 | 
						|
												date:,
 | 
						|
												weekday:,
 | 
						|
												user_status:,
 | 
						|
												message_status:,
 | 
						|
												exec:,
 | 
						|
												auth_file:,
 | 
						|
												bot_reply_message:,
 | 
						|
												bot_send_message:,
 | 
						|
												bot_forward_message:,
 | 
						|
												bot_reply_markup:,
 | 
						|
												bot_parse_mode:,
 | 
						|
												bot_action:,
 | 
						|
												author_signature:,
 | 
						|
												continue' \
 | 
						|
								-- "$@")
 | 
						|
		
 | 
						|
		eval set -- "$param"
 | 
						|
	
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-s|--name)
 | 
						|
					CheckArgType flag "$1" "$2"
 | 
						|
					name=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-a|--action)
 | 
						|
					CheckArgType func "$1" "$2"
 | 
						|
					action=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-z|--action_args)
 | 
						|
					action_args=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-c|--command)
 | 
						|
					CheckArgType cmd "$1" "$2"
 | 
						|
					command=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-i|--user_id)
 | 
						|
					user_id=${user_id:+$user_id|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-u|--username)
 | 
						|
					username=${username:+$username|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-h|--chat_id)
 | 
						|
					chat_id=${chat_id:+$chat_id|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-v|--chat_name)
 | 
						|
					chat_name=${chat_name:+$chat_name|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-y|--chat_type)
 | 
						|
					chat_type=${chat_type:+$chat_type|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-e|--time)
 | 
						|
					time=${time:+$time|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-d|--date)
 | 
						|
					date=${date:+$date|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-l|--laguage_code)
 | 
						|
					language=${language:+$language|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-m|--message_id)
 | 
						|
					message_id=${message_id:+$message_id|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-b|--is_bot)
 | 
						|
					is_bot=${is_bot:+$is_bot|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-t|--text)
 | 
						|
					text=${2//$'\n'/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-n|--entitie_type)
 | 
						|
					entities_type=${entities_type:+$entities_type|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-f|--file_type)
 | 
						|
					file_type=${file_type:+$file_type|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-p|--mime_type)
 | 
						|
					mime_type=${mime_type:+$mime_type|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-q|--query_data)
 | 
						|
					query_data=${query_data:+$query_data|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-r|--query_id)
 | 
						|
					query_id=${query_id:+$query_id|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-g|--chat_member)
 | 
						|
					chat_member=${chat_member:+$chat_member|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-o|--num_args)
 | 
						|
					num_args=${num_args:+$num_args|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-w|--weekday)
 | 
						|
					weekday=${weekday:+$weekday|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-j|--user_status)
 | 
						|
					user_status=${user_status:+$user_status|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-x|--message_status)
 | 
						|
					message_status=${message_status:+$message_status|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-T|--auth_file)
 | 
						|
					auth_file=${auth_file:+$auth_file|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-R|--bot_reply_message)
 | 
						|
					reply_message=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-S|--bot_send_message)
 | 
						|
					send_message=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-F|--bot_forward_message)
 | 
						|
					forward_message=${forward_message:+$forward_message|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-K|--bot_reply_markup)
 | 
						|
					reply_markup=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-P|--bot_parse_mode)
 | 
						|
					parse_mode=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-B|--bot_action)
 | 
						|
					bot_action=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-E|--exec)
 | 
						|
					exec=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-A|--author_signature)
 | 
						|
					author_signature=${author_signature:+$author_signature|}${2//[,$'\n']/|}
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				-C|--continue)
 | 
						|
					continue=true
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --name]"
 | 
						|
		[[ ${_BOT_RULES_[$name]} ]] && MessageError API "$_ERR_RULE_ALREADY_EXISTS_" "[-s, --name]" "$name"
 | 
						|
 | 
						|
		i=${_BOT_RULES_INDEX_:=0}
 | 
						|
 | 
						|
		_BOT_RULES_[$i:source]=${BASH_SOURCE[1]##*/}
 | 
						|
		_BOT_RULES_[$i:line]=${BASH_LINENO}
 | 
						|
		_BOT_RULES_[$i:name]=${name}
 | 
						|
		_BOT_RULES_[$i:action]=${action}
 | 
						|
		_BOT_RULES_[$i:action_args]=${action_args}
 | 
						|
		_BOT_RULES_[$i:user_id]=${user_id}
 | 
						|
		_BOT_RULES_[$i:username]=${username}
 | 
						|
		_BOT_RULES_[$i:chat_id]=${chat_id}
 | 
						|
		_BOT_RULES_[$i:chat_name]=${chat_name}
 | 
						|
		_BOT_RULES_[$i:chat_type]=${chat_type}
 | 
						|
		_BOT_RULES_[$i:language_code]=${language}
 | 
						|
		_BOT_RULES_[$i:message_id]=${message_id}
 | 
						|
		_BOT_RULES_[$i:is_bot]=${is_bot}
 | 
						|
		_BOT_RULES_[$i:command]=${command}
 | 
						|
		_BOT_RULES_[$i:text]=${text}
 | 
						|
		_BOT_RULES_[$i:entities_type]=${entities_type}
 | 
						|
		_BOT_RULES_[$i:file_type]=${file_type}
 | 
						|
		_BOT_RULES_[$i:mime_type]=${mime_type}
 | 
						|
		_BOT_RULES_[$i:query_data]=${query_data}
 | 
						|
		_BOT_RULES_[$i:query_id]=${query_id}
 | 
						|
		_BOT_RULES_[$i:chat_member]=${chat_member}
 | 
						|
		_BOT_RULES_[$i:num_args]=${num_args}
 | 
						|
		_BOT_RULES_[$i:time]=${time}
 | 
						|
		_BOT_RULES_[$i:date]=${date}
 | 
						|
		_BOT_RULES_[$i:weekday]=${weekday}
 | 
						|
		_BOT_RULES_[$i:user_status]=${user_status}
 | 
						|
		_BOT_RULES_[$i:message_status]=${message_status}
 | 
						|
		_BOT_RULES_[$i:author_signature]=${author_signature}
 | 
						|
		_BOT_RULES_[$i:auth_file]=${auth_file}
 | 
						|
		_BOT_RULES_[$i:bot_reply_message]=${reply_message}
 | 
						|
		_BOT_RULES_[$i:bot_send_message]=${send_message}
 | 
						|
		_BOT_RULES_[$i:bot_forward_message]=${forward_message}
 | 
						|
		_BOT_RULES_[$i:bot_reply_markup]=${reply_markup}
 | 
						|
		_BOT_RULES_[$i:bot_parse_mode]=${parse_mode}
 | 
						|
		_BOT_RULES_[$i:bot_action]=${bot_action}
 | 
						|
		_BOT_RULES_[$i:exec]=${exec}
 | 
						|
		_BOT_RULES_[$i:continue]=${continue}
 | 
						|
		_BOT_RULES_[$name]=true
 | 
						|
 | 
						|
		# Incrementa índice.
 | 
						|
		((_BOT_RULES_INDEX_++))
 | 
						|
 | 
						|
		return $?
 | 
						|
	}
 | 
						|
	
 | 
						|
	ShellBot.manageRules()
 | 
						|
	{
 | 
						|
		local uid rule botcmd err tm stime etime ctime mime_type weekday
 | 
						|
		local dt sdate edate cdate mem ent type args status out fwid
 | 
						|
	   	local stdout i re match file user line
 | 
						|
 | 
						|
		local u_message_text u_message_id u_message_from_is_bot 
 | 
						|
		local u_message_from_id u_message_from_username msgstatus argpos
 | 
						|
		local u_message_from_language_code u_message_chat_id message_status
 | 
						|
		local u_message_chat_type u_message_date u_message_entities_type
 | 
						|
		local u_message_mime_type u_message_author_signature
 | 
						|
 | 
						|
		local 	param=$(getopt	--name "$FUNCNAME" \
 | 
						|
									--options 'u:' \
 | 
						|
									--longoptions 'update_id:' \
 | 
						|
									-- "$@")
 | 
						|
 | 
						|
				
 | 
						|
		eval set -- "$param"
 | 
						|
		
 | 
						|
		while :
 | 
						|
		do
 | 
						|
			case $1 in
 | 
						|
				-u|--update_id)
 | 
						|
					CheckArgType int "$1" "$2"
 | 
						|
					uid=$2
 | 
						|
					shift 2
 | 
						|
					;;
 | 
						|
				--)
 | 
						|
					shift
 | 
						|
					break
 | 
						|
					;;
 | 
						|
			esac			
 | 
						|
		done
 | 
						|
		
 | 
						|
		[[ $uid ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --update_id]"
 | 
						|
 | 
						|
		# Regras (somente-leitura)
 | 
						|
		readonly _BOT_RULES_ _BOT_RULES_INDEX_
 | 
						|
		
 | 
						|
		[[ ${u_message_text:=${message_text[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_text:=${edited_message_text[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_text:=${callback_query_message_text[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_text:=${inline_query_query[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_text:=${chosen_inline_result_query[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_text:=${channel_post_text[$uid]}}			]] ||
 | 
						|
		[[ ${u_message_text:=${edited_channel_post_text[$uid]}}		]]
 | 
						|
 | 
						|
		[[ ${u_message_id:=${message_message_id[$uid]}}					]] ||
 | 
						|
		[[ ${u_message_id:=${edited_message_message_id[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_id:=${callback_query_message_message_id[$uid]}} 	]] ||
 | 
						|
		[[ ${u_message_id:=${inline_query_id[$uid]}} 					]] ||
 | 
						|
		[[ ${u_message_id:=${chosen_inline_result_result_id[$uid]}}		]] ||
 | 
						|
		[[ ${u_message_id:=${channel_post_message_id[$uid]}}			]] ||
 | 
						|
		[[ ${u_message_id:=${edited_channel_post_message_id[$uid]}}		]] ||
 | 
						|
		[[ ${u_message_id:=${poll_answer_poll_id[$uid]}}				]]
 | 
						|
 | 
						|
		[[ ${u_message_from_is_bot:=${message_from_is_bot[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_from_is_bot:=${edited_message_from_is_bot[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_is_bot:=${callback_query_from_is_bot[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_is_bot:=${inline_query_from_is_bot[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_is_bot:=${chosen_inline_result_from_is_bot[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_from_is_bot:=${poll_answer_user_is_bot[$uid]}}			]]
 | 
						|
 | 
						|
		[[ ${u_message_from_id:=${message_from_id[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_from_id:=${edited_message_from_id[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_id:=${callback_query_from_id[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_id:=${inline_query_from_id[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_id:=${chosen_inline_result_from_id[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_from_id:=${poll_answer_user_id[$uid]}}			]]
 | 
						|
 | 
						|
		[[ ${u_message_from_username:=${message_from_username[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_from_username:=${edited_message_from_username[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_username:=${callback_query_from_username[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_from_username:=${inline_query_from_username[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_username:=${chosen_inline_result_from_username[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_from_username:=${poll_answer_user_username[$uid]}}			]]
 | 
						|
 | 
						|
		[[ ${u_message_from_language_code:=${message_from_language_code[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_from_language_code:=${edited_message_from_language_code[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_language_code:=${callback_query_from_language_code[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_language_code:=${inline_query_from_language_code[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_from_language_code:=${chosen_inline_result_from_language_code[$uid]}}	]]
 | 
						|
 | 
						|
		[[ ${u_message_chat_id:=${message_chat_id[$uid]}} 					]] ||
 | 
						|
		[[ ${u_message_chat_id:=${edited_message_chat_id[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_chat_id:=${callback_query_message_chat_id[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_chat_id:=${channel_post_chat_id[$uid]}}				]] ||
 | 
						|
		[[ ${u_message_chat_id:=${edited_channel_post_chat_id[$uid]}}		]]
 | 
						|
 | 
						|
		[[ ${u_message_chat_username:=${message_chat_username[$uid]}}					]] ||
 | 
						|
		[[ ${u_message_chat_username:=${edited_message_chat_username[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_chat_username:=${callback_query_message_chat_username[$uid]}}	]]
 | 
						|
 | 
						|
		[[ ${u_message_chat_type:=${message_chat_type[$uid]}} 					]] ||
 | 
						|
		[[ ${u_message_chat_type:=${edited_message_chat_type[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_chat_type:=${callback_query_message_chat_type[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_chat_type:=${channel_post_chat_type[$uid]}}				]] ||
 | 
						|
		[[ ${u_message_chat_type:=${edited_channel_post_chat_type[$uid]}}		]]
 | 
						|
 | 
						|
		[[ ${u_message_date:=${message_date[$uid]}} 				]] ||
 | 
						|
		[[ ${u_message_date:=${edited_message_edit_date[$uid]}} 	]] ||
 | 
						|
		[[ ${u_message_date:=${callback_query_message_date[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_date:=${channel_post_date[$uid]}}			]] ||
 | 
						|
		[[ ${u_message_date:=${edited_channel_post_date[$uid]}}		]]
 | 
						|
 | 
						|
		[[ ${u_message_entities_type:=${message_entities_type[$uid]}} 					]] ||
 | 
						|
		[[ ${u_message_entities_type:=${edited_message_entities_type[$uid]}} 			]] ||
 | 
						|
		[[ ${u_message_entities_type:=${callback_query_message_entities_type[$uid]}}	]] ||
 | 
						|
		[[ ${u_message_entities_type:=${channel_post_entities_type[$uid]}}				]] ||
 | 
						|
		[[ ${u_message_entities_type:=${edited_channel_post_entities_type[$uid]}}		]]
 | 
						|
 | 
						|
		[[ ${u_message_mime_type:=${message_document_mime_type[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_mime_type:=${message_video_mime_type[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_mime_type:=${message_audio_mime_type[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_mime_type:=${message_voice_mime_type[$uid]}}			]] ||
 | 
						|
		[[ ${u_message_mime_type:=${channel_post_document_mime_type[$uid]}} ]]
 | 
						|
 | 
						|
		[[ ${u_message_author_signature:=${channel_post_author_signature[$uid]}} 		]] ||
 | 
						|
		[[ ${u_message_author_signature:=${edited_channel_post_author_signature[$uid]}} ]]
 | 
						|
 | 
						|
		# Regras
 | 
						|
		for ((i=0; i < _BOT_RULES_INDEX_; i++)); do
 | 
						|
		
 | 
						|
			IFS=' ' read -ra args <<< $u_message_text
 | 
						|
			
 | 
						|
			[[ ! ${_BOT_RULES_[$i:num_args]}			||	${#args[@]}							== @(${_BOT_RULES_[$i:num_args]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:command]}				||	${u_message_text%% *}				== @(${_BOT_RULES_[$i:command]})?(@${_BOT_INFO_[3]}) 	]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:message_id]} 			||	$u_message_id 						== @(${_BOT_RULES_[$i:message_id]})						]] 	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:is_bot]} 				||	$u_message_from_is_bot				== @(${_BOT_RULES_[$i:is_bot]})							]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:user_id]}				||	$u_message_from_id					== @(${_BOT_RULES_[$i:user_id]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:username]}			||	$u_message_from_username			== @(${_BOT_RULES_[$i:username]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:language]}			||	$u_message_from_language_code		== @(${_BOT_RULES_[$i:language]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:chat_id]}				||	$u_message_chat_id					== @(${_BOT_RULES_[$i:chat_id]})						]] 	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:chat_name]}			||	$u_message_chat_username			== @(${_BOT_RULES_[$i:chat_name]})						]] 	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:chat_type]}			||	$u_message_chat_type				== @(${_BOT_RULES_[$i:chat_type]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:author_signature]}	||	$u_message_author_signature			== @(${_BOT_RULES_[$i:author_signature]})				]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:mime_type]}			||	$u_message_mime_type				== @(${_BOT_RULES_[$i:mime_type]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:query_id]}			||	${callback_query_id[$uid]}			== @(${_BOT_RULES_[$i:query_id]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:query_data]}			||	${callback_query_data[$uid]}		== @(${_BOT_RULES_[$i:query_data]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:weekday]}				|| 	$(printf '%(%u)T' $u_message_date) 	== @(${_BOT_RULES_[$i:weekday]})						]]	&&
 | 
						|
			[[ ! ${_BOT_RULES_[$i:text]}				||	$u_message_text						=~ ${_BOT_RULES_[$i:text]}								]]	|| continue
 | 
						|
 | 
						|
			# Extrai os arquivos do conjunto negado. Caso esteja ausente
 | 
						|
			# define a expressão padrão.
 | 
						|
			# Captura os grupos contidos no padrão, separando o
 | 
						|
	   		# operador de negação '!' (se presente) para determinar o 
 | 
						|
			# tratamento de valição do intervalo.
 | 
						|
			#
 | 
						|
			# Exemplo 1:
 | 
						|
			#              
 | 
						|
			#       BASH_REMATCH[2]
 | 
						|
			#    __________|__________
 | 
						|
			#   |                     |
 | 
						|
			# !(12:00-13:00,15:00-17:00)
 | 
						|
			# |
 | 
						|
			# |_ BASH_REMATCH[1]
 | 
						|
			#
 | 
						|
			re='^(!)\(([^)]+)\)$'
 | 
						|
 | 
						|
			[[ ${_BOT_RULES_[$i:auth_file]} =~ $re ]]
 | 
						|
			match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:auth_file]}}
 | 
						|
			
 | 
						|
			for file in ${match//|/ }; do
 | 
						|
				# Testa acesso ao arquivo.
 | 
						|
				if ! [[ -f "$file" && -r "$file" ]]; then
 | 
						|
					MessageError API "'$file' $_ERR_FILE_NOT_FOUND_" "${_BOT_RULES_[$i:name]}" '[-T, --auth_file]'
 | 
						|
				fi
 | 
						|
 | 
						|
				# Lê os usuários removendo os comentários complementares
 | 
						|
				# e ignora a linha prefixada com hashtag '#'.	
 | 
						|
				while read -r line; do
 | 
						|
					user=${line%%*( )#*}
 | 
						|
					[[ $user != *( )#* ]] 													&&
 | 
						|
					[[ $user == $u_message_from_id || $user == $u_message_from_username	]] 	&& break 2
 | 
						|
				done < "$file"
 | 
						|
			done
 | 
						|
 | 
						|
			((${BASH_REMATCH[1]} $?)) && continue
 | 
						|
	
 | 
						|
			for msgstatus in ${_BOT_RULES_[$i:message_status]//|/ }; do
 | 
						|
				[[ $msgstatus == pinned		&& ${message_pinned_message_message_id[$uid]:-${channel_post_pinned_message_message_id[$uid]}} 		]] 	||
 | 
						|
				[[ $msgstatus == edited 	&& ${edited_message_message_id[$uid]:-${edited_channel_post_message_id[$uid]}}						]] 	||
 | 
						|
				[[ $msgstatus == forwarded	&& ${message_forward_from_id[$uid]:-${channel_post_forward_from_chat_id[$uid]}}						]]	||
 | 
						|
				[[ $msgstatus == reply		&& ${message_reply_to_message_message_id[$uid]:-${channel_post_reply_to_message_message_id[$uid]}}	]] 	||
 | 
						|
				[[ $msgstatus == callback	&& ${callback_query_message_message_id[$uid]}														]]	||
 | 
						|
				[[ $msgstatus == inline		&& ${inline_query_id[$uid]}																			]]	||
 | 
						|
				[[ $msgstatus == chosen		&& ${chosen_inline_result_result_id[$uid]}															]]	||
 | 
						|
				[[ $msgstatus == poll		&& ${poll_answer_poll_id[$uid]}																		]]	&& break
 | 
						|
			done
 | 
						|
				
 | 
						|
			(($?)) && continue
 | 
						|
 | 
						|
			for ent in ${_BOT_RULES_[$i:entities_type]//|/ }; do
 | 
						|
				[[ $ent == @(${u_message_entities_type//$_BOT_DELM_/|})	]] 	&& break
 | 
						|
			done
 | 
						|
 | 
						|
			(($?)) && continue
 | 
						|
	
 | 
						|
			for mem in ${_BOT_RULES_[$i:chat_member]//|/ }; do
 | 
						|
				[[ $mem == new 	&& ${message_new_chat_member_id[$uid]} 	]] ||
 | 
						|
				[[ $mem == left	&& ${message_left_chat_member_id[$uid]} ]] && break
 | 
						|
			done
 | 
						|
			
 | 
						|
			(($?)) && continue
 | 
						|
 | 
						|
			for type in ${_BOT_RULES_[$i:file_type]//|/ }; do
 | 
						|
				[[ $type == document 	&& ${message_document_file_id[$uid]:-${channel_post_document_file_id[$uid]}} &&
 | 
						|
										 ! ${message_document_thumb_file_id[$uid]:-${channel_post_document_thumb_file_id[$uid]}}	]] 	||
 | 
						|
				[[ $type == gif 		&& ${message_document_file_id[$uid]:-${channel_post_document_file_id[$uid]}} &&
 | 
						|
										   ${message_document_thumb_file_id[$uid]:-${channel_post_document_thumb_file_id[$uid]}}	]] 	||
 | 
						|
				[[ $type == photo		&& ${message_photo_file_id[$uid]:-${channel_post_photo_file_id[$uid]}}						]] 	||
 | 
						|
				[[ $type == sticker 	&& ${message_sticker_file_id[$uid]:-${channel_post_sticker_file_id[$uid]}}					]]	||
 | 
						|
				[[ $type == video		&& ${message_video_file_id[$uid]:-${channel_post_video_file_id[$uid]}}						]]	||
 | 
						|
				[[ $type == audio		&& ${message_audio_file_id[$uid]:-${channel_post_audio_file_id[$uid]}}						]]	||
 | 
						|
				[[ $type == voice		&& ${message_voice_file_id[$uid]:-${channel_post_voice_file_id[$uid]}}						]]	||
 | 
						|
				[[ $type == contact		&& ${message_contact_user_id[$uid]:-${channel_post_contact_user_id[$uid]}}					]]	||
 | 
						|
				[[ $type == location	&& ${message_location_latitude[$uid]:-${channel_post_location_latitude[$uid]}}				]]	&& break
 | 
						|
			done
 | 
						|
 | 
						|
			(($?)) && continue
 | 
						|
			
 | 
						|
			[[ ${_BOT_RULES_[$i:time]} =~ $re ]]
 | 
						|
			match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:time]}}
 | 
						|
 | 
						|
			for tm in ${match//|/ }; do
 | 
						|
				IFS='-' read stime etime <<< $tm
 | 
						|
				printf -v ctime '%(%H:%M)T' $u_message_date
 | 
						|
 | 
						|
				[[ $ctime == @($stime|$etime) 			]]	||
 | 
						|
				[[ $ctime > $stime && $ctime < $etime 	]]	&& break
 | 
						|
			done
 | 
						|
					
 | 
						|
			((${BASH_REMATCH[1]} $?)) && continue
 | 
						|
 | 
						|
			[[ ${_BOT_RULES_[$i:date]} =~ $re ]]
 | 
						|
			match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:date]}}
 | 
						|
 | 
						|
			for dt in ${match//|/ }; do
 | 
						|
 | 
						|
				IFS='-' read sdate edate <<< $dt
 | 
						|
				IFS='/' read -a sdate <<< $sdate
 | 
						|
				IFS='/' read -a edate <<< $edate
 | 
						|
					
 | 
						|
				sdate=${sdate[2]}/${sdate[1]}/${sdate[0]}
 | 
						|
				edate=${edate[2]}/${edate[1]}/${edate[0]}
 | 
						|
 | 
						|
				printf -v cdate '%(%Y/%m/%d)T' $u_message_date
 | 
						|
					
 | 
						|
				[[ $cdate == @($sdate|$edate) 			]] 	||
 | 
						|
				[[ $cdate > $sdate && $cdate < $edate 	]]	&& break
 | 
						|
			done
 | 
						|
			
 | 
						|
			((${BASH_REMATCH[1]} $?)) && continue
 | 
						|
 | 
						|
			if [[ ${_BOT_RULES_[$i:user_status]} ]]; then
 | 
						|
				case $_BOT_TYPE_RETURN_ in
 | 
						|
					value)
 | 
						|
						out=$(ShellBot.getChatMember 	--chat_id $u_message_chat_id \
 | 
						|
														--user_id $u_message_from_id 2>/dev/null)
 | 
						|
							
 | 
						|
						IFS=$_BOT_DELM_ read -a out <<< $out
 | 
						|
						[[ ${out[2]} == true ]]
 | 
						|
						status=${out[$(($? ? 6 : 5))]}
 | 
						|
						;;
 | 
						|
					json)
 | 
						|
						out=$(ShellBot.getChatMember 	--chat_id $u_message_chat_id \
 | 
						|
														--user_id $u_message_from_id 2>/dev/null)
 | 
						|
							
 | 
						|
						status=$(Json '.result.status' $out)
 | 
						|
						;;
 | 
						|
					map)	
 | 
						|
						ShellBot.getChatMember 	--chat_id $u_message_chat_id \
 | 
						|
												--user_id $u_message_from_id &>/dev/null
 | 
						|
 | 
						|
						status=${return[status]}
 | 
						|
						;;
 | 
						|
				esac
 | 
						|
				[[ $status == @(${_BOT_RULES_[$i:user_status]}) ]] || continue
 | 
						|
			fi
 | 
						|
			
 | 
						|
			# Monitor
 | 
						|
			[[ $_BOT_MONITOR_ ]]	&& 	printf '[%s]: %s: %s: %s: %s: %s: %s: %s: %s: %s: %s\n'	\
 | 
						|
										"${FUNCNAME}"											\
 | 
						|
										"$((uid+1))"											\
 | 
						|
										"$(printf '%(%d/%m/%Y %H:%M:%S)T' ${u_message_date})"	\
 | 
						|
										"${u_message_chat_type}"								\
 | 
						|
										"${u_message_chat_username:--}"							\
 | 
						|
										"${u_message_from_username:--}"							\
 | 
						|
										"${_BOT_RULES_[$i:source]}"								\
 | 
						|
										"${_BOT_RULES_[$i:line]}"								\
 | 
						|
										"${_BOT_RULES_[$i:name]}" 								\
 | 
						|
										"${_BOT_RULES_[$i:action]:--}"							\
 | 
						|
										"${_BOT_RULES_[$i:exec]:--}"
 | 
						|
			
 | 
						|
			# Log	
 | 
						|
			[[ $_BOT_LOG_FILE_ ]] 	&&	printf '%s: %s: %s: %s: %s: %s: %s\n'	\
 | 
						|
									 	"$(printf '%(%d/%m/%Y %H:%M:%S)T')"		\
 | 
						|
								 	 	"${FUNCNAME}"							\
 | 
						|
									 	"${_BOT_RULES_[$i:source]}"				\
 | 
						|
									 	"${_BOT_RULES_[$i:line]}"				\
 | 
						|
									 	"${_BOT_RULES_[$i:name]}"				\
 | 
						|
										"${_BOT_RULES_[$i:action]:--}"			\
 | 
						|
										"${_BOT_RULES_[$i:exec]:--}"			>> "$_BOT_LOG_FILE_"
 | 
						|
 | 
						|
			# Anexa tipo da ação. (se presente)
 | 
						|
			if [[ ${_BOT_RULES_[$i:bot_action]} ]]; then
 | 
						|
				ShellBot.sendChatAction --chat_id $u_message_chat_id --action ${_BOT_RULES_[$i:bot_action]} &>/dev/null
 | 
						|
			fi
 | 
						|
 | 
						|
			if [[ ${_BOT_RULES_[$i:bot_reply_message]} ]]; then
 | 
						|
				ShellBot.sendMessage	--chat_id $u_message_chat_id 																\
 | 
						|
										--reply_to_message_id $u_message_id															\
 | 
						|
										--text "$(FlagConv $uid "${_BOT_RULES_[$i:bot_reply_message]}")" 							\
 | 
						|
										${_BOT_RULES_[$i:bot_reply_markup]:+--reply_markup "${_BOT_RULES_[$i:bot_reply_markup]}"} 	\
 | 
						|
										${_BOT_RULES_[$i:bot_parse_mode]:+--parse_mode ${_BOT_RULES_[$i:bot_parse_mode]}} 			&>/dev/null
 | 
						|
			fi
 | 
						|
				
 | 
						|
			if [[ ${_BOT_RULES_[$i:bot_send_message]} ]]; then
 | 
						|
				ShellBot.sendMessage	--chat_id $u_message_chat_id 																\
 | 
						|
										--text "$(FlagConv $uid "${_BOT_RULES_[$i:bot_send_message]}")"								\
 | 
						|
										${_BOT_RULES_[$i:bot_reply_markup]:+--reply_markup "${_BOT_RULES_[$i:bot_reply_markup]}"} 	\
 | 
						|
										${_BOT_RULES_[$i:bot_parse_mode]:+--parse_mode ${_BOT_RULES_[$i:bot_parse_mode]}} 			&>/dev/null
 | 
						|
			fi
 | 
						|
 | 
						|
			for fwid in ${_BOT_RULES_[$i:bot_forward_message]//|/ }; do
 | 
						|
				ShellBot.forwardMessage		--chat_id $fwid						\
 | 
						|
											--from_chat_id $u_message_chat_id 	\
 | 
						|
											--message_id $u_message_id			&>/dev/null
 | 
						|
			done
 | 
						|
 | 
						|
			# Chama a função passando os argumentos posicionais. (se existir)
 | 
						|
			${_BOT_RULES_[$i:action]:+${_BOT_RULES_[$i:action]} ${_BOT_RULES_[$i:action_args]:-${args[*]}}}
 | 
						|
		
 | 
						|
			# Executa a linha de comando e salva o retorno.
 | 
						|
			stdout=${_BOT_RULES_[$i:exec]:+$(set -- ${args[*]}; eval $(FlagConv $uid "${_BOT_RULES_[$i:exec]}") 2>&1)}
 | 
						|
 | 
						|
			while [[ $stdout ]]; do
 | 
						|
				ShellBot.sendMessage	--chat_id $u_message_chat_id 			\
 | 
						|
										--reply_to_message_id $u_message_id		\
 | 
						|
										--text "${stdout:0:4096}"				&>/dev/null
 | 
						|
 | 
						|
				# Atualiza o buffer de saída.
 | 
						|
				stdout=${stdout:4096}
 | 
						|
			
 | 
						|
				# Reenvia ação se ainda houver dados.	
 | 
						|
				if [[ ${_BOT_RULES_[$i:bot_action]} && $stdout ]]; then
 | 
						|
					ShellBot.sendChatAction --chat_id $u_message_chat_id --action ${_BOT_RULES_[$i:bot_action]} &>/dev/null
 | 
						|
				fi
 | 
						|
			done 
 | 
						|
			[[ ${_BOT_RULES_[$i:continue]} ]] || return 0
 | 
						|
		done
 | 
						|
 | 
						|
		return 1
 | 
						|
	}
 | 
						|
 | 
						|
    ShellBot.getUpdates()
 | 
						|
    {
 | 
						|
    	local total_keys offset limit timeout allowed_updates jq_obj
 | 
						|
	local vet val var obj oldv bar vars vals i
 | 
						|
 | 
						|
	# 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_; _VAR_INIT_=
 | 
						|
		
 | 
						|
		# Se há atualizações.
 | 
						|
    	[[ $(jq -r '.result|length' <<< $jq_obj) -eq 0 ]] && return 0
 | 
						|
	
 | 
						|
		# Se o método 'ShellBot.getUpdates' for invocado a partir de um subshell,
 | 
						|
		# as atualizações são retornadas em um estrutura de dados json, o método
 | 
						|
		# é finalizado e variáveis não são inicializadas.
 | 
						|
		[[ $BASH_SUBSHELL -gt 0 ]] && { echo "$jq_obj"; return 0; }
 | 
						|
 | 
						|
		if [[ $_BOT_MONITOR_ ]]; then
 | 
						|
			printf -v bar '=%.s' {1..50}
 | 
						|
			printf "$bar\nData: %(%d/%m/%Y %T)T\n"
 | 
						|
			printf 'Script: %s\nBot (nome): %s\nBot (usuario): %s\nBot (id): %s\n' 	\
 | 
						|
					"${_BOT_SCRIPT_}" 												\
 | 
						|
					"${_BOT_INFO_[2]}" 												\
 | 
						|
					"${_BOT_INFO_[3]}" 												\
 | 
						|
					"${_BOT_INFO_[1]}"
 | 
						|
		fi
 | 
						|
		
 | 
						|
		mapfile -t vars <<< $(GetAllKeys "$jq_obj")
 | 
						|
		mapfile -t vals <<< $(GetAllValues "$jq_obj")
 | 
						|
 | 
						|
		for i in ${!vars[@]}; do
 | 
						|
	
 | 
						|
			[[ ${vars[$i]} =~ [0-9]+ ]]
 | 
						|
			vet=${BASH_REMATCH:-0}
 | 
						|
			
 | 
						|
			var=${vars[$i]//[0-9\[\]]/}
 | 
						|
			var=${var#result.}
 | 
						|
			var=${var//./_}
 | 
						|
	
 | 
						|
			declare -g $var
 | 
						|
			local -n byref=$var # ponteiro
 | 
						|
						
 | 
						|
			val=${vals[$i]}
 | 
						|
			val=${val#\"}
 | 
						|
			val=${val%\"}
 | 
						|
 | 
						|
			byref[$vet]+=${byref[$vet]:+$_BOT_DELM_}${val}
 | 
						|
 | 
						|
			if [[ $_BOT_MONITOR_ ]]; then
 | 
						|
				[[ $vet -ne ${oldv:--1} ]] && printf "$bar\nMensagem: %d\n$bar\n" $((vet+1))
 | 
						|
				printf "[%s]: %s = '%s'\n" "$FUNCNAME" "$var" "$val"
 | 
						|
				oldv=$vet
 | 
						|
			fi
 | 
						|
	
 | 
						|
			unset -n byref
 | 
						|
			[[ $var != @(${_VAR_INIT_// /|}) ]] && _VAR_INIT_=${_VAR_INIT_:+$_VAR_INIT_ }${var}
 | 
						|
		done
 | 
						|
	
 | 
						|
		# Log (thread)	
 | 
						|
		[[ $_BOT_LOG_FILE_ ]] && CreateLog "${#update_id[@]}" "$jq_obj"
 | 
						|
 | 
						|
   		 # Status
 | 
						|
   	 	return $?
 | 
						|
	}
 | 
						|
   
 | 
						|
	# Bot métodos (somente leitura)
 | 
						|
	readonly -f ShellBot.token 								\
 | 
						|
				ShellBot.id 								\
 | 
						|
				ShellBot.username 							\
 | 
						|
				ShellBot.first_name 						\
 | 
						|
				ShellBot.getConfig							\
 | 
						|
				ShellBot.regHandleFunction 					\
 | 
						|
				ShellBot.regHandleExec						\
 | 
						|
				ShellBot.watchHandle 						\
 | 
						|
				ShellBot.ListUpdates 						\
 | 
						|
				ShellBot.TotalUpdates 						\
 | 
						|
				ShellBot.OffsetEnd 							\
 | 
						|
				ShellBot.OffsetNext 						\
 | 
						|
				ShellBot.getMe 								\
 | 
						|
				ShellBot.getWebhookInfo 					\
 | 
						|
				ShellBot.deleteWebhook 						\
 | 
						|
				ShellBot.setWebhook 						\
 | 
						|
				ShellBot.init 								\
 | 
						|
				ShellBot.ReplyKeyboardMarkup 				\
 | 
						|
				ShellBot.ForceReply							\
 | 
						|
				ShellBot.ReplyKeyboardRemove				\
 | 
						|
				ShellBot.KeyboardButton						\
 | 
						|
				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.editMessageMedia 					\
 | 
						|
				ShellBot.inputMedia 						\
 | 
						|
				ShellBot.sendAnimation 						\
 | 
						|
				ShellBot.answerInlineQuery					\
 | 
						|
				ShellBot.InlineQueryResult					\
 | 
						|
				ShellBot.InputMessageContent				\
 | 
						|
				ShellBot.ChatPermissions 					\
 | 
						|
				ShellBot.setChatPermissions 				\
 | 
						|
				ShellBot.setChatAdministratorCustomTitle 	\
 | 
						|
				ShellBot.sendPoll							\
 | 
						|
				ShellBot.KeyboardButtonPollType				\
 | 
						|
				ShellBot.sendDice							\
 | 
						|
				ShellBot.getMyCommands						\
 | 
						|
				ShellBot.setMyCommands						\
 | 
						|
				ShellBot.BotCommand							\
 | 
						|
				ShellBot.setMessageRules 					\
 | 
						|
				ShellBot.manageRules 						\
 | 
						|
				ShellBot.getUpdates
 | 
						|
 | 
						|
	offset=${_BOT_FLUSH_:+$(FlushOffset)}	# flush
 | 
						|
	printf -v jq_obj '{"token":"%s","id":%d,"first_name":"%s","username":"%s","offset_start":%d,"offset_end":%d}'	\
 | 
						|
						"${_BOT_INFO_[0]}" 	\
 | 
						|
						"${_BOT_INFO_[1]}" 	\
 | 
						|
						"${_BOT_INFO_[2]}" 	\
 | 
						|
						"${_BOT_INFO_[3]}" 	\
 | 
						|
						"${offset%|*}"		\
 | 
						|
						"${offset#*|}"
 | 
						|
 | 
						|
	# Retorna informações do bot.
 | 
						|
	MethodReturn "$jq_obj"
 | 
						|
 | 
						|
   	return $?
 | 
						|
}
 | 
						|
 | 
						|
# Funções (somente leitura)
 | 
						|
readonly -f MessageError 		\
 | 
						|
			Json 				\
 | 
						|
			FlushOffset 		\
 | 
						|
			CreateUnitService 	\
 | 
						|
			GetAllKeys 			\
 | 
						|
			GetAllValues 		\
 | 
						|
			SetDelmValues		\
 | 
						|
			MethodReturn 		\
 | 
						|
			CheckArgType 		\
 | 
						|
			CreateLog			\
 | 
						|
			FlagConv
 | 
						|
 | 
						|
# /* SHELLBOT */
 |