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::IRCWWW::Telegram::BotAPI 兩者都可以讀寫多個頻道。所以應該是沒有問題。