# 建立第一支 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)
}
```