package telegram import ( "context" "encoding/json" "fmt" "io" "net/http" "net/url" ) 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 fmt.Errorf("fail to http.PostForm: %s", err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("fail to ioutil.ReadAll: %s", err) } 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 fmt.Errorf("fail to json.Unmarshal: %s", err) } if !respInfo.Ok { return fmt.Errorf("api error: [%d]%s", respInfo.ErrorCode, respInfo.Description) } return nil }