func (bot *Bot) Close() (bool, error) {
	v := urlLib.Values{}
	r, err := bot.Get("close", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
Close Use this method to close the bot instance before moving it from one local server to another. You need to delete the webhook before calling this method to ensure that the bot isn't launched again after server restart. The method will return error 429 in the first 10 minutes after the bot is launched. Returns True on success. Requires no parameters.
https://core.telegram.org/bots/api#close
package gotgbot
import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	urlLib "net/url"  
	"strconv"
)
type AddStickerToSetOpts struct {
	PngSticker InputFile
	TgsSticker InputFile
	MaskPosition MaskPosition
}
func (bot *Bot) AddStickerToSet(userId int64, name string, emojis string, opts *AddStickerToSetOpts) (bool, error) {
	v := urlLib.Values{}
	data := map[string]NamedReader{}
	if userId != 0 {
		v.Add("user_id", strconv.FormatInt(userId, 10))
	}
	v.Add("name", name)
	v.Add("emojis", emojis)
	if opts != nil {
		if opts.PngSticker != nil {
			switch m := opts.PngSticker.(type) {
			case string:
				v.Add("png_sticker", m)
			case NamedReader:
				v.Add("png_sticker", "attach://png_sticker")
				data["png_sticker"] = m
			case io.Reader:
				v.Add("png_sticker", "attach://png_sticker")
				data["png_sticker"] = NamedFile{File: m}
			case []byte:
				v.Add("png_sticker", "attach://png_sticker")
				data["png_sticker"] = NamedFile{File: bytes.NewReader(m)}
			default:
				return false, fmt.Errorf("unknown type for InputFile: %T", opts.PngSticker)
			}
		}
		if opts.TgsSticker != nil {
			switch m := opts.TgsSticker.(type) {
			case NamedReader:
				v.Add("tgs_sticker", "attach://tgs_sticker")
				data["tgs_sticker"] = m
			case io.Reader:
				v.Add("tgs_sticker", "attach://tgs_sticker")
				data["tgs_sticker"] = NamedFile{File: m}
			case []byte:
				v.Add("tgs_sticker", "attach://tgs_sticker")
				data["tgs_sticker"] = NamedFile{File: bytes.NewReader(m)}
			default:
				return false, fmt.Errorf("unknown type for InputFile: %T", opts.TgsSticker)
			}
		}
		bs, err := json.Marshal(opts.MaskPosition)
		if err != nil {
			return false, fmt.Errorf("failed to marshal field mask_position: %w", err)
		}
		v.Add("mask_position", string(bs))
	}
	r, err := bot.Post("addStickerToSet", v, data)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
type AnswerCallbackQueryOpts struct {
	Text string
	ShowAlert bool
	Url string
	CacheTime int64
}
func (bot *Bot) AnswerCallbackQuery(callbackQueryId string, opts *AnswerCallbackQueryOpts) (bool, error) {
	v := urlLib.Values{}
	v.Add("callback_query_id", callbackQueryId)
	if opts != nil {
		v.Add("text", opts.Text)
		v.Add("show_alert", strconv.FormatBool(opts.ShowAlert))
		v.Add("url", opts.Url)
		if opts.CacheTime != 0 {
			v.Add("cache_time", strconv.FormatInt(opts.CacheTime, 10))
		}
	}
	r, err := bot.Get("answerCallbackQuery", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
type AnswerInlineQueryOpts struct {
	CacheTime int64
	IsPersonal bool
	NextOffset string
	SwitchPmText string
	SwitchPmParameter string
}
func (bot *Bot) AnswerInlineQuery(inlineQueryId string, results []InlineQueryResult, opts *AnswerInlineQueryOpts) (bool, error) {
	v := urlLib.Values{}
	v.Add("inline_query_id", inlineQueryId)
	if results != nil {
		bs, err := json.Marshal(results)
		if err != nil {
			return false, fmt.Errorf("failed to marshal field results: %w", err)
		}
		v.Add("results", string(bs))
	}
	if opts != nil {
		if opts.CacheTime != 0 {
			v.Add("cache_time", strconv.FormatInt(opts.CacheTime, 10))
		}
		v.Add("is_personal", strconv.FormatBool(opts.IsPersonal))
		v.Add("next_offset", opts.NextOffset)
		v.Add("switch_pm_text", opts.SwitchPmText)
		v.Add("switch_pm_parameter", opts.SwitchPmParameter)
	}
	r, err := bot.Get("answerInlineQuery", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
type AnswerPreCheckoutQueryOpts struct {
	ErrorMessage string
}
func (bot *Bot) AnswerPreCheckoutQuery(preCheckoutQueryId string, ok bool, opts *AnswerPreCheckoutQueryOpts) (bool, error) {
	v := urlLib.Values{}
	v.Add("pre_checkout_query_id", preCheckoutQueryId)
	v.Add("ok", strconv.FormatBool(ok))
	if opts != nil {
		v.Add("error_message", opts.ErrorMessage)
	}
	r, err := bot.Get("answerPreCheckoutQuery", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
type AnswerShippingQueryOpts struct {
	ShippingOptions []ShippingOption
	ErrorMessage string
}
func (bot *Bot) AnswerShippingQuery(shippingQueryId string, ok bool, opts *AnswerShippingQueryOpts) (bool, error) {
	v := urlLib.Values{}
	v.Add("shipping_query_id", shippingQueryId)
	v.Add("ok", strconv.FormatBool(ok))
	if opts != nil {
		if opts.ShippingOptions != nil {
			bs, err := json.Marshal(opts.ShippingOptions)
			if err != nil {
				return false, fmt.Errorf("failed to marshal field shipping_options: %w", err)
			}
			v.Add("shipping_options", string(bs))
		}
		v.Add("error_message", opts.ErrorMessage)
	}
	r, err := bot.Get("answerShippingQuery", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}
type BanChatMemberOpts struct {
	UntilDate int64
	RevokeMessages bool
}
func (bot *Bot) BanChatMember(chatId int64, userId int64, opts *BanChatMemberOpts) (bool, error) {
	v := urlLib.Values{}
	if chatId != 0 {
		v.Add("chat_id", strconv.FormatInt(chatId, 10))
	}
	if userId != 0 {
		v.Add("user_id", strconv.FormatInt(userId, 10))
	}
	if opts != nil {
		if opts.UntilDate != 0 {
			v.Add("until_date", strconv.FormatInt(opts.UntilDate, 10))
		}
		v.Add("revoke_messages", strconv.FormatBool(opts.RevokeMessages))
	}
	r, err := bot.Get("banChatMember", v)
	if err != nil {
		return false, err
	}
	var b bool
	return b, json.Unmarshal(r, &b)
}