Muitos usuários tem dúvidas sobre bots(em certas partes eu também tenho), então com este pretendo explicar um pouco sobre o funcionamento desses bichinhos dentro do Telegram
A interação pode ser feita diretamente com com a API, ou pode-se usar também bibliotecas para facilitar o uso, eu particularmente uso a pyTelegramBotAPI, acho ela bem estável(apesar do bug da ultima versão), é simples de usar e da acesso aos principais recursos da API
Voltando pro funcionamento do bot..
Mesmo algumas pessoas que já programam, se atrapalham um pouco com os bots, então vou explicar o funcionamento dele fazendo uma relação com o que a gente aprende nas primeiras aulas de lógica de programação..
De um modo geral um programa de computador em geral ele tem essa estrutura
/Entrada de dados/ -> |Processamento| -> /saída de dados/
Então podemos ver o bot da seguinte forma
/Comando dado ao bot/ -> |Processamento| -> /Resposta do bot ao usuário/
Notem que a única coisa que muda entre um bot e qualquer outro programa, é por onde os dados entram e por onde eles saem, as funções do bot vocês verão que são funções normais criadas em Python e por falar em Python, vamos começar a criar nosso bot ;)
Primeiramente, vamos instalar a lib pyTelegramBotAPI
pip3 install pyTelegramBotAPI #Caso esteja no Linux
C:\Python34\Scripts\pip.exe install pyTelegramBotAPI #Caso esteja no windows
Depois disso, vamos ao BotFather e damos o comando /newbot
Em seguida devemos definir um nome e um username para o bot, o qual deve necessariamente terminar com a palavra bot no final

Então temos aqui a seguinte key: 219289581:AAGOvvdtFwjx6jd33SGPeVMokx3toR9ART0
#PS, não adianta usar essa key, pois revoguei ela assim que terminei o post :)
OK, agora vamos começar a utilizar a API com a nossa key
import telebot
bot = telebot.TeleBot('219289581:AAGOvvdtFwjx6jd33SGPeVMokx3toR9ART0')
ótimo, já temos a instância do bot e vamos então definir um comando qualquer, como /teste
Para criar um novo comando vamos utilizar o message_handler
@bot.message_handler(commands=['teste'])
Com isso criamos um handler para o comando /teste, mas como da pra ver, ainda não tem nenhuma função programada para este comando, então iremos defini-la
def comando_teste(mensagem):
bot.reply_to(mensagem, 'Comando recebido')
Essa é a função que será chamada assim que o bot receber o comando /teste, a função receberá também a mensagem interceptada pelo bot como parâmetro.
Com o bot.reply_to dizemos ao bot para responder a quem enviou o comando o seguinte texto "Comando recebido"
E temos o primeiro comando já funcionando
A função pode chamar outros métodos do bot também além do reply_to, como o send_message, download_file, send_audio, etc.. O que você vai utilizar no seu bot depende do que você quer que ele faça
Com isso imagino que você já consiga criar seu bot simples, mas tenha em mente que seu bot não precisa só responder mensagens, ele pode realizar consultas em sites e te retornar os dados..
E isso tem diversas aplicações,como por exemplo obter valores de ações
Isso é possível porque podemos chamar uma outra função ou qualquer outro recurso diretamente pelo bot
Podemos ainda, executar comandos diretamente no terminal do servidor onde o bot esta rodando a partir do bot
Mas como fazer isso?
simples.. Lembram la em cima que a função comando_teste recebe como argumento a mensagem interceptada pelo bot? Então, ela contém de forma estruturada dados que podemos utilizar
Dentre os dados, podemos obter o nome de quem enviou o comando, o userID dessa pessoa, o tipo de chat, ou seja, se veio por uma mensagem privada, um grupo ou super grupo, podemos também ter o ID do chat, o username de quem enviou a mensagem, e a mensagem propriamente dita além de outros dados que você pode ir explorando ali pra usar como quiser no bot..
Mas blz e como utilizamos isso pra recriar os exemplos citados a cima ?
Simples, se temos como obter o comando dado pela pessoa, podemos jogar isso como argumento em outro código.
Então note que tenho uma função para capturar os dados de ações e no que diz respeito ao bot propriamente dito eu apenas passo o código da ação para a função, mas tomando alguns cuidados antes..
o comando será
/acoes
o seu uso então será
/acoes <código da ação>
Por exemplo,
/acoes PETR4.SA
Sei também que mensagem.text vai me retornar o comando completo /acoes PETR4.SA, mas o que me interessa é somente o PETR4.SA, então uso o split para separar /acoes do PETR4.SA, mas tomando o cuidado de tratar essa tentativa pegar somente o PETR4.SA, pois não é certeza que o usuário irá passar esse argumento, caso ele passe, eu chamo a função com o argumento fornecido por ele, do contrário eu envio uma mensagem dizendo que o código não foi informado
Para o outro exemplo, muito provavelmente você já tem ideia de como fazer, usando o subprocess fica simples, mas a preocupação com executar comandos no servidor é outra.. Como garantir que outros usuários não executem código no seu servidor?
Você pode criar uma espécie de sistema de autenticação, porém, gostaria de mostrar uma outra forma bem eficaz e muito mais prática.. Sabemos que cada usuário no telegram tem um identificador único, então porque não utilizar esse identificador para comprovar a autenticidade de quem esta tentando executar comando no seu servidor ?
Resultado
Primeiro com meu id correto no código
E agora usando qualquer id no código, no caso 00
E isso finaliza esse primeiro post, espero que tenha esclarecido um pouco o assunto de bots no telegram e mostrado que os bots podem ser bem mais do que só respostas prontas, você pode utiliza-los para obter qualquer dado que você poderia obter se estivesse na frente do computador e melhor sem precisar esgotar sua franquia de internet móvel kk já que você irá receber somente o resultado do comando, se o bot precisar acessar 200 sites para obter esse resultado, isso será feito utilizando obviamente a internet do servidor onde ele esta sendo executado e falando nisso..
Onde o bot fica?
o Bot precisa ficar sendo executado o tempo todo, afinal assim como qualquer outra aplicação, ele só vai estar disponível se estiver sendo executado. O lugar onde você vai executar não importa, desde que tenha os pacotes que seu bot irá utilizar, então você rodar seu bot no linux, no windows ou até mesmo no seu próprio celular
Enfim, é isso, caso queiram dar uma olhada no meu bot
e/ou acessar meu grupo sobre python no telegram




Muito bom, faz um ensinando a fazer bot do Whatsapp.
ResponderExcluirObg.
ExcluirO WhatsApp ainda não possui uma API oficial, o que complica bastante, atualmente em python o que é possível fazer é utilizar o https://github.com/tgalal/yowsup que qualquer hora posso sim fazer um tutorial sobre como utilizar. Ou então quem sabe fazer uma gambiarra usando selenium e o whatsapp web
Problema é que o WhatsApp não possui essa função de comandos, isso dificultaria bastante.
Excluiraté que não, no telegram mesmo alguns bots usam comandos de outras formas, como usar emoj ou palavras sem o / a identificação daí pode ser feita normalmente usando o "in" ou mesmo regex, o que complica com o whatsapp é realmente a falta de uma API oficial
ExcluirFaz um tutorial sobre isso aqui:
Excluirhttps://github.com/joaoricardo000/whatsapp-bot-seed
E posta mais coisas, ta parado o blog.
Interessante ! Queria saber se é possível o bot enviar uma mensagem sem que uma pessoa digite um comando. Ex.: Bot envia uma notícia assim que esta é postada em um determinado site
ResponderExcluir