From aa2daf54ae2904e6aa7536bb6126ee7e93d9e430 Mon Sep 17 00:00:00 2001 From: Juliano Santos Date: Sun, 5 Apr 2020 11:20:44 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20do=20script=20'BotDownl?= =?UTF-8?q?oadFile1'=20para=20download=20de=20objetos=20em=20mensagens.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exemplos/BotDownloadFile1.sh | 88 ++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/exemplos/BotDownloadFile1.sh b/exemplos/BotDownloadFile1.sh index 414aecb..ab6db3a 100755 --- a/exemplos/BotDownloadFile1.sh +++ b/exemplos/BotDownloadFile1.sh @@ -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 @@ -16,8 +16,52 @@ source ShellBot.sh bot_token='' # 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 @@ -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