之前一直想玩一下 Telegram Bot,但是一直不知道寫個啥好玩。突然又一次在群裡聊天發現,寫一個自動在多個平臺髮狀態的 Bot 應該很好玩。
比如豆豆每次發票圈都是要在微信上和QQ空間上發兩遍一模一樣的。如果使用 Bot 的話只需要在 Bot 的地方發一次,然後讓 Bot 轉發到其他平臺就好了。
所以最近就開始寫了。現在寫完了轉發到 Telegram Channel 和 Facebook 的功能。
學習一下 Telegram Bot
看到官方的文件十分豐富,感覺是相當專業的一個 Bot 系統,所以對開發來說應該是很友好的。又看了看 Python 的 telegram-bot 的包,封裝的也是比較完善了,使用起來很方便。
比較容易就寫了幾個命令,比如獲取隨機的笑話,獲取最新的新聞之類的。(都用了現成的 api)
Markdown
在寫獲取新聞的時候,因為得到的資料是 dict 型別,想方便輸出有格式的文字(比如加粗,連結之類的)。 發現 Telegram Bot 對這個方面有原生的支援,感覺很好。
Link Preview
由於 Telegram 會自動預覽一些連結的內容,並提取摘要。這就使得和我剛剛做的格式文字有些重複。結果發現,官方也對這個地方有非常人性化的設計,可以手動關閉連結預覽。
Inline Button
覺得官方的 Bot Father 裡面的 Inline Button 非常酷,可以列出可點選的選單。
所以自己也想搞一下,做一個可以透過點選 Inline Button 選擇資訊源的 /news
命令。這個弄了很久,因為剛開始的時候對回撥機制有些誤解。
最後透過在 dispatcher 裡面新增一個 Callback Handler,來處理點選 Button 之後傳入 CallbackQuery 的引數,實現了之前的想法。
開工
之後就比較簡單地可以開始寫真正想要寫地東西了。
Telegram Channel
這個裡面比較簡單,由於都在 Telegram 裡面,所以檔案,語音,圖片之類地都能很方便地同步傳送過去。 但是由於還是需要在其他平臺下面傳,所以自己做了一個下載檔案和訊息資訊的功能,把當前的訊息儲存到本地,方便之後其他平臺的傳送。
用了 Python 上的 facebook的包,可以方便地請求 GraphQL。Facebook 對開發者也十分友好,不需要什麼門檻就能申請到用於開發用的 appid。可以把短期的登陸 Token 轉化成 長期的 Token,有效期會更久一點。
未完成
Facebook 的轉發多個訊息的連續轉發
Post 成功之後禁用Inline Button,避免誤觸連續轉發。TwitterQQ 空間和微信朋友圈是做不成了。