前言
這幾天接觸了 telegram API,用來串一些間單的程式並且將結果發送給自己,一開始用的是 node-telegram-bot-api ,但昨天發現裡頭有些 event 設計似乎不是這麼直覺。
當初會選擇 node-telegram-bot-api 是因為它在 github 上的 star 比較多。後來依照官方的推薦順序,選擇了 telegraf。
以下介紹基本常用的功能,以及自己的小筆記 😊
起手式
前置作業
1 | require('dotenv').config(); |
常用功能
1 | bot.start((ctx) => ctx.reply('Welcome')) //點擊 start 區塊後的行為 |
解析收到的訊息
取得用戶資訊
如果 bot 要主動發送訊息給某個用戶,需要知道某個用戶的 userID (group 的話就要知道 groupID)。
我們可以透過解析訊息來得知發送方的資訊(也能透過 http API 介面):
1 | bot.on('message', ({ from: { username, first_name, last_name, id }, reply }) => { |
取得媒體 id
以圖片為例,取得媒體 id。
這邊有一個很重要的觀念, photo 事件也是 message 事件的一種,所以在監聽的時候如果有以下:
1 | bot.on('message', () => {}) |
也存在於程式中,那麼:
1 | bot.on('photo', (ctx) => { |
很可能會被第一個監聽事件,提前搶走,造成沒監聽到事件。
主動發送訊息
1 | bot.telegram.sendMessage(process.env.yiyuUID, 'hello, yiyu') |
小地雷
如上述, message 事件很容易把別人的監聽搶走,因為 message 是小事件的集合。所以當要針對純圖片做處理的時候,可以把 message 換成 text。
1 | bot.on('text', (ctx) => { |
用意在於,讓純文字與純圖片各自有自己的監聽範圍,彼此不干擾。
但是如果要處理,圖片 + 文字
這種訊息的話,還是需要監聽 message 較適合。
例外處理
1 | bot.catch((err) => { |