此为历史版本和 IPFS 入口查阅区,回到作品页
Meow
IPFS 指纹 这是什么

作品指纹

Python Telegram Bot 入門教學(一)

Meow
·
·
而為了可以用python來方便的實作並管理一個Bot,Python Telegram Bot提供了一個Pytohn的介面給我們使用,這裡先介紹最常用的三個Object:Updater、Dispatcher、Handeller

基本上一個最基本的 Telegram Echo Bot 需要的三元件是Updater、Dispatcher、Handeller,以下圖來說:

Telegram basic object
  • Updater負責接收 telegram chat bot 那裡的變動(update),包含使用者傳新的訊息給Bot等等,接到update後會將其傳給Dispatcher
  • 可以將Dispatcher想像成一個負責分配Update的郵差,將不同的Update分配給不同的Hapdler
  • 而Handler有很多種類型,譬如處理使用者Command的CommandHandler,或是單純處理訊息的MessageHandler,而這些Handler可以指定一個我們自定義的Function去處理update


大家可以看一下官方提供的echo bot的範例程式,這個程式很簡單的將使用者傳過來的訊息在回傳一樣的訊息給使用者,下面會對程式碼的部分做介紹以及提供一些延伸的資訊~


telegram.ext package

telegram.ext.Updater

這個Class可以快速的讓我們與telegram bot建立連線,讓使用者不用去管要如何開啟一個Server,來長時間的與telegram bot連線,update本身便會幫我們開啟一個pool serve或是使用http server去接收update

Updater會建立新的Thread並去監聽telegram bot是否有新的Update,接收到後將其傳給dispatcher

建立一個updater:

from telegram.ext import Updater
# 會自動根據TOKEN創建dispatcher與bot
updater = Updater(BOT_TOKEN)


開起兩種不同server的方法:

  • start_polling - 使用 long polling的方式接收update:
updater = Updater(TOKEN)
  • start-webhook - 使用一個http server去監聽update,url要是https開頭的:
set_webhook(webhook_url=webhook_url)


telegram.ext.Dispatcher

Dispatcher像是一個中轉站與管理者,將由Updater接收到的update轉送給對應的Handler

可以新增或是移除Handler,也可以管理錯誤

這裡請注意,由於每個group至多只會觸發一個Handler,因此先加進去的Handler如果被觸發了,就不會在觸發其他的Handler了

常用function :

# 新增一個Handler,且可以指定group(預設0)
# 每個group至多只會觸發一個Handler
dispatcher.add_handler(handler = CommandHandler('hello', hello), group=0) 


telegram.ext.Handler

所有類型的Handler都繼承telegram.ext.handler.Handler,下面介紹兩種種常見的Handler


telegram.ext.CommandHandler

負責處理帶有command的使用者訊息,像是使用者在對話框中輸入的/start或是/help之類的訊息

def start(update, context):
    update.message.reply_text('Hello!')

# 如果使用者傳來的訊息帶有/start,則啟動上面定義的start function回傳Hello給使用者
dp.add_handler(CommandHandler("start", start))  


telegram.ext.MessageHandler

處理接收到的Message,可以包含text, image, status update等等

#用Filters.text和Filters.command來指定要當拿到的update是text和command的訊息時
# 觸發callback fuction echo
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))





CC BY-NC-ND 2.0 授权