Bot simples de telegrama em Python em 30 minutos

Em Habré, e não apenas isso, tanto se falou sobre bots que é até demais. Mas, tendo me interessado neste tópico há algumas semanas, eu ainda não conseguia encontrar material normal: todos os artigos eram para bonecos e estavam limitados a enviar uma mensagem em resposta a uma mensagem de usuário ou eram irrelevantes. Isso me levou a escrever um artigo que explicasse a um iniciante como eu como escrever e lançar um bot mais ou menos significativo (com a possibilidade de expandir a funcionalidade).

Parte 1: Registrar um bot


A parte mais simples e mais descrita. Muito brevemente: você precisa encontrar o bot do @BotFather , escrever para ele / start ou / newbot , preencher os campos que ele pede (o nome do bot e seu nome abreviado) e receber uma mensagem com o token do bot e um link para a documentação. O token deve ser salvo, de preferência confiável, pois é a única chave para autorizar o bot e interagir com ele.

Parte 2: Preparando para escrever código


Como já mencionado no título, escreveremos o bot em Python. Este artigo descreve como trabalhar com a biblioteca PyTelegramBotAPI (Telebot). Se você não possui o Python instalado, primeiro você precisa fazer isso: no terminal Linux, é necessário inserir

sudo apt-get install python python-pip 

Se você usa o Windows, precisa fazer o download do Python no site oficial.

Depois, no terminal Linux ou no prompt de comando do Windows, digite

 pip install pytelegrambotapi 

Agora você está pronto para escrever o código.

Parte 3: receba mensagens e diga "Olá"


Uma pequena digressão. Um telegrama pode informar o bot sobre as ações do usuário de duas maneiras: por meio de uma resposta a uma solicitação do servidor (Long Poll) e pelo Webhook, quando o próprio servidor do Telegram envia uma mensagem que alguém escreveu ao bot. O segundo método claramente parece melhor, mas requer um endereço IP dedicado, e o SSL é instalado no servidor. Neste artigo, quero falar sobre como escrever um bot, não como configurar um servidor, portanto usaremos a pesquisa longa.

Abra seu editor de texto favorito e vamos escrever o código bot!

A primeira coisa a fazer é importar nossa biblioteca e conectar o token do bot:

 import telebot; bot = telebot.TeleBot('% %'); 

Agora declare um método para receber mensagens de texto:

 @bot.message_handler(content_types=['text']) def get_text_messages(message): 

Nesta seção do código, declaramos um ouvinte para mensagens de texto e um método para processá-las. O campo content_types pode assumir valores diferentes, e não apenas um, por exemplo

 @bot.message_handler(content_types=['text', 'document', 'audio']) 

Irá responder a mensagens de texto, documentos e áudio. Mais detalhes podem ser encontrados na documentação oficial.

Agora vamos adicionar um pouco de funcionalidade ao nosso método: se o usuário escrever "Olá" para nós, dizeremos "Olá, como posso ajudá-lo?". E se eles escreverem o comando "/ help", solicitaremos que o usuário escreva "Olá":

 if message.text == "": bot.send_message(message.from_user.id, ",     ?") elif message.text == "/help": bot.send_message(message.from_user.id, " ") else: bot.send_message(message.from_user.id, "   .  /help.") 

Este pedaço de código não requer comentários, como me parece. Agora precisamos adicionar apenas uma linha ao nosso código (fora de todos os métodos).

 bot.polling(none_stop=True, interval=0) 

Agora, nosso bot perguntará constantemente ao servidor do Telegram "Alguém escreveu para mim?" E se escrevermos para o nosso bot, o Telegram enviará a nossa mensagem. Nós salvamos o arquivo inteiro e escrevemos no console

 python bot.py 

Onde bot.py é o nome do nosso arquivo.

Agora você pode escrever um bot e ver o resultado:

imagem

Parte 4: Botões e segmentos de mensagens


O envio de mensagens é sem dúvida divertido, mas é ainda mais divertido ter um diálogo com o usuário: faça perguntas e obtenha respostas para ele. Suponha que agora nosso bot pergunte ao usuário seu nome, sobrenome e idade. Para isso, usaremos o método register_next_step_handler do bot:

 name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "  ?"); bot.register_next_step_handler(message, get_name); #  –  get_name else: bot.send_message(message.from_user.id, ' /reg'); def get_name(message): #  global name; name = message.text; bot.send_message(message.from_user.id, '   ?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('  ?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #    try: age = int(message.text) #,     except Exception: bot.send_message(message.from_user.id, ', '); bot.send_message(message.from_user.id, ' '+str(age)+' ,   '+name+' '+surname+'?') 

E assim, gravamos os dados do usuário. Este exemplo mostra um exemplo muito simplificado; para o bem, você precisa armazenar dados intermediários e estados do usuário no banco de dados, mas hoje estamos trabalhando com um bot e não com bancos de dados. O toque final - pedimos aos usuários para confirmarem que tudo foi inserido corretamente, mas não apenas assim, mas com os botões! Para fazer isso, edite o código do método get_age um pouco

 def get_age(message): global age; while age == 0: #    try: age = int(message.text) #,     except Exception: bot.send_message(message.from_user.id, ', '); keyboard = types.InlineKeyboardMarkup(); #  key_yes = types.InlineKeyboardButton(text='', callback_data='yes'); # «» keyboard.add(key_yes); #    key_no= types.InlineKeyboardButton(text='', callback_data='no'); keyboard.add(key_no); question = ' '+str(age)+' ,   '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard) 

E agora o nosso bot envia o teclado, mas se você clicar nele, nada acontecerá. Porque não escrevemos um método manipulador. Vamos escrever:

 @bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data  callback_data,       .... #  ,    bot.send_message(call.message.chat.id, ' : )'); elif call.data == "no": ... # 

Resta apenas anexar uma linha ao início do arquivo:

 from telebot import types 

Isso é tudo, salve e execute nosso bot:

imagem

Source: https://habr.com/ru/post/pt442800/


All Articles