Всем привет, решил написать телеграм бота на Go без использования библиотек. Но никак не могу разобраться с кнопками, помогите пожалуйста.
Код бота:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"strconv"
)
func main() {
botToken := ""
botApi := "https://api.telegram.org/bot"
botUrl := botApi + botToken
offset := 0
for {
updates, err := getUpdates(botUrl, offset)
if err != nil {
log.Println("Smth went wrong: ", err.Error())
}
for _, update := range updates {
err = respond(botUrl, update)
offset = update.UpdateId + 1
}
fmt.Println(updates)
}
}
func getUpdates(botUrl string, offset int) ([]Update, error) {
resp, err := http.Get(botUrl + "/getUpdates" + "?offset=" + strconv.Itoa(offset))
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var restResponse RestResponse
err = json.Unmarshal(body, &restResponse)
if err != nil {
return nil, err
}
return restResponse.Result, nil
}
func respond(botUrl string, update Update) error {
var botMessage BotMessage
botMessage.ChatId = update.Message.Chat.ChatId
keyboard := map[string]string{"text": "button1"}
if update.Message.Text == "Hello" {
botMessage.Text = "Hello"
botMessage.ReplyMarkup.Keyboard.Text = keyboard
}
buf, err := json.Marshal(botMessage)
if err != nil {
return err
}
_, err = http.Post(botUrl+"/sendMessage", "application/json", bytes.NewBuffer(buf))
if err != nil {
return err
}
return nil
}
Структуры:
package main
type Update struct {
UpdateId int `json:"update_id"`
Message Message `json:"message"`
}
type Message struct {
Chat Chat `json:"chat"`
Text string `json:"text"`
}
type Chat struct {
ChatId int `json:"id"`
}
type RestResponse struct {
Result []Update `json:"result"`
}
type BotMessage struct {
ChatId int `json:"chat_id"`
Text string `json:"text"`
ReplyMarkup ReplyKeyboardMarkup `json:"reply_markup"`
}
type ReplyKeyboardMarkup struct {
Keyboard KeyboardButton `json:"keyboard"`
}
type KeyboardButton struct {
Text map[string]string `json:"text"`
}