361 lines
15 KiB
Go
361 lines
15 KiB
Go
package object // import "github.com/SevereCloud/vksdk/v2/object"
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/vmihailenco/msgpack/v5"
|
|
"github.com/vmihailenco/msgpack/v5/msgpcode"
|
|
)
|
|
|
|
// User relationship status.
|
|
const (
|
|
UserRelationNotSpecified = iota // not specified
|
|
UserRelationSingle // single
|
|
UserRelationInRelationship // in a relationship
|
|
UserRelationEngaged // engaged
|
|
UserRelationMarried // married
|
|
UserRelationComplicated // complicated
|
|
UserRelationActivelySearching // actively searching
|
|
UserRelationInLove // in love
|
|
UserRelationCivilUnion // in a civil union
|
|
)
|
|
|
|
// UsersUser struct.
|
|
type UsersUser struct {
|
|
ID int `json:"id"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
FirstNameNom string `json:"first_name_nom"`
|
|
FirstNameGen string `json:"first_name_gen"`
|
|
FirstNameDat string `json:"first_name_dat"`
|
|
FirstNameAcc string `json:"first_name_acc"`
|
|
FirstNameIns string `json:"first_name_ins"`
|
|
FirstNameAbl string `json:"first_name_abl"`
|
|
LastNameNom string `json:"last_name_nom"`
|
|
LastNameGen string `json:"last_name_gen"`
|
|
LastNameDat string `json:"last_name_dat"`
|
|
LastNameAcc string `json:"last_name_acc"`
|
|
LastNameIns string `json:"last_name_ins"`
|
|
LastNameAbl string `json:"last_name_abl"`
|
|
MaidenName string `json:"maiden_name"`
|
|
Sex int `json:"sex"`
|
|
Nickname string `json:"nickname"`
|
|
Domain string `json:"domain"`
|
|
ScreenName string `json:"screen_name"`
|
|
Bdate string `json:"bdate"`
|
|
City BaseObject `json:"city"`
|
|
Country BaseObject `json:"country"`
|
|
Photo50 string `json:"photo_50"`
|
|
Photo100 string `json:"photo_100"`
|
|
Photo200 string `json:"photo_200"`
|
|
PhotoMax string `json:"photo_max"`
|
|
Photo200Orig string `json:"photo_200_orig"`
|
|
Photo400Orig string `json:"photo_400_orig"`
|
|
PhotoMaxOrig string `json:"photo_max_orig"`
|
|
PhotoID string `json:"photo_id"`
|
|
FriendStatus int `json:"friend_status"` // see FriendStatus const
|
|
OnlineApp int `json:"online_app"`
|
|
Online BaseBoolInt `json:"online"`
|
|
OnlineMobile BaseBoolInt `json:"online_mobile"`
|
|
HasPhoto BaseBoolInt `json:"has_photo"`
|
|
HasMobile BaseBoolInt `json:"has_mobile"`
|
|
IsClosed BaseBoolInt `json:"is_closed"`
|
|
IsFriend BaseBoolInt `json:"is_friend"`
|
|
IsFavorite BaseBoolInt `json:"is_favorite"`
|
|
IsHiddenFromFeed BaseBoolInt `json:"is_hidden_from_feed"`
|
|
CanAccessClosed BaseBoolInt `json:"can_access_closed"`
|
|
CanBeInvitedGroup BaseBoolInt `json:"can_be_invited_group"`
|
|
CanPost BaseBoolInt `json:"can_post"`
|
|
CanSeeAllPosts BaseBoolInt `json:"can_see_all_posts"`
|
|
CanSeeAudio BaseBoolInt `json:"can_see_audio"`
|
|
CanWritePrivateMessage BaseBoolInt `json:"can_write_private_message"`
|
|
CanSendFriendRequest BaseBoolInt `json:"can_send_friend_request"`
|
|
CanCallFromGroup BaseBoolInt `json:"can_call_from_group"`
|
|
Verified BaseBoolInt `json:"verified"`
|
|
Trending BaseBoolInt `json:"trending"`
|
|
Blacklisted BaseBoolInt `json:"blacklisted"`
|
|
BlacklistedByMe BaseBoolInt `json:"blacklisted_by_me"`
|
|
// Deprecated: Facebook и Instagram запрещены в России, Meta признана экстремистской организацией...
|
|
Facebook string `json:"facebook"`
|
|
// Deprecated: Facebook и Instagram запрещены в России, Meta признана экстремистской организацией...
|
|
FacebookName string `json:"facebook_name"`
|
|
// Deprecated: Facebook и Instagram запрещены в России, Meta признана экстремистской организацией...
|
|
Instagram string `json:"instagram"`
|
|
Twitter string `json:"twitter"`
|
|
Site string `json:"site"`
|
|
Status string `json:"status"`
|
|
StatusAudio AudioAudio `json:"status_audio"`
|
|
LastSeen UsersLastSeen `json:"last_seen"`
|
|
CropPhoto UsersCropPhoto `json:"crop_photo"`
|
|
FollowersCount int `json:"followers_count"`
|
|
CommonCount int `json:"common_count"`
|
|
Occupation UsersOccupation `json:"occupation"`
|
|
Career []UsersCareer `json:"career"`
|
|
Military []UsersMilitary `json:"military"`
|
|
University int `json:"university"`
|
|
UniversityName string `json:"university_name"`
|
|
Faculty int `json:"faculty"`
|
|
FacultyName string `json:"faculty_name"`
|
|
Graduation int `json:"graduation"`
|
|
EducationForm string `json:"education_form"`
|
|
EducationStatus string `json:"education_status"`
|
|
HomeTown string `json:"home_town"`
|
|
Relation int `json:"relation"`
|
|
Personal UsersPersonal `json:"personal"`
|
|
Interests string `json:"interests"`
|
|
Music string `json:"music"`
|
|
Activities string `json:"activities"`
|
|
Movies string `json:"movies"`
|
|
Tv string `json:"tv"`
|
|
Books string `json:"books"`
|
|
Games string `json:"games"`
|
|
Universities []UsersUniversity `json:"universities"`
|
|
Schools []UsersSchool `json:"schools"`
|
|
About string `json:"about"`
|
|
Relatives []UsersRelative `json:"relatives"`
|
|
Quotes string `json:"quotes"`
|
|
Lists []int `json:"lists"`
|
|
Deactivated string `json:"deactivated"`
|
|
WallDefault string `json:"wall_default"`
|
|
Timezone int `json:"timezone"`
|
|
Exports UsersExports `json:"exports"`
|
|
Counters UsersUserCounters `json:"counters"`
|
|
MobilePhone string `json:"mobile_phone"`
|
|
HomePhone string `json:"home_phone"`
|
|
FoundWith int `json:"found_with"` // TODO: check it
|
|
OnlineInfo UsersOnlineInfo `json:"online_info"`
|
|
Mutual FriendsRequestsMutual `json:"mutual"`
|
|
TrackCode string `json:"track_code"`
|
|
RelationPartner UsersUserMin `json:"relation_partner"`
|
|
Type string `json:"type"`
|
|
Skype string `json:"skype"`
|
|
}
|
|
|
|
// ToMention return mention.
|
|
func (user UsersUser) ToMention() string {
|
|
return fmt.Sprintf("[id%d|%s %s]", user.ID, user.FirstName, user.LastName)
|
|
}
|
|
|
|
// UsersOnlineInfo struct.
|
|
type UsersOnlineInfo struct {
|
|
AppID int `json:"app_id"`
|
|
LastSeen int `json:"last_seen"`
|
|
Status string `json:"status"`
|
|
Visible BaseBoolInt `json:"visible"`
|
|
IsOnline BaseBoolInt `json:"is_online"`
|
|
IsMobile BaseBoolInt `json:"is_mobile"`
|
|
}
|
|
|
|
// UsersUserMin struct.
|
|
type UsersUserMin struct {
|
|
Deactivated string `json:"deactivated"` // Returns if a profile is deleted or blocked
|
|
FirstName string `json:"first_name"` // User first name
|
|
Hidden int `json:"hidden"` // Returns if a profile is hidden.
|
|
ID int `json:"id"` // User ID
|
|
LastName string `json:"last_name"` // User last name
|
|
}
|
|
|
|
// ToMention return mention.
|
|
func (user UsersUserMin) ToMention() string {
|
|
return fmt.Sprintf("[id%d|%s %s]", user.ID, user.FirstName, user.LastName)
|
|
}
|
|
|
|
// UsersCareer struct.
|
|
type UsersCareer struct {
|
|
CityID int `json:"city_id"` // City ID
|
|
CityName string `json:"city_name"` // City name
|
|
Company string `json:"company"` // Company name
|
|
CountryID int `json:"country_id"` // Country ID
|
|
From int `json:"from"` // From year
|
|
GroupID int `json:"group_id"` // Community ID
|
|
ID int `json:"id"` // Career ID
|
|
Position string `json:"position"` // Position
|
|
Until int `json:"until"` // Till year
|
|
}
|
|
|
|
// UsersCropPhoto struct.
|
|
type UsersCropPhoto struct {
|
|
Crop UsersCropPhotoCrop `json:"crop"`
|
|
Photo PhotosPhoto `json:"photo"`
|
|
Rect UsersCropPhotoRect `json:"rect"`
|
|
}
|
|
|
|
// UsersCropPhotoCrop struct.
|
|
type UsersCropPhotoCrop struct {
|
|
X float64 `json:"x"` // Coordinate X of the left upper corner
|
|
X2 float64 `json:"x2"` // Coordinate X of the right lower corner
|
|
Y float64 `json:"y"` // Coordinate Y of the left upper corner
|
|
Y2 float64 `json:"y2"` // Coordinate Y of the right lower corner
|
|
}
|
|
|
|
// UsersCropPhotoRect struct.
|
|
type UsersCropPhotoRect struct {
|
|
X float64 `json:"x"` // Coordinate X of the left upper corner
|
|
X2 float64 `json:"x2"` // Coordinate X of the right lower corner
|
|
Y float64 `json:"y"` // Coordinate Y of the left upper corner
|
|
Y2 float64 `json:"y2"` // Coordinate Y of the right lower corner
|
|
}
|
|
|
|
// UsersExports struct.
|
|
type UsersExports struct {
|
|
Facebook int `json:"facebook"`
|
|
Livejournal int `json:"livejournal"`
|
|
Twitter int `json:"twitter"`
|
|
}
|
|
|
|
// UsersLastSeen struct.
|
|
type UsersLastSeen struct {
|
|
Platform int `json:"platform"` // Type of the platform that used for the last authorization
|
|
Time int `json:"time"` // Last visit date (in Unix time)
|
|
}
|
|
|
|
// UsersMilitary struct.
|
|
type UsersMilitary struct {
|
|
CountryID int `json:"country_id"` // Country ID
|
|
From int `json:"from"` // From year
|
|
ID int `json:"id"` // Military ID
|
|
Unit string `json:"unit"` // Unit name
|
|
UnitID int `json:"unit_id"` // Unit ID
|
|
Until int `json:"until"` // Till year
|
|
}
|
|
|
|
// UsersOccupation struct.
|
|
type UsersOccupation struct {
|
|
// BUG(VK): UsersOccupation.ID is float https://vk.com/bug136108
|
|
ID float64 `json:"id"` // ID of school, university, company group
|
|
Name string `json:"name"` // Name of occupation
|
|
Type string `json:"type"` // Type of occupation
|
|
}
|
|
|
|
// UsersPersonal struct.
|
|
type UsersPersonal struct {
|
|
Alcohol int `json:"alcohol"` // User's views on alcohol
|
|
InspiredBy string `json:"inspired_by"` // User's inspired by
|
|
Langs []string `json:"langs"`
|
|
LifeMain int `json:"life_main"` // User's personal priority in life
|
|
PeopleMain int `json:"people_main"` // User's personal priority in people
|
|
Political int `json:"political"` // User's political views
|
|
Religion string `json:"religion"` // User's religion
|
|
Smoking int `json:"smoking"` // User's views on smoking
|
|
ReligionID int `json:"religion_id"`
|
|
}
|
|
|
|
// UnmarshalJSON UsersPersonal.
|
|
//
|
|
// BUG(VK): UsersPersonal return [].
|
|
func (personal *UsersPersonal) UnmarshalJSON(data []byte) error {
|
|
if bytes.Equal(data, []byte("[]")) {
|
|
return nil
|
|
}
|
|
|
|
type renamedUsersPersonal UsersPersonal
|
|
|
|
var r renamedUsersPersonal
|
|
|
|
err := json.Unmarshal(data, &r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*personal = UsersPersonal(r)
|
|
|
|
return nil
|
|
}
|
|
|
|
// DecodeMsgpack UsersPersonal.
|
|
//
|
|
// BUG(VK): UsersPersonal return [].
|
|
func (personal *UsersPersonal) DecodeMsgpack(dec *msgpack.Decoder) error {
|
|
data, err := dec.DecodeRaw()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if bytes.Equal(data, []byte{msgpcode.FixedArrayLow}) {
|
|
return nil
|
|
}
|
|
|
|
type renamedUsersPersonal UsersPersonal
|
|
|
|
var r renamedUsersPersonal
|
|
|
|
d := msgpack.NewDecoder(bytes.NewReader(data))
|
|
d.SetCustomStructTag("json")
|
|
|
|
err = d.Decode(&r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*personal = UsersPersonal(r)
|
|
|
|
return nil
|
|
}
|
|
|
|
// UsersRelative struct.
|
|
type UsersRelative struct {
|
|
BirthDate string `json:"birth_date"` // Date of child birthday (format dd.mm.yyyy)
|
|
ID int `json:"id"` // Relative ID
|
|
Name string `json:"name"` // Name of relative
|
|
Type string `json:"type"` // Relative type
|
|
}
|
|
|
|
// UsersSchool struct.
|
|
type UsersSchool struct {
|
|
City int `json:"city"` // City ID
|
|
Class string `json:"class"` // School class letter
|
|
Country int `json:"country"` // Country ID
|
|
ID string `json:"id"` // School ID
|
|
Name string `json:"name"` // School name
|
|
Type int `json:"type"` // School type ID
|
|
TypeStr string `json:"type_str"` // School type name
|
|
YearFrom int `json:"year_from"` // Year the user started to study
|
|
YearGraduated int `json:"year_graduated"` // Graduation year
|
|
YearTo int `json:"year_to"` // Year the user finished to study
|
|
Speciality string `json:"speciality,omitempty"`
|
|
}
|
|
|
|
// UsersUniversity struct.
|
|
type UsersUniversity struct {
|
|
Chair int `json:"chair"` // Chair ID
|
|
ChairName string `json:"chair_name"` // Chair name
|
|
City int `json:"city"` // City ID
|
|
Country int `json:"country"` // Country ID
|
|
EducationForm string `json:"education_form"` // Education form
|
|
EducationStatus string `json:"education_status"` // Education status
|
|
Faculty int `json:"faculty"` // Faculty ID
|
|
FacultyName string `json:"faculty_name"` // Faculty name
|
|
Graduation int `json:"graduation"` // Graduation year
|
|
ID int `json:"id"` // University ID
|
|
Name string `json:"name"` // University name
|
|
}
|
|
|
|
// UsersUserCounters struct.
|
|
type UsersUserCounters struct {
|
|
Albums int `json:"albums"` // Albums number
|
|
Audios int `json:"audios"` // Audios number
|
|
Followers int `json:"followers"` // Followers number
|
|
Friends int `json:"friends"` // Friends number
|
|
Gifts int `json:"gifts"` // Gifts number
|
|
Groups int `json:"groups"` // Communities number
|
|
Notes int `json:"notes"` // Notes number
|
|
OnlineFriends int `json:"online_friends"` // Online friends number
|
|
Pages int `json:"pages"` // Public pages number
|
|
Photos int `json:"photos"` // Photos number
|
|
Subscriptions int `json:"subscriptions"` // Subscriptions number
|
|
UserPhotos int `json:"user_photos"` // Number of photos with user
|
|
UserVideos int `json:"user_videos"` // Number of videos with user
|
|
Videos int `json:"videos"` // Videos number
|
|
MutualFriends int `json:"mutual_friends"`
|
|
}
|
|
|
|
// UsersUserLim struct.
|
|
type UsersUserLim struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
NameGen string `json:"name_gen"`
|
|
Photo string `json:"photo"`
|
|
}
|