package main import ( "encoding/json" "fmt" "io" "log" "net/http" "strings" ) var apiToken = "421791796:AAE4wPbcqfLP1GNeGR3RTBiyX16fCj3HPAM" func main() { fmt.Println("vim-go") http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) }) http.HandleFunc("/zeexkfcsdjpmncirkyelwzotjmmefcqtcogrfwnafidionxiacwnslwuhbwfuppjgwzbmazd", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) body, err := io.ReadAll(r.Body) if err != nil { log.Println(err) return } log.Println(string(body)) update := struct { Message *struct { ID int `json:"message_id"` Chat struct { ID int `json:"id"` } Text string } CallbackQuery *struct { ID string `json:"id"` Message struct { ID int `json:"message_id"` Chat struct { ID int `json:"id"` } Data string } } `json:"callback_query"` }{} err = json.Unmarshal(body, &update) if err != nil { log.Println(err) return } if update.Message != nil { go sendButtonAndDelete(update.Message.Chat.ID, update.Message.ID, update.Message.Text) } else if update.CallbackQuery != nil { answerUrl := fmt.Sprintf("https://api.telegram.org/bot%s/answerCallbackQuery?callback_query_id=%stext=ok", apiToken, update.CallbackQuery.ID) resp, err := http.Get(answerUrl) if err != nil { log.Println(err) return } body, err = io.ReadAll(resp.Body) if err != nil { log.Println(err) return } log.Println(string(body)) } }) port := 28923 log.Panic(http.ListenAndServe(fmt.Sprintf(":%v", port), nil)) } func sendButtonAndDelete(chatID int, messageID int, text string) { url := fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", apiToken) sendMsgFmt := ` { "chat_id": "%d", "text": "ok", "reply_markup": { "inline_keyboard": [[ { "text": "%s", "callback_data": "42" } ]] } ` sendMsgReq := fmt.Sprintf(sendMsgFmt, chatID, text) resp, err := http.Post(url, "application/json", strings.NewReader(sendMsgReq)) if err != nil { log.Println(err) return } log.Println(resp) body, err := io.ReadAll(resp.Body) if err != nil { log.Println(err) return } log.Println(string(body)) deleteUrl := fmt.Sprintf("https://api.telegram.org/bot%s/deleteMessage?chat_id=%d&message_id=%d", apiToken, chatID, messageID) resp, err = http.Get(deleteUrl) if err != nil { log.Println(err) return } body, err = io.ReadAll(resp.Body) if err != nil { log.Println(err) return } log.Println(string(body)) } /* update_id: 547400623 message: message_id: 869 from: id: 385713421 is_bot: false first_name: Balakrishnan language_code: en chat: id: -832015899 title: Playbot type: group all_members_are_administrators: true date: 1671850862 text: Hi update_id: 547400624 callback_query: id: "1656626530601531051" from: id: 385713421 is_bot: false first_name: Balakrishnan language_code: en message: message_id: 868 from: id: 421791796 is_bot: true first_name: grocery_guy username: grocery_guy_bot chat: id: -832015899 title: Playbot type: group all_members_are_administrators: true date: 1671074930 text: foo reply_markup: inline_keyboard: - - text: blah callback_data: "42" chat_instance: "5165047605234327446" data: "42" */