Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Este script conecta ao servidor do Telegram, busca as mensagens recebidas e direciona comandos para um bot.
- SCRIPT=<Local do arquivo script>
- # importa o ShellBot
- source $SCRIPT/ShellBot.sh #integração com o Telegram
- # Inicializando o bot
- ShellBot.init -t <token do bot> -m --return map
- # funções da chamada dos Teclados
- hostgroups() {
- # define variáveis locais
- local botoes host
- # executa script python e salva no arquivo de texto
- python -c "execfile('itservice.py'); get_hostgroups()" > $SCRIPT/groups.tmp
- # lê cada linha do arquivo e cria um botão
- while read group
- do
- # insere na variável o host da linha
- botoes+="[\"$group\"],"
- # envia para o comando while o arquivo de hosts como lista
- done < <(cat $SCRIPT/groups.tmp)
- # finaliza a variável com os botões
- botoes+="[\"Voltar\"]"
- echo " - $botoes"
- # cria o teclado no shellbot
- teclado_groups="$(ShellBot.ReplyKeyboardMarkup --button 'botoes' --resize_keyboard true)"
- echo " -- $teclado_groups"
- # envia a mensagem para o Bot
- ShellBot.sendMessage \
- --chat_id $destino \
- --text "Selecione um *grupo*:" \
- --reply_markup "$teclado_groups" \
- --parse_mode markdown
- }
- hosts() {
- # define variáveis locais
- local botoes servidor
- echo "Selecionou: $group"
- #executa script python e salva no arquivo de texto
- python -c "execfile('itservice.py'); get_hosts('$group')" > $SCRIPT/$destino-hosts.tmp
- # lê cada linha do arquivo e cria um botão
- while read servidor
- do
- # insere na variável o host da linha
- botoes+="[\"$servidor\"],"
- # envia para o comando while o arquivo de hosts como lista
- done < <(cat $SCRIPT/$destino-hosts.tmp)
- # finaliza a variável com os botões
- botoes+="[\"Voltar\"]"
- # cria o teclado no shellbot
- teclado_hosts="$(ShellBot.ReplyKeyboardMarkup --button 'botoes' --resize_keyboard true)"
- # envia a mensagem para o Bot
- ShellBot.sendMessage \
- --chat_id $destino \
- --text "Selecione um *servidor* deste grupo:" \
- --reply_markup "$teclado_hosts" \
- --parse_mode markdown
- }
- # exibir informações do servidor
- items() {
- # executa script python e salva no arquivo de texto
- python -c "execfile('itservice.py'); get_items_hosts('$server')" > $SCRIPT/$destino-serverinfos.tmp
- # monta a mesnagem
- msg="*Informações de $server*
- \`$(cat $SCRIPT/$destino-serverinfos.tmp)\`"
- # envia a mensagem para o Bot
- ShellBot.sendMessage \
- --chat_id $destino \
- --text "$msg" \
- --parse_mode markdown
- }
- ## Obtendo novas mensagens
- while :
- do
- ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext) --timeout 30
- ## Lista os índices das atualizações.
- for id in $(ShellBot.ListUpdates)
- do
- (
- # registra no bot.log (r/e|DATA+HORA|IDUSUARIO|NOME-USUARIO|MENSAGEM|TIPO )
- echo -e "r|$(date +%Y%m%d)|$(date +%H%M%S)|${message_from_id[$id]}|${message_from_first_name[$id]} ${callback_query_from_first_name[$id]}|${message_message_id[$id]}|${message_text[$id]}${callback_query_data[$id]}|${message_chat_type[$id]}" >> $SCRIPT/bot.log
- ### MENSAGENS - se a mensagem não for callback nem resposta
- [[ -z ${callback_query_data[$id]} && -z ${message_reply_to_message_from_id[$id]} ]] && {
- # define o destino das respostas - variável esta é para facilitar o envio de mensagens assíncronas usando as mesmas função do report
- destino=${message_chat_id[$id]}
- ## COMANDOS - Verifica se a mensagem é do tipo comando.
- if [[ ${message_entities_type[$id]} == bot_command ]]
- then
- # Remove o sufixo contendo o username do bot e o '@' inclusive, extraindo somente o comando e compara as opções
- case ${message_text[$id]%%@*} in
- '/ajuda' | '/start') hostgroups ;; # teclado principal
- esac
- fi # fim de COMANDOS
- # se não for comando, analisa respostas pré DEFINIDAS
- if [[ ${message_entities_type[$id]} != bot_command ]]
- then
- # se for o nome de um grupo
- grep "${message_text[$id]}" $SCRIPT/groups.tmp && { group=${message_text[$id]} ; hosts ; }
- # se for o nome de um servidor
- grep "${message_text[$id]}" $SCRIPT/$destino-hosts.tmp && { server="${message_text[$id]}" ; items ; }
- # se for 'Voltar'
- [[ ${message_text[$id]} == 'Voltar' ]] && { hostgroups ; }
- fi # fim de respostas pré definidas
- } # Fim de MENSAGENS
- ### CALLBACK - se a mensagem contiver callback, executa a função definida em 'bot-teclados'
- [[ -n ${callback_query_data[$id]} ]] & { destino=${callback_query_from_id[$id]} ; ShellBot.watchHandle --callback_data ${callback_query_data[$id]} ; }
- # Thread - segundo plano
- ) &
- done
- done
Add Comment
Please, Sign In to add comment