# 建立第一支 Telegram 機器人 ## 先安裝這些 - [git](https://git-scm.com/) - [golang](https://golang.org/) - [telegram desktop]() > 這邊補充安裝要注意的細節 > MAC請注意: > 一直按NEXT > MAC在安裝成是工具的時候會一起裝 ## 如何使用 botfather 建立機器人 打/newbot 然後取一個名字要加_bot在後面 ![](https://i.imgur.com/XEOLlNG.png) ## 如何查詢機器人的 Token 在 botfather 打 /help ![](https://i.imgur.com/i32ypGS.png) 使用 mybot ## 讓機器人活起來 ### 建立專案資料夾 > 之後在cmd視窗要先打上 cd bot 來改變路徑 ![](https://i.imgur.com/9tLZKAz.png) ### 讓機器人講不一樣的話 ![](https://i.imgur.com/4XusJjT.png) ### 安裝需要的第三方套件 我們使用的是這個專案 => [Golang bindings for the Telegram Bot API](https://github.com/go-telegram-bot-api/telegram-bot-api) 他需要額外安裝,安裝的方法是用cmd下這個指令 ``` go get -u github.com/go-telegram-bot-api/telegram-bot-api ``` ![](https://i.imgur.com/iTe4iBW.png) 修改套色的地方,改成下圖這樣 ![](https://i.imgur.com/ELRbVns.png) ## 挑戰 1. 匯率換算機器人 => 輸入 30, 機器人回答 30 美金現在是 ### 台幣 1.在 msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) 那行前面加下面這些東東: n, _ := strconv.Atoi(update.Message.Text) output := n*30 m := strconv.Itoa(output) str := "目前 US$" + update.Message.Text + "兌台幣為 NTD" + m 2.然後把msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.`Message.Text`) 裡的update.`Message.Text` 改成str。就像之前改固定回答一樣。只是這次回答的是自己定義的變數,所以不用"" 2. 假會機器人 => 天氣好嗎? 機器人回答 天氣超好! OO正嗎? 機器人回答 OO超正! (把問號換成驚嘆號,問句的倒數第二個字插入超) ## 參考專案 https://github.com/go-telegram-bot-api/telegram-bot-api ``` package main import ( "log" "github.com/go-telegram-bot-api/telegram-bot-api" ) func main() { bot, err := tgbotapi.NewBotAPI("MyAwesomeBotToken") if err != nil { log.Panic(err) } bot.Debug = true log.Printf("Authorized on account %s", bot.Self.UserName) u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates, err := bot.GetUpdatesChan(u) for update := range updates { if update.Message == nil { // ignore any non-Message Updates continue } log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) msg.ReplyToMessageID = update.Message.MessageID bot.Send(msg) } } ``` ## 補充資料 [linux 基本指令](https://blog.techbridge.cc/2017/12/23/linux-commnd-line-tutorial/) ![](https://i.imgur.com/sfKhMe4.png) ### 如果機器人沒反應在CMD Ctrl c 兩次重置 再打一次go run.... ## 如果想讓機器人有不同的反應 ``` for update := range updates { if update.Message == nil { // ignore any non-Message Updates continue } msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) if update.Message.Text == "高中生真的很棒" { msg = tgbotapi.NewMessage(update.Message.Chat.ID, "超棒ㄉ") } else { msg = tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) } msg.ReplyToMessageID = update.Message.MessageID bot.Send(msg) } ```