megrxu

Post Bot

Sep 8, 2017  #Code #Recording #Flip Flop 

之前一直想玩一下 Telegram Bot,但是一直不知道寫個啥好玩。突然又一次在群裡聊天發現,寫一個自動在多個平臺髮狀態的 Bot 應該很好玩。

比如豆豆每次發票圈都是要在微信上和QQ空間上發兩遍一模一樣的。如果使用 Bot 的話只需要在 Bot 的地方發一次,然後讓 Bot 轉發到其他平臺就好了。

所以最近就開始寫了。現在寫完了轉發到 Telegram Channel 和 Facebook 的功能。

學習一下 Telegram Bot

看到官方的文件十分豐富,感覺是相當專業的一個 Bot 系統,所以對開發來說應該是很友好的。又看了看 Python 的 telegram-bot 的包,封裝的也是比較完善了,使用起來很方便。

比較容易就寫了幾個命令,比如獲取隨機的笑話,獲取最新的新聞之類的。(都用了現成的 api)

Markdown

在寫獲取新聞的時候,因為得到的資料是 dict 型別,想方便輸出有格式的文字(比如加粗,連結之類的)。 發現 Telegram Bot 對這個方面有原生的支援,感覺很好。

由於 Telegram 會自動預覽一些連結的內容,並提取摘要。這就使得和我剛剛做的格式文字有些重複。結果發現,官方也對這個地方有非常人性化的設計,可以手動關閉連結預覽。

Inline Button

覺得官方的 Bot Father 裡面的 Inline Button 非常酷,可以列出可點選的選單。

所以自己也想搞一下,做一個可以透過點選 Inline Button 選擇資訊源的 /news 命令。這個弄了很久,因為剛開始的時候對回撥機制有些誤解。

最後透過在 dispatcher 裡面新增一個 Callback Handler,來處理點選 Button 之後傳入 CallbackQuery 的引數,實現了之前的想法。

開工

之後就比較簡單地可以開始寫真正想要寫地東西了。

Telegram Channel

這個裡面比較簡單,由於都在 Telegram 裡面,所以檔案,語音,圖片之類地都能很方便地同步傳送過去。 但是由於還是需要在其他平臺下面傳,所以自己做了一個下載檔案和訊息資訊的功能,把當前的訊息儲存到本地,方便之後其他平臺的傳送。

Facebook

用了 Python 上的 facebook的包,可以方便地請求 GraphQL。Facebook 對開發者也十分友好,不需要什麼門檻就能申請到用於開發用的 appid。可以把短期的登陸 Token 轉化成 長期的 Token,有效期會更久一點。

未完成

  1. Facebook 的轉發

  2. 多個訊息的連續轉發

  3. Post 成功之後禁用Inline Button,避免誤觸連續轉發。

  4. Twitter

  5. QQ 空間和微信朋友圈是做不成了。

最後修改於 Sep 8, 2017


可能相關的