Использование 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)
}
→ Ссылка