Bot Telegram dengan Python

Baru-baru ini, saya mendapat magang di perusahaan IT baru untuk diri saya sendiri dan proyek kami (tim saya) adalah bot telegram yang mengotomatiskan bagian dari pekerjaan manajer SDM. Minggu pertama diberikan kepada kami untuk belajar mandiri apa pun yang kami anggap perlu (dan saya yakin bahwa cara terbaik untuk mempelajari sesuatu adalah berlatih), jadi saya mulai bertindak. Bahasa pemrograman dipilih python (mungkin sudah jelas dari sampul kenapa), jadi pada artikel ini saya akan menganalisa contoh dengannya.





BotFather

Untuk membuat bot-kabel, Anda dapat menulis perintah pengguna @BotFather / newbot . Ini akan menanyakan nama dan @namapengguna untuk bot masa depan. Tidak ada yang rumit di sini - ini memberi tahu Anda segalanya (yang utama adalah @namapengguna tidak sibuk dan diakhiri dengan "bot"). BotFather akan mengirim token API HTTP, yang akan kita gunakan untuk bekerja dengan bot.





Pembuatan bot
Pembuatan bot

Telebot dan kekuatan python

Menurut saya, membuat bot tidak semudah itu. Sejujurnya, saya ingin mencoba untuk waktu yang lama, tetapi saya tidak punya cukup waktu (saya pikir ini akan memakan waktu lebih dari satu malam), atau saya tidak dapat memilih teknologinya (entah bagaimana saya menonton tutorial untuk c #), tapi kemungkinan besar itu hanya kemalasan. Tapi kemudian saya membutuhkannya untuk bekerja, jadi saya tidak berani menundanya lagi.





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()
      
      



Pesan pertama

/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()
      
      



Di sini kami menggunakan metode set_webhook, serupa dengan yang kami lakukan sebelumnya melalui tukang pos, dan di rute kosong kami menulis "sedikit ajaib" agar berhasil menerima pembaruan bot. Tentu saja, ini bukan cara yang baik, dan di masa mendatang lebih baik menulis sendiri fungsionalitas untuk memproses pesan masuk. Tapi pertama-tama, saya pikir ini adalah solusi terbaik.





Kesimpulan

Sebenarnya tidak terlalu sulit untuk menulis bot telegram dengan python, tetapi ada juga jebakan yang saya coba bicarakan di artikel ini. Tentu saja, ini baru permulaan, tetapi potongan kode terakhir dapat digunakan sebagai templat untuk sisi server, yang akan bekerja dengan bot telegram. Kemudian tinggal meningkatkan fungsionalitas sesuai kebijaksanaan Anda.








All Articles