matterbridge/vendor/github.com/SevereCloud/vksdk/v2/object/object.go

637 lines
18 KiB
Go
Raw Permalink Normal View History

/*
Package object contains objects for VK.
See more https://dev.vk.com/ru/reference/objects
*/
package object // import "github.com/SevereCloud/vksdk/v2/object"
import (
"bytes"
"encoding/json"
"reflect"
"github.com/vmihailenco/msgpack/v5"
)
// Attachment interface.
type Attachment interface {
ToAttachment() string
}
// JSONObject interface.
type JSONObject interface {
ToJSON() string
}
// BaseBoolInt type.
type BaseBoolInt bool
// UnmarshalJSON func.
func (b *BaseBoolInt) UnmarshalJSON(data []byte) (err error) {
switch {
case bytes.Equal(data, []byte("1")), bytes.Equal(data, []byte("true")):
*b = true
case bytes.Equal(data, []byte("0")), bytes.Equal(data, []byte("false")):
*b = false
default:
// return json error
err = &json.UnmarshalTypeError{
Value: string(data),
Type: reflect.TypeOf((*BaseBoolInt)(nil)),
}
}
return
}
// DecodeMsgpack func.
func (b *BaseBoolInt) DecodeMsgpack(dec *msgpack.Decoder) (err error) {
data, err := dec.DecodeRaw()
if err != nil {
return err
}
var (
valueInt int
valueBool bool
)
switch {
case msgpack.Unmarshal(data, &valueBool) == nil:
*b = BaseBoolInt(valueBool)
case msgpack.Unmarshal(data, &valueInt) == nil:
if valueInt == 1 {
*b = true
break
}
if valueInt == 0 {
*b = false
break
}
fallthrough
default:
// return msgpack error
err = &json.UnmarshalTypeError{
Value: string(data),
Type: reflect.TypeOf((*BaseBoolInt)(nil)),
}
}
return err
}
// BaseCountry struct.
type BaseCountry struct {
ID int `json:"id"`
Title string `json:"title"`
}
// BaseObject struct.
type BaseObject struct {
ID int `json:"id"`
Title string `json:"title"`
}
// BaseObjectCount struct.
type BaseObjectCount struct {
Count int `json:"count"`
}
// BaseObjectWithName struct.
type BaseObjectWithName struct {
ID int `json:"id"`
Name string `json:"name"`
}
// BaseRequestParam struct.
type BaseRequestParam struct {
Key string `json:"key"`
Value string `json:"value"`
}
// BaseSex const.
const (
SexUnknown = iota
SexFemale
SexMale
)
// LongPollResponse struct.
type LongPollResponse struct {
Ts int `json:"ts"`
Updates [][]interface{} `json:"updates"`
Failed int `json:"failed"`
}
// BaseCommentsInfo struct.
type BaseCommentsInfo struct {
Count int `json:"count"`
CanPost BaseBoolInt `json:"can_post"`
GroupsCanPost BaseBoolInt `json:"groups_can_post"`
CanClose BaseBoolInt `json:"can_close"`
CanOpen BaseBoolInt `json:"can_open"`
}
// BaseGeo struct.
type BaseGeo struct {
Coordinates string `json:"coordinates"`
Place BasePlace `json:"place"`
Showmap int `json:"showmap"`
Type string `json:"type"`
}
// BaseMessageGeo struct.
type BaseMessageGeo struct {
Coordinates BaseGeoCoordinates `json:"coordinates"`
Place BasePlace `json:"place"`
Showmap int `json:"showmap"`
Type string `json:"type"`
}
// BaseGeoCoordinates struct.
type BaseGeoCoordinates struct {
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
}
// BaseImage struct.
type BaseImage struct {
Height float64 `json:"height"`
URL string `json:"url"`
Width float64 `json:"width"`
Type string `json:"type"`
}
// UnmarshalJSON is required to support images with `src` field.
func (obj *BaseImage) UnmarshalJSON(data []byte) (err error) {
type renamedBaseImage struct {
Height float64 `json:"height"`
URL string `json:"url"`
Src string `json:"src"`
Width float64 `json:"width"`
Type string `json:"type"`
}
var renamedObj renamedBaseImage
err = json.Unmarshal(data, &renamedObj)
obj.Height = renamedObj.Height
obj.Width = renamedObj.Width
obj.Type = renamedObj.Type
if renamedObj.Src == "" {
obj.URL = renamedObj.URL
} else {
obj.URL = renamedObj.Src
}
return err
}
// DecodeMsgpack is required to support images with `src` field.
func (obj *BaseImage) DecodeMsgpack(dec *msgpack.Decoder) (err error) {
type renamedBaseImage struct {
Height float64 `msgpack:"height"`
URL string `msgpack:"url"`
Src string `msgpack:"src"`
Width float64 `msgpack:"width"`
Type string `msgpack:"type"`
}
var renamedObj renamedBaseImage
err = dec.Decode(&renamedObj)
obj.Height = renamedObj.Height
obj.Width = renamedObj.Width
obj.Type = renamedObj.Type
if renamedObj.Src == "" {
obj.URL = renamedObj.URL
} else {
obj.URL = renamedObj.Src
}
return err
}
// BaseLikes struct.
type BaseLikes struct {
UserLikes BaseBoolInt `json:"user_likes"` // Information whether current user likes
Count int `json:"count"` // Likes number
}
// BaseLikesInfo struct.
type BaseLikesInfo struct {
CanLike BaseBoolInt `json:"can_like"` // Information whether current user can like the post
CanPublish BaseBoolInt `json:"can_publish"` // Information whether current user can repost
UserLikes BaseBoolInt `json:"user_likes"` // Information whether current uer has liked the post
Count int `json:"count"` // Likes number
}
// BaseLink struct.
type BaseLink struct {
Application BaseLinkApplication `json:"application"`
Button BaseLinkButton `json:"button"`
ButtonText string `json:"button_text"`
ButtonAction string `json:"button_action"`
Caption string `json:"caption"`
Description string `json:"description"`
Photo PhotosPhoto `json:"photo"`
Video VideoVideo `json:"video"`
PreviewPage string `json:"preview_page"`
PreviewURL string `json:"preview_url"`
Product BaseLinkProduct `json:"product"`
Rating BaseLinkRating `json:"rating"`
Title string `json:"title"`
Target string `json:"target"`
URL string `json:"url"`
IsFavorite BaseBoolInt `json:"is_favorite"`
}
// BaseLinkApplication struct.
type BaseLinkApplication struct {
AppID float64 `json:"app_id"`
Store BaseLinkApplicationStore `json:"store"`
}
// BaseLinkApplicationStore struct.
type BaseLinkApplicationStore struct {
ID float64 `json:"id"`
Name string `json:"name"`
}
// BaseLinkButton struct.
type BaseLinkButton struct {
Action BaseLinkButtonAction `json:"action"`
Title string `json:"title"`
}
// BaseLinkButtonAction struct.
type BaseLinkButtonAction struct {
Type string `json:"type"`
URL string `json:"url"`
}
// BaseLinkProduct struct.
type BaseLinkProduct struct {
Price MarketPrice `json:"price"`
Merchant string `json:"merchant"`
OrdersCount int `json:"orders_count"`
}
// BaseLinkRating struct.
type BaseLinkRating struct {
ReviewsCount json.Number `json:"reviews_count"`
Stars float64 `json:"stars"`
}
// BasePlace struct.
type BasePlace struct {
Address string `json:"address"`
Checkins int `json:"checkins"`
City interface{} `json:"city"` // BUG(VK): https://github.com/VKCOM/vk-api-schema/issues/143
Country interface{} `json:"country"`
Created int `json:"created"`
ID int `json:"id"`
Icon string `json:"icon"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
Title string `json:"title"`
Type string `json:"type"`
IsDeleted BaseBoolInt `json:"is_deleted"`
TotalCheckins int `json:"total_checkins"`
Updated int `json:"updated"`
CategoryObject BaseCategoryObject `json:"category_object"`
}
// BaseCategoryObject struct.
type BaseCategoryObject struct {
ID int `json:"id"`
Title string `json:"title"`
Icons []BaseImage `json:"icons"`
}
// BaseRepostsInfo struct.
type BaseRepostsInfo struct {
Count int `json:"count"`
WallCount int `json:"wall_count"`
MailCount int `json:"mail_count"`
UserReposted int `json:"user_reposted"`
}
// BaseSticker struct.
type BaseSticker struct {
Images []BaseImage `json:"images"`
ImagesWithBackground []BaseImage `json:"images_with_background"`
ProductID int `json:"product_id"`
StickerID int `json:"sticker_id"`
2021-06-16 12:00:49 -07:00
IsAllowed bool `json:"is_allowed"`
AnimationURL string `json:"animation_url"`
}
// MaxSize return the largest BaseSticker.
func (sticker BaseSticker) MaxSize() (maxImageSize BaseImage) {
var max float64
for _, imageSize := range sticker.Images {
size := imageSize.Height * imageSize.Width
if size > max {
max = size
maxImageSize = imageSize
}
}
return
}
// MinSize return the smallest BaseSticker.
func (sticker BaseSticker) MinSize() (minImageSize BaseImage) {
var min float64
for _, imageSize := range sticker.Images {
size := imageSize.Height * imageSize.Width
if size < min || min == 0 {
min = size
minImageSize = imageSize
}
}
return
}
// MaxSizeBackground return the largest BaseSticker with background.
func (sticker BaseSticker) MaxSizeBackground() (maxImageSize BaseImage) {
var max float64
for _, imageSize := range sticker.ImagesWithBackground {
size := imageSize.Height * imageSize.Width
if size > max {
max = size
maxImageSize = imageSize
}
}
return
}
// MinSizeBackground return the smallest BaseSticker with background.
func (sticker BaseSticker) MinSizeBackground() (minImageSize BaseImage) {
var min float64
for _, imageSize := range sticker.ImagesWithBackground {
size := imageSize.Height * imageSize.Width
if size < min || min == 0 {
min = size
minImageSize = imageSize
}
}
return
}
// BaseUserID struct.
type BaseUserID struct {
UserID int `json:"user_id"`
}
// PrivacyCategory type.
type PrivacyCategory string
// Possible values.
const (
PrivacyAll PrivacyCategory = "all"
PrivacyOnlyMe PrivacyCategory = "only_me"
PrivacyFriends PrivacyCategory = "friends"
PrivacyFriendsOfFriends PrivacyCategory = "friends_of_friends"
)
// Privacy struct.
type Privacy struct {
Category PrivacyCategory `json:"category,omitempty"`
Lists struct {
Allowed []int `json:"allowed"`
Excluded []int `json:"excluded"`
} `json:"lists,omitempty"`
Owners struct {
Allowed []int `json:"allowed"`
Excluded []int `json:"excluded"`
} `json:"owners,omitempty"`
}
// EventsEventAttach struct.
type EventsEventAttach struct {
Address string `json:"address,omitempty"` // address of event
ButtonText string `json:"button_text"` // text of attach
Friends []int `json:"friends"` // array of friends ids
ID int `json:"id"` // event ID
IsFavorite BaseBoolInt `json:"is_favorite"` // is favorite
MemberStatus int `json:"member_status,omitempty"` // Current user's member status
Text string `json:"text"` // text of attach
Time int `json:"time,omitempty"` // event start time
}
// OauthError struct.
type OauthError struct {
Error string `json:"error"`
ErrorDescription string `json:"error_description"`
RedirectURI string `json:"redirect_uri"`
}
// Article struct.
type Article struct {
ID int `json:"id"`
OwnerID int `json:"owner_id"`
OwnerName string `json:"owner_name"`
OwnerPhoto string `json:"owner_photo"`
State string `json:"state"`
CanReport BaseBoolInt `json:"can_report"`
IsFavorite BaseBoolInt `json:"is_favorite"`
NoFooter BaseBoolInt `json:"no_footer"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Views int `json:"views"`
Shares int `json:"shares"`
URL string `json:"url"`
ViewURL string `json:"view_url"`
AccessKey string `json:"access_key"`
PublishedDate int `json:"published_date"`
Photo PhotosPhoto `json:"photo"`
}
// ExtendedResponse struct.
type ExtendedResponse struct {
Profiles []UsersUser `json:"profiles,omitempty"`
Groups []GroupsGroup `json:"groups,omitempty"`
}
// ClientInfo struct.
type ClientInfo struct {
ButtonActions []string `json:"button_actions"`
Keyboard BaseBoolInt `json:"keyboard"`
InlineKeyboard BaseBoolInt `json:"inline_keyboard"`
Carousel BaseBoolInt `json:"carousel"`
LangID int `json:"lang_id"`
}
// Language code.
const (
LangRU = 0 // Русский
LangUK = 1 // Українська
LangBE = 2 // Беларуская (тарашкевiца)
LangEN = 3 // English
LangES = 4 // Español
LangFI = 5 // Suomi
LangDE = 6 // Deutsch
LangIT = 7 // Italiano
LangBG = 8 // Български
LangHR = 9 // Hrvatski
LangHU = 10 // Magyar
LangSR = 11 // Српски
LangPT = 12 // Português
LangEL = 14 // Ελληνικά
LangPL = 15 // Polski
LangFR = 16 // Français
LangKO = 17 // 한국어
LangZH = 18 // 汉语
LangLT = 19 // Lietuvių
LangJA = 20 // 日本語
LangCS = 21 // Čeština
LangET = 22 // Eesti
LangTT = 50 // Татарча
LangBA = 51 // Башҡортса
LangCV = 52 // Чăвашла
LangSK = 53 // Slovenčina
LangRO = 54 // Română
LangNO = 55 // Norsk
LangLV = 56 // Latviešu
LangAZ = 57 // Azərbaycan dili
LangHY = 58 // Հայերեն
LangSQ = 59 // Shqip
LangSV = 60 // Svenska
LangNL = 61 // Nederlands
LangTK = 62 // Türkmen
LangKA = 63 // ქართული
LangDA = 64 // Dansk
LangUZ = 65 // Ozbek
LangMO = 66 // Moldovenească
LangBUA = 67 // Буряад
LangTH = 68 // ภาษาไทย
LangID = 69 // Bahasa Indonesia
LangTG = 70 // Тоҷикӣ
LangSL = 71 // Slovenščina
LangBS = 72 // Bosanski
LangPTBR = 73 // Português brasileiro
LangFA = 74 // فارسی
LangVI = 75 // Tiếng Việt
LangHI = 76 // हिन्दी
LangSI = 77 // සිංහල
LangBN = 78 // বাংলা
LangTL = 79 // Tagalog
LangMN = 80 // Монгол
LangMY = 81 // ဗမာစာ
LangTR = 82 // Türkçe
LangNE = 83 // नेपाली
LangUR = 85 // اردو
LangKY = 87 // Кыргыз тили
LangPA = 90 // پنجابی
LangOS = 91 // Ирон
LangKN = 94 // ಕನ್ನಡ
LangSW = 95 // Kiswahili
LangKK = 97 // Қазақша
LangAR = 98 // العربية
LangHE = 99 // עברית
LangPreRevolutionary = 100 // Дореволюцiонный
LangMYV = 101 // Эрзянь кель
LangKDB = 102 // Адыгэбзэ
LangSAH = 105 // Саха тыла
LangADY = 106 // Адыгабзэ
LangUDM = 107 // Удмурт
LangCHM = 108 // Марий йылме
LangBE2 = 114 // Беларуская
LangLEZ = 118 // Лезги чІал
LangTW = 119 // 臺灣話
LangKUM = 236 // Къумукъ тил
LangMVL = 270 // Mirandés
LangSLA = 298 // Русинськый
LangKRL = 379 // Karjalan kieli
LangTYV = 344 // Тыва дыл
LangXAL = 357 // Хальмг келн
LangTLY = 373 // Tolışə zıvon
LangKV = 375 // Коми кыв
LangUKClassic = 452 // Українська (клясична)
LangUKGalitska = 454 // Українська (Галицка)
LangKAB = 457 // Taqbaylit
LangEO = 555 // Esperanto
LangLA = 666 // Lingua Latina
LangSoviet = 777 // Советский
)
// Button action type.
const (
// A button that sends a message with text specified in the label.
ButtonText = "text"
// Opens the VK Pay window with predefined parameters. The button is called
// “Pay with VK Pay” (VK Pay is displayed as a logo). This button always
// stretches to the whole keyboard width.
ButtonVKPay = "vkpay"
// Opens a specified VK Apps app. This button always stretches to the whole
// keyboard width.
ButtonVKApp = "open_app"
// Sends the location to the chat. This button always stretches to the
// whole keyboard width.
ButtonLocation = "location"
// Opens the specified link.
ButtonOpenLink = "open_link"
// Allows, without sending a message from the user, to receive a
// notification about pressing the button and perform the necessary action.
ButtonCallback = "callback"
)
// Button color. This parameter is used only for buttons with the text and callback types.
const (
Primary = "primary" // Blue button, indicates the main action. #5181B8
ButtonBlue
Secondary = "secondary" // Default white button. #FFFFFF
ButtonWhite
Negative = "negative" // Dangerous or negative action (cancel, delete etc.) #E64646
ButtonRed
Positive = "positive" // Accept, agree. #4BB34B
ButtonGreen
)
// Platform content creation platform.
type Platform int
// Possible values.
const (
_ Platform = iota
PlatformMobile // mobile web version
PlatformIPhone // iPhone
PlatformIPad // iPad
PlatformAndroid // Android
PlatformWindowsPhone // Windows Phone
PlatformWindows // Windows 8
PlatformFull // full web version
PlatformOther // other apps
)
// Conversations types.
const (
PeerUser = "user"
PeerChat = "chat"
PeerGroup = "group"
PeerEmail = "email"
)