# LEDB Go Project ## Overview LEDB Go是LED的聊天機器人,通過Line api來接收跟回復訊息,除了資料查詢之外,也可以作為工作內容紀錄以及請假系統,還能定時提醒相關事項 ## Installation 要執行LEDB Go,你需要完成以下步驟: 1. 下載程式碼: ```sh git@github.com:ethel047/LEDB_go.git ``` 2. 進入資料夾: ```sh cd LEDB_go ``` 3. 安裝需要的資源庫: ```sh go mod download ``` 4. 修改config.go中的channelSecret跟accessToken,要改成你測試用的line帳號(你要去LINE API獲取),如果你要用LEDB的line帳號測試就不用改 ```sh // config.go // func InitBot() channelSecret := "YOUR_channelSecret" accessToken := "YOUR_accessToken" ``` 5. 執行go server ```sh go run app.go ``` 6. 設定轉傳,現在line那邊的訊息還沒有辦法傳給你,因為你沒有跟他說要傳到哪裡,所以透過ngrok來設定轉傳,進入https://ngrok.com/,登入後他會有教學,最後執行 ```sh ngrok http 5000 ``` ngrok會回傳給你一個類似這樣的東西 ```sh Session Status online Account daniel29348679@gmail.com(Plan:Free) Version3.184 Region Japan (jp) Interface http://127.0.0.1:4040 Forwarding https://15d8-61-231-156-128.ngrok-free.app -> http://localhost:5000 ``` 其中https://15d8-61-231-156-128.ngrok-free.app就是他的轉傳接收網址 你要把它貼到你的line bot webhook中 7.你的‘server應該能順利執行了 ## 運作流程 ### 接收訊息: LINE那邊的server接收到訊息的時候,會透過http向你設定的webhook傳送訊息,你需要寫一個api去接收,我們的做法是傳送到message.go去處理.Handlethread()是處理message的主程式,他透過chan接收資料。 chan是go的語言特色,簡單來說他是一個線程間交換資料的通道,可以參考https://vocus.cc/article/650069fcfd89780001f38f5b 你應該要很熟悉chan因為在這個project中有大量使用 在Handlethread()中,迴圈內的形式即是有限狀態機,他可以讓對話依照流程進行,當你要新增功能時,應該要現在這裡新增或是修改對話內容. 在我的設計中,每一個user都會對應一個thread(go goroutine),會這樣設計是為了效能跟變數設計方便,每個user都會有自己對應的變數儲存在Handlethread()中. ### 讀取跟寫入試算表 由於go中沒有await,async我使用另一個方法來達成類似效果 ```sh retchen := make(chan [][]string, 1) go ReadSheetThread(config.WorkRecordId, "工作表1", "B:B", retchen) ret := <-retchen // 讀取的表格會回傳到ret ``` 寫入表格則使用WriteSheetThread(),你可以去Recordwork中找到他的用法,因為太長了不在此贅述 ### 傳送訊息 我寫好了一個thread,他會自動把傳送到chan中的資料轉發出去,你只要往chan中塞資料即可 ```` Sendmessagechan <- StringPair{"品元", "Bot已啟動"} ````