func (v Groups) EditLink(params GroupsEditLinkParams) (bool, error) {
	r, err := v.API.Request("groups.editLink", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
EditLink Allows to edit a link in the community.
package vkapi
import (
	"encoding/json"
	"github.com/stek29/vk"
)
type Groups struct {
	API vk.API
}
type GroupsIsMemberParams struct {
	GroupID string `url:"group_id"`
	UserID int `url:"user_id,omitempty"`
	UserIDs CSVIntSlice `url:"user_ids,omitempty"`
	Extended bool `url:"extended,omitempty"`
}
type GroupsIsMemberResponse interface {
	isGroupsIsMember()
}
type GroupsIsMemberResponseNormal vk.BoolInt
func (GroupsIsMemberResponseNormal) isGroupsIsMember() {}
type GroupsIsMemberResponseExtended struct {
	Member vk.BoolInt `json:"member,omitempty"`
	Invitation vk.BoolInt `json:"invitation,omitempty"`
	Request vk.BoolInt `json:"request,omitempty"`
}
func (GroupsIsMemberResponseExtended) isGroupsIsMember() {}
func (v Groups) IsMember(params GroupsIsMemberParams) (GroupsIsMemberResponse, error) {
	r, err := v.API.Request("groups.isMember", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsIsMemberResponse
	if params.Extended {
		var tmp GroupsIsMemberResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp GroupsIsMemberResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type GroupsGetByIDParams struct {
	GroupIDs CSVStringSlice `url:"group_ids,omitempty"`
	GroupID string `url:"group_id,omitempty"`
	Fields CSVStringSlice `url:"fields,omitempty"`
}
type GroupsGetByIDResponse []vk.Group
func (v Groups) GetByID(params GroupsGetByIDParams) (GroupsGetByIDResponse, error) {
	r, err := v.API.Request("groups.getById", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetByIDResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type GroupsGetParams struct {
	UserID int `url:"user_id,omitempty"`
	Extended bool `url:"extended,omitempty"`
	Filter CSVStringSlice `url:"filter,omitempty"`
	Fields CSVStringSlice `url:"fields,omitempty"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
}
type GroupsGetResponse interface {
	isGroupsGet()
}
type GroupsGetResponseNormal struct {
	Count int `json:"count,omitempty"`
	Items []int `json:"items,omitempty"`
}
func (GroupsGetResponseNormal) isGroupsGet() {}
type GroupsGetResponseExtended struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Group `json:"items,omitempty"`
}
func (GroupsGetResponseExtended) isGroupsGet() {}
func (v Groups) Get(params GroupsGetParams) (GroupsGetResponse, error) {
	r, err := v.API.Request("groups.get", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetResponse
	if params.Extended {
		var tmp GroupsGetResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp GroupsGetResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type GroupsGetMembersParams struct {
	GroupID string `url:"group_id,omitempty"`
	Sort string `url:"sort,omitempty"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
	Fields CSVStringSlice `url:"fields,omitempty"`
	Filter string `url:"filter,omitempty"`
}
type GroupsGetMembersResponse struct {
	Count int `json:"count,omitempty"`
	Items []int `json:"items,omitempty"`
}
func (v Groups) GetMembers(params GroupsGetMembersParams) (*GroupsGetMembersResponse, error) {
	r, err := v.API.Request("groups.getMembers", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetMembersResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsJoinParams struct {
	GroupID int `url:"group_id,omitempty"`
	NotSure string `url:"not_sure,omitempty"`
}
func (v Groups) Join(params GroupsJoinParams) (bool, error) {
	r, err := v.API.Request("groups.join", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsLeaveParams struct {
	GroupID int `url:"group_id"`
}
func (v Groups) Leave(params GroupsLeaveParams) (bool, error) {
	r, err := v.API.Request("groups.leave", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsSearchParams struct {
	Q string `url:"q"`
	Type string `url:"type,omitempty"`
	CountryID int `url:"country_id,omitempty"`
	CityID int `url:"city_id,omitempty"`
	Future bool `url:"future,omitempty"`
	Market bool `url:"market,omitempty"`
	Sort int `url:"sort,omitempty"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
}
type GroupsSearchResponse struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Group `json:"items,omitempty"`
}
func (v Groups) Search(params GroupsSearchParams) (*GroupsSearchResponse, error) {
	r, err := v.API.Request("groups.search", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsSearchResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsGetCatalogParams struct {
	CategoryID int `url:"category_id,omitempty"`
	SubcategoryID int `url:"subcategory_id,omitempty"`
}
type GroupsGetCatalogResponse struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Group `json:"items,omitempty"`
}
func (v Groups) GetCatalog(params GroupsGetCatalogParams) (*GroupsGetCatalogResponse, error) {
	r, err := v.API.Request("groups.getCatalog", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetCatalogResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsGetCatalogInfoParams struct {
	Extended bool `url:"extended,omitempty"`
	Subcategories bool `url:"subcategories,omitempty"`
}
type GroupsGetCatalogInfoResponse interface {
	isGroupsGetCatalogInfo()
}
type GroupsGetCatalogInfoResponseNormal struct {
	Enabled    int           `json:"enabled,omitempty"`
	Categories []vk.Category `json:"categories,omitempty"`
}
func (GroupsGetCatalogInfoResponseNormal) isGroupsGetCatalogInfo() {}
type GroupsGetCatalogInfoResponseExtended struct {
	Enabled    int           `json:"enabled,omitempty"`
	Categories []vk.Category `json:"categories,omitempty"`
}
func (GroupsGetCatalogInfoResponseExtended) isGroupsGetCatalogInfo() {}
func (v Groups) GetCatalogInfo(params GroupsGetCatalogInfoParams) (GroupsGetCatalogInfoResponse, error) {
	r, err := v.API.Request("groups.getCatalogInfo", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetCatalogInfoResponse
	if params.Extended {
		var tmp GroupsGetCatalogInfoResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp GroupsGetCatalogInfoResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type GroupsGetInvitesParams struct {
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
	Extended bool `url:"extended,omitempty"`
}
type GroupsGetInvitesResponse interface {
	isGroupsGetInvites()
}
type GroupsGetInvitesResponseNormal struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Group `json:"items,omitempty"`
}
func (GroupsGetInvitesResponseNormal) isGroupsGetInvites() {}
type GroupsGetInvitesResponseExtended struct {
	Count    int        `json:"count,omitempty"`
	Items    []vk.Group `json:"items,omitempty"`
	Profiles []vk.User  `json:"profiles,omitempty"`
}
func (GroupsGetInvitesResponseExtended) isGroupsGetInvites() {}
func (v Groups) GetInvites(params GroupsGetInvitesParams) (GroupsGetInvitesResponse, error) {
	r, err := v.API.Request("groups.getInvites", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetInvitesResponse
	if params.Extended {
		var tmp GroupsGetInvitesResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp GroupsGetInvitesResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type GroupsGetInvitedUsersParams struct {
	GroupID int `url:"group_id"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
	Fields CSVStringSlice `url:"fields,omitempty"`
	NameCase string `url:"name_case,omitempty"`
}
type GroupsGetInvitedUsersResponse struct {
	Count int       `json:"count,omitempty"`
	Items []vk.User `json:"items,omitempty"`
}
func (v Groups) GetInvitedUsers(params GroupsGetInvitedUsersParams) (*GroupsGetInvitedUsersResponse, error) {
	r, err := v.API.Request("groups.getInvitedUsers", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetInvitedUsersResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsGetBannedParams struct {
	GroupID int `url:"group_id"`
	Offset int `url:"offset,omitempty"`
	Count   int            `url:"count,omitempty"`
	Fields  CSVStringSlice `url:"fields,omitempty"`
	OwnerID int            `url:"owner_id,omitempty"`
}
type GroupsGetBannedResponse struct {
	Count int `json:"count,omitempty"`
	Items []struct {
		Type string `json:"type,omitempty"`
		Group vk.Group `json:"group,omitempty"`
		Profile vk.User `json:"profile,omitempty"`
		BanInfo struct {
			AdminID int `json:"admin_id,omitempty"`
			Date int `json:"date,omitempty"`
			Reason int `json:"reason,omitempty"`
			Comment string `json:"comment,omitempty"`
			EndDate int `json:"end_date,omitempty"`
		} `json:"ban_info,omitempty"`
	} `json:"items,omitempty"`
}
func (v Groups) GetBanned(params GroupsGetBannedParams) (*GroupsGetBannedResponse, error) {
	r, err := v.API.Request("groups.getBanned", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetBannedResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsCreateParams struct {
	Title string `url:"title"`
	Description string `url:"description,omitempty"`
	Type string `url:"type,omitempty"`
	PublicCategory int `url:"public_category,omitempty"`
	Subtype int `url:"subtype,omitempty"`
}
type GroupsCreateResponse vk.Group
func (v Groups) Create(params GroupsCreateParams) (*GroupsCreateResponse, error) {
	r, err := v.API.Request("groups.create", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsCreateResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsEditParams struct {
	GroupID int `url:"group_id"`
	Title string `url:"title,omitempty"`
	Description string `url:"description,omitempty"`
	ScreenName string `url:"screen_name,omitempty"`
	Access int `url:"access,omitempty"`
	Website string `url:"website,omitempty"`
	Subject string `url:"subject,omitempty"`
	Email string `url:"email,omitempty"`
	Phone string `url:"phone,omitempty"`
	Rss string `url:"rss,omitempty"`
	EventStartDate int `url:"event_start_date,omitempty"`
	EventFinishDate int `url:"event_finish_date,omitempty"`
	EventGroupID int `url:"event_group_id,omitempty"`
	PublicCategory int `url:"public_category,omitempty"`
	PublicSubcategory int `url:"public_subcategory,omitempty"`
	PublicDate string `url:"public_date,omitempty"`
	Wall int `url:"wall,omitempty"`
	Topics int `url:"topics,omitempty"`
	Photos int `url:"photos,omitempty"`
	Video int `url:"video,omitempty"`
	Audio int `url:"audio,omitempty"`
	Links bool `url:"links,omitempty"`
	Events bool `url:"events,omitempty"`
	Places bool `url:"places,omitempty"`
	Contacts bool `url:"contacts,omitempty"`
	Docs int `url:"docs,omitempty"`
	Wiki int `url:"wiki,omitempty"`
	Messages  bool `url:"messages,omitempty"`
	Articles  bool `url:"articles,omitempty"`
	Addresses bool `url:"addresses,omitempty"`
	AgeLimits int `url:"age_limits,omitempty"`
	Market bool `url:"market,omitempty"`
	MarketComments bool `url:"market_comments,omitempty"`
	MarketCountry CSVIntSlice `url:"market_country,omitempty"`
	MarketCity CSVIntSlice `url:"market_city,omitempty"`
	MarketCurrency int `url:"market_currency,omitempty"`
	MarketContact int `url:"market_contact,omitempty"`
	MarketWiki int `url:"market_wiki,omitempty"`
	ObsceneFilter bool `url:"obscene_filter,omitempty"`
	ObsceneStopwords bool `url:"obscene_stopwords,omitempty"`
	ObsceneWords     CSVStringSlice `url:"obscene_words,omitempty"`
	MainSection      int            `url:"main_section,omitempty"`
	SecondarySection int            `url:"secondary_section,omitempty"`
	Country int `url:"country,omitempty"`
	City int `url:"city,omitempty"`
}
func (v Groups) Edit(params GroupsEditParams) (bool, error) {
	r, err := v.API.Request("groups.edit", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsGetSettingsParams struct {
	GroupID int `url:"group_id"`
}
type GroupsGetSettingsResponse struct {
	Title string `json:"title,omitempty"`
	Description string `json:"description,omitempty"`
	Address string `json:"address,omitempty"`
	Wall int `json:"wall,omitempty"`
	Photos int `json:"photos,omitempty"`
	Video int `json:"video,omitempty"`
	Audio int `json:"audio,omitempty"`
	Docs int `json:"docs,omitempty"`
	Topics int `json:"topics,omitempty"`
	Wiki int `json:"wiki,omitempty"`
	ObsceneFilter vk.BoolInt `json:"obscene_filter,omitempty"`
	PublicCategory int `json:"public_category,omitempty"`
	PublicSubcategory  int           `json:"public_subcategory,omitempty"`
	PublicCategoryList []vk.Category `json:"public_category_list,omitempty"`
	ObsceneStopwords vk.BoolInt `json:"obscene_stopwords,omitempty"`
	ObsceneWords string `json:"obscene_words,omitempty"`
	Access int `json:"access,omitempty"`
	Subject     int                     `json:"subject,omitempty"`
	SubjectList []vk.BaseObjectWithName `json:"subject_list,omitempty"`
	Rss string `json:"rss,omitempty"`
	Website string `json:"website,omitempty"`
}
func (v Groups) GetSettings(params GroupsGetSettingsParams) (*GroupsGetSettingsResponse, error) {
	r, err := v.API.Request("groups.getSettings", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetSettingsResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsGetRequestsParams struct {
	GroupID int `url:"group_id"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
	Fields CSVStringSlice `url:"fields,omitempty"`
}
type GroupsGetRequestsResponse struct {
	Count int `json:"count,omitempty"`
	Items []int `json:"items,omitempty"`
}
func (v Groups) GetRequests(params GroupsGetRequestsParams) (*GroupsGetRequestsResponse, error) {
	r, err := v.API.Request("groups.getRequests", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsGetRequestsResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsEditManagerParams struct {
	GroupID int `url:"group_id"`
	UserID int `url:"user_id"`
	Role string `url:"role,omitempty"`
	IsContact bool `url:"is_contact,omitempty"`
	ContactPosition string `url:"contact_position,omitempty"`
	ContactPhone string `url:"contact_phone,omitempty"`
	ContactEmail string `url:"contact_email,omitempty"`
}
func (v Groups) EditManager(params GroupsEditManagerParams) (bool, error) {
	r, err := v.API.Request("groups.editManager", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsInviteParams struct {
	GroupID int `url:"group_id"`
	UserID int `url:"user_id"`
}
func (v Groups) Invite(params GroupsInviteParams) (bool, error) {
	r, err := v.API.Request("groups.invite", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsAddLinkParams struct {
	GroupID int `url:"group_id"`
	Link string `url:"link"`
	Text string `url:"text,omitempty"`
}
type GroupsAddLinkResponse struct {
	ID int `json:"id,omitempty"`
	URL string `json:"url,omitempty"`
	EditTitle vk.BoolInt `json:"edit_title,omitempty"`
	Desc string `json:"desc,omitempty"`
	ImageProcessing vk.BoolInt `json:"image_processing,omitempty"`
}
func (v Groups) AddLink(params GroupsAddLinkParams) (*GroupsAddLinkResponse, error) {
	r, err := v.API.Request("groups.addLink", params)
	if err != nil {
		return nil, err
	}
	var resp GroupsAddLinkResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type GroupsDeleteLinkParams struct {
	GroupID int `url:"group_id"`
	LinkID int `url:"link_id"`
}
func (v Groups) DeleteLink(params GroupsDeleteLinkParams) (bool, error) {
	r, err := v.API.Request("groups.deleteLink", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type GroupsEditLinkParams struct {
	GroupID int `url:"group_id"`
	LinkID int `url:"link_id"`
	Text string `url:"text,omitempty"`
}