Использование telegram-bot-api (golang) ошибка Unresolved reference 'SetWebhook'
Программированием увлекаюсь в свободное время, прошу не судить строго. Пытаюсь запустить пример кода телеграмм бота, но IDE GoLand выдает ошибку не могу понять в чем дело Сборка через github на HEROKU Он так же ругается на SetWebhook
Unresolved reference 'SetWebhook':33
Что я делаю не так? Пример кода взят из статьи. Ниже привожу сам код
package main
import (
"encoding/json"
tba "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"io/ioutil"
"log"
"os"
"github.com/gin-gonic/gin"
_ "github.com/heroku/x/hmetrics/onload"
_ "github.com/lib/pq"
)
var (
bot *tba.BotAPI
botToken = os.Getenv(Bot_Token)
baseURL = os.Getenv(App_URL)
)
func initTelegram() {
var err error
bot, err = tba.NewBotAPI(botToken)
if err != nil {
log.Println(err)
return
}
// this perhaps should be conditional on GetWebhookInfo()
// only set webhook if it is not set properly
url := baseURL + bot.Token
_, err = bot.SetWebhook(tba.NewWebhook(url))
if err != nil {
log.Println(err)
}
}
func webhookHandler(c *gin.Context) {
defer c.Request.Body.Close()
bytes, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
log.Println(err)
return
}
var update tba.Update
err = json.Unmarshal(bytes, &update)
if err != nil {
log.Println(err)
return
}
// to monitor changes run: heroku logs --tail
log.Printf("From: %+v Text: %+v\n", update.Message.From, update.Message.Text)
}
func main() {
port := os.Getenv("PORT")
if port == "" {
log.Fatal("$PORT must be set")
}
// gin router
router := gin.New()
router.Use(gin.Logger())
// telegram
initTelegram()
router.POST("/"+bot.Token, webhookHandler)
err := router.Run(":" + port)
if err != nil {
log.Println(err)
}
}
текст, выделенный жирным шрифтом
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
SetWebhook был в старых версиях. Вики не обновили. В данный момент такого метода нет у библиотеки. Поэтому, либо откатитесь на старые версии, либо используйте bot.ListenForWebhook("/" + bot.Token)
func ExampleNewWebhook() {
bot, err := NewBotAPI("MyAwesomeBotToken")
if err != nil {
panic(err)
}
bot.Debug = true
log.Printf("Authorized on account %s", bot.Self.UserName)
wh, err := NewWebhookWithCert("https://www.google.com:8443/"+bot.Token, FilePath("cert.pem"))
if err != nil {
panic(err)
}
_, err = bot.Request(wh)
if err != nil {
panic(err)
}
info, err := bot.GetWebhookInfo()
if err != nil {
panic(err)
}
if info.LastErrorDate != 0 {
log.Printf("failed to set webhook: %s", info.LastErrorMessage)
}
updates := bot.ListenForWebhook("/" + bot.Token)
go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil)
for update := range updates {
log.Printf("%+v\n", update)
}
}
func ExampleWebhookHandler() {
bot, err := NewBotAPI("MyAwesomeBotToken")
if err != nil {
panic(err)
}
bot.Debug = true
log.Printf("Authorized on account %s", bot.Self.UserName)
wh, err := NewWebhookWithCert("https://www.google.com:8443/"+bot.Token, FilePath("cert.pem"))
if err != nil {
panic(err)
}
_, err = bot.Request(wh)
if err != nil {
panic(err)
}
info, err := bot.GetWebhookInfo()
if err != nil {
panic(err)
}
if info.LastErrorDate != 0 {
log.Printf("[Telegram callback failed]%s", info.LastErrorMessage)
}
http.HandleFunc("/"+bot.Token, func(w http.ResponseWriter, r *http.Request) {
update, err := bot.HandleUpdate(r)
if err != nil {
log.Printf("%+v\n", err.Error())
} else {
log.Printf("%+v\n", *update)
}
})
go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil)
}