Bot Telegram em Python

Recentemente, consegui um estágio em uma nova empresa de TI para mim e nosso projeto (da minha equipe) era um bot de telegramas que automatiza parte do trabalho dos gerentes de RH. A primeira semana foi dada para estudarmos o que acharmos necessário (e estou convencido de que a melhor forma de aprender algo é praticando), comecei a agir. A linguagem de programação escolhida foi python (provavelmente está claro desde a capa o porquê), então neste artigo irei analisar um exemplo com ela.





BotFather

Para criar um cable-bot, você pode escrever um user @BotFather command / newbot . Ele pedirá o nome e @username para o futuro bot. Nada complicado aqui - ele diz tudo (o principal é que @ nomedousuário não está ocupado e termina com "bot"). BotFather enviará um token de API HTTP, que usaremos para trabalhar com o bot.





Criação de bot
Criação de bot

Telebot e o poder do python

Sempre me pareceu que criar um bot não é tão fácil. Sinceramente, queria tentar há muito tempo, mas ou não tive tempo suficiente (pensei que demoraria mais de uma noite) ou não consegui escolher a tecnologia (de alguma forma assisti ao tutorial para c #) mas provavelmente era apenas preguiça. Mas eu precisava que funcionasse, então não ousei adiar mais.





python . , , . ( ) 6 (!) . :





import telebot
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, "Hello!")
bot.polling()
      
      



Primeira Mensagem

/start, . : telebot ( pyTelegramBotAPI pip install pyTelegramBotAPI



( pip install telebot



!), , , BotFather. , ( “/start”), , , “Hello!”. , , , . - , "" .





Flask & Requests

Telebot, , , “”. , hr- (), / / . , . python - flask. , 5000- (http://localhost:5000/):





from flask import Flask
 
app = Flask(__name__)


@app.route("/", methods=["GET"])
def index():
    return "Hello, World!"
 
 
if __name__ == "__main__":
    app.run()
      
      



, . (habr), . , “Hello!” :





from flask import Flask, request
import requests

app = Flask(__name__)


def send_message(chat_id, text):
    method = "sendMessage"
    token = "1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8"
    url = f"https://api.telegram.org/bot{token}/{method}"
    data = {"chat_id": chat_id, "text": text}
    requests.post(url, data=data)


@app.route("/", methods=["POST"])
def receive_update():
    chat_id = request.json["message"]["chat"]["id"]
    send_message(chat_id, "Hello!")
    return "ok"


if __name__ == "__main__":
    app.run()
      
      



, . , . , , . telegram API setWebhook. , url, ( http://localhost:5000/). , : " localhost", localhost . , setWebhook https url-. ngrok, . ngrok, “ngrok http 5000”. :





ngrok
ngrok

setWebhook, , postman. post https://api.telegram.org/bot<>/setWebhook url. :





setWebhook
setWebhook

telebot, . , flask’e, . ? -, send_message . :





from flask import Flask, request
import telebot

app = Flask(__name__)
 
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')


@app.route("/", methods=["POST"])
def receive_update():
    chat_id = request.json["message"]["chat"]["id"]
    bot.send_message(chat_id, "Hello!")
    return "ok"


if __name__ == "__main__":
    app.run()
      
      



, , , , @bot.message_handler - , (, , , . .). , flask , telebot. bot.polling(), “ ”. , - . , :





from flask import Flask, request
import telebot

bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
bot.set_webhook(url="https://8c6f687b75c9.ngrok.io")
app = Flask(__name__)


@app.route('/', methods=["POST"])
def webhook():
    bot.process_new_updates(
        [telebot.types.Update.de_json(request.stream.read().decode("utf-8"))]
    )
    return "ok"


@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, 'Hello!')


if __name__ == "__main__":
    app.run()
      
      



Aqui, usamos o método set_webhook, semelhante a como fazíamos anteriormente por meio do carteiro, e em uma rota vazia, escrevemos "um pouco de mágica" para receber atualizações de bots com sucesso. Claro, essa não é uma maneira muito boa e, no futuro, é melhor escrever a funcionalidade para processar as mensagens que chegam você mesmo. Mas, primeiro, acho que essa é a melhor solução.





Conclusão

Na verdade, não é tão difícil escrever um bot de telegrama em python, mas também existem armadilhas sobre as quais tentei falar neste artigo. Claro, isso é apenas o começo, mas a última parte do código pode ser usada como um modelo para o lado do servidor, que funcionará com o bot do telegrama. Em seguida, resta apenas aumentar a funcionalidade a seu critério.








All Articles