tgircbot - telegram 與 IRC 頻道的訊息轉發機器人
作者:gugod 發佈於:Code: https://github.com/gugod/tgircbot
LICENSE: CC0
某年某月某日 g0v 臉書後勤中心有人在問「g0v 有沒有 telegram group」,於是我就開設了一個,並且架設機器人轉發 IRC 與 Telegram Group 之間的訊息。
Telegram API 的設計很不錯,可採用 long-polling,不需要準備 webhook 也可以做機器人,基本上只要準備個 HTTP Client 就行了。而 IRC 端的協定則是需要保持連線在建立的狀態,並且隨時讀寫連線的內容。
協調多個 IO,自然是以 event loop 實作。
CPAN 上做 IRC 機器人的模組很多,最後我選了 Mojo::IRC
,主要是看到 WWW::Telegram::BotAPI
之中用了 Mojo::UserAgent
來處理異步 HTTP 對談。既然必須得用 Mojo 牌的 event loop,那 IRC 那端就同樣選個使用 Mojo 牌 event loop 的實作吧。
不過 Mojo::IRC
的實作也是薄形的,對於進出其中的 IRC 協定內容,只是簡單地拆成基本的對照表,有點不夠用。必須要在加入 IRC::Utils
來拆出一部分的細節。
另外,在處理連線中斷方面,似乎並不太完整。一直沒有試驗出如何自動在斷線之後重連。所以目前是定時把這個機器人殺掉重開。
配合 IRC 協定,在 telegram api 端的 long-polling 就沒有設定很久,只有 5 秒鐘的等待時間。
雖然目前只實作了單一頻道的轉發,但多個頻道的轉發也是可行的。Mojo::IRC
和 WWW::Telegram::BotAPI
兩者都可以讀寫多個頻道。所以應該是沒有問題。