Skip to content

Commit

Permalink
Atualização do script 'BotDownloadFile1' para download de objetos em …
Browse files Browse the repository at this point in the history
…mensagens.
  • Loading branch information
Juliano Santos committed Apr 5, 2020
1 parent e59c6b2 commit aa2daf5
Showing 1 changed file with 50 additions and 38 deletions.
88 changes: 50 additions & 38 deletions exemplos/BotDownloadFile1.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
#
# SCRIPT: BotDownloadFile.sh
# SCRIPT: BotDownloadFile1.sh
#
# DESCRIÇÃO: Efetua download dos arquivos enviados para o privado, grupo ou canal.
# Em grupos/canais o bot precisa ser administrador para ter acesso a
Expand All @@ -16,8 +16,52 @@ source ShellBot.sh
bot_token='<TOKEN_AQUI>'

# Inicializando o bot
ShellBot.init --token "$bot_token" --monitor
ShellBot.username
ShellBot.init --token "$bot_token" --monitor --return map

function download_file()
{
local file_id

if [[ ${message_photo_file_id[$id]} ]]; then
# Em alguns arquivos de imagem o telegram aplica uma escala de tamanho
# gerando id's para diferentes resoluções da mesma iagem. São elas (baixa, média, alta).
# Os id's são armazenados e separados pelo delimitador '|' (padrão).
#
# Exemplo:
# baixa_id|media_id|alta_id

# Extrai o id da imagem com melhor resolução.
file_id=${message_photo_file_id[$id]##*|}
else
# Outros objetos.
# Extrai o id do objeto da mensagem.
# document, audio, sticker, voice
file_id=$(cat << _eof
${message_document_file_id[$id]}
${message_audio_file_id[$id]}
${message_sticker_file_id[$id]}
${message_voice_file_id[$id]}
_eof
)
fi

# Verifica se 'file_id' contém um id válido.
if [[ $file_id ]]; then
# Obtém informações do arquivo, incluindo sua localização nos servidores do Telegram.
ShellBot.getFile --file_id $file_id

# Baixa o arquivo do diretório remoto contido em '{return[file_path]}' após
# a chamada do método 'ShellBot.getFile'.
# Obs: Recurso disponível somente no modo de retorno 'map'.
if ShellBot.downloadFile --file_path "${return[file_path]}" --dir "$HOME"; then
ShellBot.sendMessage --chat_id "${message_chat_id[$id]}" \
--reply_to_message_id "${message_message_id[$id]}" \
--text "Arquivo baixado com sucesso!!\n\nSalvo em: ${return[file_path]}"
fi
fi

return 0
}

while :
do
Expand All @@ -29,42 +73,10 @@ do
do
# Inicio thread
(
# Desativa download
download_file=0
# Executa a função 'download_file' se a requisição não for um objeto de texto.
[[ ${message_text[$id]} ]] || download_file

# Lê a atualização armazenada em 'id'
if [ "${update_id[$id]}" ]; then

# Monitora o envio de arquivos do tipo:
#
# * Documento
# * Foto
# * Sticker
# * Musica
#
# Se a variável do tipo for inicializada, salva o ID do arquivo enviado em 'file_id' e ativa o download.
[[ ${message_document_file_id[$id]} ]] && file_id=${message_document_file_id[$id]} && download_file=1
[[ ${message_photo_file_id[$id]} ]] && file_id=${message_photo_file_id[$id]} && download_file=1
[[ ${message_sticker_file_id[$id]} ]] && file_id=${message_sticker_file_id[$id]} && download_file=1
[[ ${message_audio_file_id[$id]} ]] && file_id=${message_audio_file_id[$id]} && download_file=1

# Verifica se o download está ativado.
[[ $download_file -eq 1 ]] && {
# Inicializa um array se houver mais de um ID salvo em 'file_id'.
# (É recomendado para fotos e vídeos, pois haverá o mesmo arquivo com diversas resoluções e ID's)
file_id=($file_id)
# Realiza o download do arquivo no indíce 0 (zero) do array e salva no HOME do usuário.
ShellBot.downloadFile --file_id "${file_id[0]}" --dir "$HOME"
}

case ${message_text[$id]} in
'/teste') # comando teste
ShellBot.sendMessage --chat_id "${message_chat_id[$id]}" --text "Mensagem de teste."
;;
esac
fi
) & # Utilize a thread se deseja que o bot responda a várias requisições simultâneas.
) & # Utilize a thread se deseja que o bot responda a várias requisições simultâneas.
done

done
#FIM

0 comments on commit aa2daf5

Please sign in to comment.