v0.5.0

架構

最後更新


go-bot 把每個聊天平台放在 core/ 下各自的套件;彼此唯一共用的是回覆慣例。

系統概覽


flowchart LR
  App[你的應用程式] -->|New / Reply / Start| TG[core/telegram]
  App -->|New / Reply / Start| DC[core/discord]
  App -->|New / Reply / Start| LN[core/line]
  TG -->|long polling,向外連線| TGA[Telegram Bot API]
  DC -->|WebSocket gateway + REST,向外連線| DGA[Discord API]
  LNA[LINE Messaging API] -->|HTTPS webhook,向內推送| LN
  LN -->|reply / push| LNA
  1. flowchart LR
  2. App[你的應用程式] -->|New / Reply / Start| TG[core/telegram]
  3. App -->|New / Reply / Start| DC[core/discord]
  4. App -->|New / Reply / Start| LN[core/line]
  5. TG -->|long polling,向外連線| TGA[Telegram Bot API]
  6. DC -->|WebSocket gateway + REST,向外連線| DGA[Discord API]
  7. LNA[LINE Messaging API] -->|HTTPS webhook,向內推送| LN
  8. LN -->|reply / push| LNA

分層


層套件職責
應用程式你的程式碼每個 bot 註冊一個 ReplyHandler,呼叫 Send* 方法
平台 adaptercore/telegram、core/discord、core/line傳輸生命週期、把事件轉成 Input 派送、傳送、媒體下載、互動狀態
平台 SDKgo-telegram/bot v1.20.0、bwmarrin/discordgo v0.29.0、line-bot-sdk-go/v8/linebot v8.18.0線路協定;仍可透過 Input.Raw 取用
共用工具github.com/pardnchiu/go-pkg/utils為落地檔名與 Discord component ID 產生 UUID

go-telegram-bot-api/telegram-bot-api 與 tucnak/telebot(Telegram)、bwmarrin/discordgo(Discord)、line/line-bot-sdk-go(LINE)這類 Go 函式庫各自涵蓋單一平台的 API。go-bot 建立在 go-telegram/bot、discordgo 與 line-bot-sdk-go 之上,讓 Telegram、Discord、LINE 機器人共用同一套 New/Reply/Start/Close 生命週期;每則收到的訊息,其原始 SDK 事件仍保留在 Input.Raw。

跨切原則


原則效果
不設共用 internal 套件各套件自行宣告 Input、ReplyHandler、Status;識別碼型別不同(Telegram 為 int64 chat ID、Discord 為字串 snowflake、LINE 為 source ID)
單一 handler、同步呼叫Reply(handler) 會取代先前的 handler;非空回傳自動送回
每個網路呼叫都帶 context.Context所有 Send*、Delete、Save 與 status 呼叫都接收 ctx
用 Close 而非 Stop對齊 io.Closer;可重複呼叫
平台原生互動Telegram 用 inline keyboard 與 ForceReply,Discord 用 component 與 modal,LINE 不提供

相關頁面


EN