package telegram import ( "context" "encoding/json" "io" "net/http" "net/url" "github.com/pkg/errors" ) func (b *Bot) postForm(ctx context.Context, apiPath string, formData url.Values, result any) error { apiURL, err := b.apiURL(ctx) if err != nil { return err } resp, err := http.PostForm(apiURL+apiPath, formData) if err != nil { return errors.Wrap(err, "fail to http.PostForm") } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return errors.Wrap(err, "fail to ioutil.ReadAll") } var respInfo struct { Ok bool `json:"ok"` ErrorCode int `json:"error_code"` Description string `json:"description"` Result any `json:"result"` } respInfo.Result = result err = json.Unmarshal(body, &respInfo) if err != nil { return errors.Wrap(err, "fail to json.Unmarshal") } if !respInfo.Ok { return errors.Errorf("api error: [%d]%s", respInfo.ErrorCode, respInfo.Description) } return nil }