|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# XXX SOBRE XXX |
| 4 | +# |
| 5 | +# script: InlineYoutube.sh |
| 6 | +# |
| 7 | +# O script implementa um Bot Inline semelhante ao '@vid' que realiza |
| 8 | +# consultas de vídeos no site do youtube. |
| 9 | +# |
| 10 | +# Para melhor compreensão foram utilizados parâmetros longos nas funções; Podendo |
| 11 | +# ser substituidos pelos parâmetros curtos respectivos. |
| 12 | +# |
| 13 | +# XXX ATENÇÃO XXX |
| 14 | +# |
| 15 | +# É necessário habilitar o modo inline. Para ativar essa opção, envie o |
| 16 | +# comando /setinline para @BotFather e forneça o texto de espaço reservado |
| 17 | +# que o usuário verá no campo de entrada depois de digitar o nome do seu bot. |
| 18 | + |
| 19 | +# Importando API |
| 20 | +source ShellBot.sh |
| 21 | + |
| 22 | +# Token do bot |
| 23 | +bot_token='371714654:AAF1Vujtoi81zjwFjpb-qdGJFspK0HuwUD0' |
| 24 | + |
| 25 | +# Inicializando o bot |
| 26 | +ShellBot.init --token "$bot_token" --monitor --return map |
| 27 | + |
| 28 | +yt_video() |
| 29 | +{ |
| 30 | + local vid title views |
| 31 | + local resp yt_video query vids i |
| 32 | + local re_vid re_vt re_vv |
| 33 | + |
| 34 | + yt_video='https://www.youtube.com/watch?v=' # URI |
| 35 | + |
| 36 | + # Regex |
| 37 | + re_vid='href="/watch\?v=([a-zA-Z0-9_-]+)"' # ID |
| 38 | + re_vt='title="([^"]+)' # Título |
| 39 | + re_vv='<li>([0-9.]+\s+(visualizações|views))</li>' # Visualizações |
| 40 | + |
| 41 | + query='' |
| 42 | + |
| 43 | + while read -r resp; do |
| 44 | + # Extrai as informações do video. (se presente) |
| 45 | + if [[ $resp =~ $re_vid ]] && vid=${BASH_REMATCH[1]} && |
| 46 | + [[ $resp =~ $re_vt ]] && title=${BASH_REMATCH[1]} && |
| 47 | + [[ $resp =~ $re_vv ]] && views=${BASH_REMATCH[1]}; then |
| 48 | + |
| 49 | + # Salta para o próximo elemento caso já exista. |
| 50 | + [[ $vid == @($vids) ]] && continue |
| 51 | + |
| 52 | + # Cria/anexa o objeto video a query de resultado. |
| 53 | + ShellBot.InlineQueryResult --input query \ |
| 54 | + --type video \ |
| 55 | + --mime_type 'video/mp4' \ |
| 56 | + --id "$vid" \ |
| 57 | + --video_url "${yt_video}${vid}" \ |
| 58 | + --thumb_url "https://i.ytimg.com/vi/${vid}/hqdefault.jpg" \ |
| 59 | + --title "${title}" \ |
| 60 | + --description "${views}" \ |
| 61 | + --input_message_content "$(ShellBot.InputMessageContent --message_text "${yt_video}${vid}")" # Envia o link caso o usuário clique no video da lista. |
| 62 | + |
| 63 | + # 50 resultados por query. (limite máximo suportado pelo Telegram) |
| 64 | + [[ $((++i)) -eq 50 ]] && break |
| 65 | + |
| 66 | + # Atualiza a lista com o objeto criado. |
| 67 | + vids+=${vids:+|}$vid |
| 68 | + fi |
| 69 | + # Envia uma requisição a uri de pesquisa do youtube com o video especificado na query de consulta. |
| 70 | + done < <(wget -qO- "https://www.youtube.com/results?search_query=${inline_query_query[$id]// /+}") |
| 71 | + |
| 72 | + # Envia a query com os resultados da consulta. |
| 73 | + ShellBot.answerInlineQuery --inline_query_id ${inline_query_id[$id]} \ |
| 74 | + --results "$query" |
| 75 | + |
| 76 | + return $? |
| 77 | +} |
| 78 | + |
| 79 | +while : |
| 80 | +do |
| 81 | + # Obtem as atualizações |
| 82 | + ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext) --timeout 30 |
| 83 | + |
| 84 | + # Lista o índice das atualizações |
| 85 | + for id in $(ShellBot.ListUpdates) |
| 86 | + do |
| 87 | + # Inicio thread |
| 88 | + ( |
| 89 | + # Executa a função caso uma consulta inline for iniciada. |
| 90 | + [[ $inline_query_id ]] && yt_video |
| 91 | + |
| 92 | + ) & # Utilize a thread se deseja que o bot responda a várias requisições simultâneas. |
| 93 | + done |
| 94 | +done |
| 95 | +#FIM |
0 commit comments