summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/SevereCloud/vksdk/v2/object
diff options
context:
space:
mode:
authorIvanik <ivan170102@gmail.com>2021-01-29 04:25:14 +0500
committerGitHub <noreply@github.com>2021-01-29 00:25:14 +0100
commit8764be74616bde87bbbf6c32901cd9f43264d1e0 (patch)
tree88902ba17d6a6d245cadb7e0b277bee7ef424f99 /vendor/github.com/SevereCloud/vksdk/v2/object
parent5dd15ef8e716c65accb6cd021095c0e19913d55f (diff)
downloadmatterbridge-msglm-8764be74616bde87bbbf6c32901cd9f43264d1e0.tar.gz
matterbridge-msglm-8764be74616bde87bbbf6c32901cd9f43264d1e0.tar.bz2
matterbridge-msglm-8764be74616bde87bbbf6c32901cd9f43264d1e0.zip
Add vk bridge (#1372)
* Add vk bridge * Vk bridge attachments * Vk bridge forwarded messages * Vk bridge sample config and code cleanup * Vk bridge add vendor * Vk bridge message edit * Vk bridge: fix fetching names of other bots * Vk bridge: code cleanup * Vk bridge: fix shadows declaration * Vk bridge: remove UseFileURL
Diffstat (limited to 'vendor/github.com/SevereCloud/vksdk/v2/object')
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/account.go142
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/ads.go321
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/apps.go101
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/appwidgets.go20
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/audio.go67
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/board.go40
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/database.go50
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/docs.go117
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/donut.go9
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/fave.go41
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/friends.go63
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/gifts.go34
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/groups.go807
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/leadforms.go44
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/leads.go55
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/market.go244
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/messages.go756
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/newsfeed.go187
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/notes.go37
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/notifications.go42
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/object.go566
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/orders.go45
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/pages.go85
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/photos.go339
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/podcasts.go45
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/polls.go101
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/prettycards.go14
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/search.go11
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/secure.go33
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/stats.go77
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/stories.go335
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/users.go299
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/utils.go93
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/video.go277
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/wall.go257
-rw-r--r--vendor/github.com/SevereCloud/vksdk/v2/object/widgets.go68
36 files changed, 5822 insertions, 0 deletions
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/account.go b/vendor/github.com/SevereCloud/vksdk/v2/object/account.go
new file mode 100644
index 00000000..cac22def
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/account.go
@@ -0,0 +1,142 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// AccountNameRequest struct.
+type AccountNameRequest struct {
+ FirstName string `json:"first_name"` // First name in request
+ ID int `json:"id"` // Request ID needed to cancel the request
+ LastName string `json:"last_name"` // Last name in request
+ Status string `json:"status"`
+}
+
+// AccountPushConversations struct.
+type AccountPushConversations struct {
+ Count int `json:"count"` // Items count
+ Items []*AccountPushConversationsItem `json:"items"`
+}
+
+// AccountPushConversationsItem struct.
+type AccountPushConversationsItem struct {
+ DisabledUntil int `json:"disabled_until"` // Time until that notifications are disabled in seconds
+ PeerID int `json:"peer_id"` // Peer ID
+ Sound int `json:"sound"` // Information whether the sound are enabled
+}
+
+// AccountPushParams struct.
+type AccountPushParams struct {
+ AppRequest []string `json:"app_request"`
+ Birthday []string `json:"birthday"`
+ Chat []string `json:"chat"`
+ Comment []string `json:"comment"`
+ EventSoon []string `json:"event_soon"`
+ Friend []string `json:"friend"`
+ FriendAccepted []string `json:"friend_accepted"`
+ FriendFound []string `json:"friend_found"`
+ GroupAccepted []string `json:"group_accepted"`
+ GroupInvite []string `json:"group_invite"`
+ Like []string `json:"like"`
+ Mention []string `json:"mention"`
+ Msg []string `json:"msg"`
+ NewPost []string `json:"new_post"`
+ PhotosTag []string `json:"photos_tag"`
+ Reply []string `json:"reply"`
+ Repost []string `json:"repost"`
+ SdkOpen []string `json:"sdk_open"`
+ WallPost []string `json:"wall_post"`
+ WallPublish []string `json:"wall_publish"`
+}
+
+// AccountOffer struct.
+type AccountOffer struct {
+ Description string `json:"description"` // Offer description
+ ID int `json:"id"` // Offer ID
+ Img string `json:"img"` // URL of the preview image
+ Instruction string `json:"instruction"` // Instruction how to process the offer
+ InstructionHTML string `json:"instruction_html"` // Instruction how to process the offer (HTML format)
+ Price int `json:"price"` // Offer price
+ ShortDescription string `json:"short_description"` // Offer short description
+ Tag string `json:"tag"` // Offer tag
+ Title string `json:"title"` // Offer title
+}
+
+// AccountAccountCounters struct.
+type AccountAccountCounters struct {
+ AppRequests int `json:"app_requests"` // New app requests number
+ Events int `json:"events"` // New events number
+ Friends int `json:"friends"` // New friends requests number
+ FriendsRecommendations int `json:"friends_recommendations"` // New friends recommendations number
+ FriendsSuggestions int `json:"friends_suggestions"` // New friends suggestions number
+ Gifts int `json:"gifts"` // New gifts number
+ Groups int `json:"groups"` // New groups number
+ Messages int `json:"messages"` // New messages number
+ Notifications int `json:"notifications"` // New notifications number
+ Photos int `json:"photos"` // New photo tags number
+ SDK int `json:"sdk"` // New SDK number
+ MenuDiscoverBadge int `json:"menu_discover_badge"` // New menu discover badge number
+ MenuClipsBadge int `json:"menu_clips_badge"` // New menu clips badge number
+ Videos int `json:"videos"` // New video tags number
+ Faves int `json:"faves"` // New faves number
+}
+
+// AccountInfo struct.
+type AccountInfo struct {
+
+ // Country code.
+ Country string `json:"country"`
+
+ // Language ID.
+ Lang int `json:"lang"`
+
+ // Information whether HTTPS-only is enabled.
+ HTTPSRequired BaseBoolInt `json:"https_required"`
+
+ // Information whether user has been processed intro.
+ Intro BaseBoolInt `json:"intro"`
+
+ // Information whether wall comments should be hidden.
+ NoWallReplies BaseBoolInt `json:"no_wall_replies"`
+
+ // Information whether only owners posts should be shown.
+ OwnPostsDefault BaseBoolInt `json:"own_posts_default"`
+
+ // Two factor authentication is enabled.
+ TwoFactorRequired BaseBoolInt `json:"2fa_required"`
+ EuUser BaseBoolInt `json:"eu_user"`
+ CommunityComments BaseBoolInt `json:"community_comments"`
+ IsLiveStreamingEnabled BaseBoolInt `json:"is_live_streaming_enabled"`
+ IsNewLiveStreamingEnabled BaseBoolInt `json:"is_new_live_streaming_enabled"`
+ LinkRedirects map[string]string `json:"link_redirects"`
+}
+
+// AccountPushSettings struct.
+type AccountPushSettings struct {
+ Conversations AccountPushConversations `json:"conversations"`
+
+ // Information whether notifications are disabled.
+ Disabled BaseBoolInt `json:"disabled"`
+
+ // Time until that notifications are disabled in Unixtime.
+ DisabledUntil int `json:"disabled_until"`
+ Settings AccountPushParams `json:"settings"`
+}
+
+// AccountUserSettings struct.
+type AccountUserSettings struct {
+ Bdate string `json:"bdate"` // User's date of birth
+ BdateVisibility int `json:"bdate_visibility"` // Information whether user's birthdate are hidden
+ City BaseObject `json:"city"`
+ Country BaseCountry `json:"country"`
+ FirstName string `json:"first_name"` // User first name
+ HomeTown string `json:"home_town"` // User's hometown
+ LastName string `json:"last_name"` // User last name
+ MaidenName string `json:"maiden_name"` // User maiden name
+ NameRequest AccountNameRequest `json:"name_request"`
+ Phone string `json:"phone"` // User phone number with some hidden digits
+ Relation int `json:"relation"` // User relationship status
+ RelationPartner UsersUserMin `json:"relation_partner"`
+ RelationPending BaseBoolInt `json:"relation_pending"` // Information whether relation status is pending
+ RelationRequests []UsersUserMin `json:"relation_requests"`
+ ScreenName string `json:"screen_name"` // Domain name of the user's page
+ Sex int `json:"sex"` // User sex
+ Status string `json:"status"` // User status
+ ID int `json:"id"` // TODO: Check it https://vk.com/bug230405 (always return 0)
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/ads.go b/vendor/github.com/SevereCloud/vksdk/v2/object/ads.go
new file mode 100644
index 00000000..b2d7f135
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/ads.go
@@ -0,0 +1,321 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// AdsAccesses struct.
+type AdsAccesses struct {
+ ClientID string `json:"client_id"`
+ Role string `json:"role"`
+}
+
+// AdsAccount struct.
+type AdsAccount struct {
+ AccessRole string `json:"access_role"`
+ AccountID int `json:"account_id"` // Account ID
+ AccountName string `json:"account_name"`
+ AccountStatus BaseBoolInt `json:"account_status"` // Information whether account is active
+ CanViewBudget BaseBoolInt `json:"can_view_budget"`
+ AccountType string `json:"account_type"`
+}
+
+// AdsAdLayout struct.
+type AdsAdLayout struct {
+ AdFormat interface{} `json:"ad_format"` // Ad format
+ Description string `json:"description"` // Ad description
+ ImageSrc string `json:"image_src"` // Image URL
+ ImageSrc2x string `json:"image_src_2x"` // URL of the preview image in double size
+ LinkDomain string `json:"link_domain"` // Domain of advertised object
+ LinkURL string `json:"link_url"` // URL of advertised object
+ PreviewLink string `json:"preview_link"` // preview an ad as it is shown on the website
+ Title string `json:"title"` // Ad title
+ Video BaseBoolInt `json:"video"` // Information whether the ad is a video
+ ID string `json:"id"`
+ CampaignID int `json:"campaign_id"`
+ GoalType int `json:"goal_type"`
+ CostType int `json:"cost_type"`
+ AgeRestriction string `json:"age_restriction"`
+ LinkType string `json:"link_type"`
+}
+
+// AdsCampaign struct.
+type AdsCampaign struct {
+ AllLimit string `json:"all_limit"` // Campaign's total limit, rubles
+ DayLimit string `json:"day_limit"` // Campaign's day limit, rubles
+ ID int `json:"id"` // Campaign ID
+ Name string `json:"name"` // Campaign title
+ StartTime int `json:"start_time"` // Campaign start time, as Unixtime
+ Status int `json:"status"`
+ StopTime int `json:"stop_time"` // Campaign stop time, as Unixtime
+ Type string `json:"type"`
+}
+
+// AdsCategory struct.
+type AdsCategory struct {
+ ID int `json:"id"` // Category ID
+ Name string `json:"name"` // Category name
+ Subcategories []BaseObjectWithName `json:"subcategories"`
+}
+
+// AdsClient struct.
+type AdsClient struct {
+ AllLimit string `json:"all_limit"` // Client's total limit, rubles
+ DayLimit string `json:"day_limit"` // Client's day limit, rubles
+ ID int `json:"id"` // Client ID
+ Name string `json:"name"` // Client name
+}
+
+// AdsCriteria struct.
+type AdsCriteria struct {
+ AgeFrom int `json:"age_from"` // Age from
+ AgeTo int `json:"age_to"` // Age to
+ Apps string `json:"apps"` // Apps IDs
+ AppsNot string `json:"apps_not"` // Apps IDs to except
+ Birthday int `json:"birthday"` // Days to birthday
+ Cities string `json:"cities"` // Cities IDs
+ CitiesNot string `json:"cities_not"` // Cities IDs to except
+ Country int `json:"country"` // Country ID
+ Districts string `json:"districts"` // Districts IDs
+ Groups string `json:"groups"` // Communities IDs
+ InterestCategories string `json:"interest_categories"` // Interests categories IDs
+ Interests string `json:"interests"` // Interests
+
+ // Information whether the user has proceeded VK payments before.
+ Paying BaseBoolInt `json:"paying"`
+ Positions string `json:"positions"` // Positions IDs
+ Religions string `json:"religions"` // Religions IDs
+ RetargetingGroups string `json:"retargeting_groups"` // Retargeting groups IDs
+ RetargetingGroupsNot string `json:"retargeting_groups_not"` // Retargeting groups IDs to except
+ SchoolFrom int `json:"school_from"` // School graduation year from
+ SchoolTo int `json:"school_to"` // School graduation year to
+ Schools string `json:"schools"` // Schools IDs
+ Sex int `json:"sex"`
+ Stations string `json:"stations"` // Stations IDs
+ Statuses string `json:"statuses"` // Relationship statuses
+ Streets string `json:"streets"` // Streets IDs
+ Travellers int `json:"travellers"` // Travellers only
+ UniFrom int `json:"uni_from"` // University graduation year from
+ UniTo int `json:"uni_to"` // University graduation year to
+ UserBrowsers string `json:"user_browsers"` // Browsers
+ UserDevices string `json:"user_devices"` // Devices
+ UserOs string `json:"user_os"` // Operating systems
+}
+
+// AdsDemoStats struct.
+type AdsDemoStats struct {
+ ID int `json:"id"` // Object ID
+ Stats AdsDemostatsFormat `json:"stats"`
+ Type string `json:"type"`
+}
+
+// AdsDemostatsFormat struct.
+type AdsDemostatsFormat struct {
+ Age []AdsStatsAge `json:"age"`
+ Cities []AdsStatsCities `json:"cities"`
+ Day string `json:"day"` // Day as YYYY-MM-DD
+ Month string `json:"month"` // Month as YYYY-MM
+ Overall int `json:"overall"` // 1 if period=overall
+ Sex []AdsStatsSex `json:"sex"`
+ SexAge []AdsStatsSexAge `json:"sex_age"`
+}
+
+// AdsFloodStats struct.
+type AdsFloodStats struct {
+ Left int `json:"left"` // Requests left
+ Refresh int `json:"refresh"` // Time to refresh in seconds
+}
+
+// AdsLinkStatus link status.
+type AdsLinkStatus string
+
+// Possible values.
+const (
+ // allowed to use in ads.
+ AdsLinkAllowed AdsLinkStatus = "allowed"
+
+ // prohibited to use for this type of the object.
+ AdsLinkDisallowed AdsLinkStatus = "disallowed"
+
+ // checking, wait please.
+ AdsLinkInProgress AdsLinkStatus = "in_progress"
+)
+
+// AdsParagraphs struct.
+type AdsParagraphs struct {
+ Paragraph string `json:"paragraph"` // Rules paragraph
+}
+
+// AdsRejectReason struct.
+type AdsRejectReason struct {
+ Comment string `json:"comment"` // Comment text
+ Rules []AdsRules `json:"rules"`
+}
+
+// AdsRules struct.
+type AdsRules struct {
+ Paragraphs []AdsParagraphs `json:"paragraphs"`
+ Title string `json:"title"` // Comment
+}
+
+// AdsStats struct.
+type AdsStats struct {
+ ID int `json:"id"` // Object ID
+ Stats AdsStatsFormat `json:"stats"`
+ Type string `json:"type"`
+}
+
+// AdsStatsAge struct.
+type AdsStatsAge struct {
+ ClicksRate float64 `json:"clicks_rate"` // Clicks rate
+ ImpressionsRate float64 `json:"impressions_rate"` // Impressions rate
+ Value string `json:"value"` // Age interval
+}
+
+// AdsStatsCities struct.
+type AdsStatsCities struct {
+ ClicksRate float64 `json:"clicks_rate"` // Clicks rate
+ ImpressionsRate float64 `json:"impressions_rate"` // Impressions rate
+ Name string `json:"name"` // City name
+ Value int `json:"value"` // City ID
+}
+
+// AdsStatsFormat struct.
+type AdsStatsFormat struct {
+ Clicks int `json:"clicks"` // Clicks number
+ Day string `json:"day"` // Day as YYYY-MM-DD
+ Impressions int `json:"impressions"` // Impressions number
+ JoinRate int `json:"join_rate"` // Events number
+ Month string `json:"month"` // Month as YYYY-MM
+ Overall int `json:"overall"` // 1 if period=overall
+ Reach int `json:"reach"` // Reach
+ Spent int `json:"spent"` // Spent funds
+ VideoClicksSite int `json:"video_clicks_site"` // Click-thoughts to the advertised site
+ VideoViews int `json:"video_views"` // Video views number
+ VideoViewsFull int `json:"video_views_full"` // Video views (full video)
+ VideoViewsHalf int `json:"video_views_half"` // Video views (half of video)
+}
+
+// AdsStatsSex struct.
+type AdsStatsSex struct {
+ ClicksRate float64 `json:"clicks_rate"` // Clicks rate
+ ImpressionsRate float64 `json:"impressions_rate"` // Impressions rate
+ Value string `json:"value"`
+}
+
+// AdsStatsSexAge struct.
+type AdsStatsSexAge struct {
+ ClicksRate float64 `json:"clicks_rate"` // Clicks rate
+ ImpressionsRate float64 `json:"impressions_rate"` // Impressions rate
+ Value string `json:"value"` // Sex and age interval
+}
+
+// AdsTargSettings struct.
+type AdsTargSettings struct {
+}
+
+// AdsTargStats struct.
+type AdsTargStats struct {
+ AudienceCount int `json:"audience_count"` // Audience
+ RecommendedCpc float64 `json:"recommended_cpc"` // Recommended CPC value
+ RecommendedCpm float64 `json:"recommended_cpm"` // Recommended CPM value
+}
+
+// AdsTargSuggestions struct.
+type AdsTargSuggestions struct {
+ ID int `json:"id"` // Object ID
+ Name string `json:"name"` // Object name
+}
+
+// AdsTargSuggestionsCities struct.
+type AdsTargSuggestionsCities struct {
+ ID int `json:"id"` // Object ID
+ Name string `json:"name"` // Object name
+ Parent string `json:"parent"` // Parent object
+}
+
+// AdsTargSuggestionsRegions struct.
+type AdsTargSuggestionsRegions struct {
+ ID int `json:"id"` // Object ID
+ Name string `json:"name"` // Object name
+ Type string `json:"type"` // Object type
+}
+
+// AdsTargSuggestionsSchools struct.
+type AdsTargSuggestionsSchools struct {
+ Desc string `json:"desc"` // Full school title
+ ID int `json:"id"` // School ID
+ Name string `json:"name"` // School title
+ Parent string `json:"parent"` // City name
+ Type string `json:"type"`
+}
+
+// AdsTargetGroup struct.
+type AdsTargetGroup struct {
+ AudienceCount int `json:"audience_count"` // Audience
+ ID int `json:"id"` // Group ID
+ Lifetime int `json:"lifetime"` // Number of days for user to be in group
+ Name string `json:"name"` // Group name
+ LastUpdated int `json:"last_updated"`
+ IsAudience BaseBoolInt `json:"is_audience"`
+ IsShared BaseBoolInt `json:"is_shared"`
+ FileSource BaseBoolInt `json:"file_source"`
+ APISource BaseBoolInt `json:"api_source"`
+ LookalikeSource BaseBoolInt `json:"lookalike_source"`
+ Domain string `json:"domain,omitempty"` // Site domain
+ Pixel string `json:"pixel,omitempty"` // Pixel code
+}
+
+// AdsUsers struct.
+type AdsUsers struct {
+ Accesses []AdsAccesses `json:"accesses"`
+ UserID int `json:"user_id"` // User ID
+}
+
+// AdsAd struct.
+type AdsAd struct {
+ Approved string `json:"approved"`
+ AllLimit string `json:"all_limit"`
+ Category1ID string `json:"category1_id"`
+ Category2ID string `json:"category2_id"`
+ Cpm string `json:"cpm"`
+ AdFormat int `json:"ad_format"` // Ad format
+ AdPlatform interface{} `json:"ad_platform"` // Ad platform
+ CampaignID int `json:"campaign_id"` // Campaign ID
+ CostType int `json:"cost_type"`
+ Cpc int `json:"cpc"` // Cost of a click, kopecks
+ DisclaimerMedical BaseBoolInt `json:"disclaimer_medical"` // Information whether disclaimer is enabled
+ DisclaimerSpecialist BaseBoolInt `json:"disclaimer_specialist"` // Information whether disclaimer is enabled
+ DisclaimerSupplements BaseBoolInt `json:"disclaimer_supplements"` // Information whether disclaimer is enabled
+ Video BaseBoolInt `json:"video"` // Information whether the ad is a video
+ ImpressionsLimited BaseBoolInt `json:"impressions_limited"` // Information whether impressions are limited
+ Autobidding BaseBoolInt `json:"autobidding"`
+ ImpressionsLimit int `json:"impressions_limit"` // Impressions limit
+ ID string `json:"id"` // Ad ID
+ Name string `json:"name"` // Ad title
+ Status int `json:"status"`
+ CreateTime string `json:"create_time"`
+ UpdateTime string `json:"update_time"`
+ GoalType int `json:"goal_type"`
+ DayLimit string `json:"day_limit"`
+ StartTime string `json:"start_time"`
+ StopTime string `json:"stop_time"`
+ AgeRestriction string `json:"age_restriction"`
+ EventsRetargetingGroups interface{} `json:"events_retargeting_groups"`
+ ImpressionsLimitPeriod string `json:"impressions_limit_period"`
+}
+
+// AdsPromotedPostReach struct.
+type AdsPromotedPostReach struct {
+ Hide int `json:"hide"` // Hides amount
+ ID int `json:"id"` // Object ID from 'ids' parameter
+ JoinGroup int `json:"join_group"` // Community joins
+ Links int `json:"links"` // Link clicks
+ ReachSubscribers int `json:"reach_subscribers"` // Subscribers reach
+ ReachTotal int `json:"reach_total"` // Total reach
+ Report int `json:"report"` // Reports amount
+ ToGroup int `json:"to_group"` // Community clicks
+ Unsubscribe int `json:"unsubscribe"` // 'Unsubscribe' events amount
+ VideoViews100p int `json:"video_views_100p"` // Video views for 100 percent
+ VideoViews25p int `json:"video_views_25p"` // Video views for 25 percent
+ VideoViews3s int `json:"video_views_3s"` // Video views for 3 seconds
+ VideoViews50p int `json:"video_views_50p"` // Video views for 50 percent
+ VideoViews75p int `json:"video_views_75p"` // Video views for 75 percent
+ VideoViewsStart int `json:"video_views_start"` // Video starts
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/apps.go b/vendor/github.com/SevereCloud/vksdk/v2/object/apps.go
new file mode 100644
index 00000000..aaf4bbdb
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/apps.go
@@ -0,0 +1,101 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// AppsApp type application type.
+const (
+ AppTypeApp = "app"
+ AppTypeGame = "game"
+ AppTypeSite = "site"
+ AppTypeStandalone = "standalone"
+ AppTypeVkApp = "vk_app"
+ AppTypeCommunityApp = "community_app"
+ AppTypeHTML5Game = "html5_game"
+)
+
+// AppsLeaderboardType leaderboardType type.
+const (
+ AppsLeaderboardTypeNotSupported = iota
+ AppsLeaderboardTypeLevels
+ AppsLeaderboardTypePoints
+)
+
+// AppsScreenOrientation supported screen orientation.
+type AppsScreenOrientation int
+
+// Possible values.
+const (
+ AppsScreenOrientationBoth AppsScreenOrientation = iota
+ AppsScreenOrientationLandscape
+ AppsScreenOrientationPortrait
+)
+
+// AppsCatalogBanner struct.
+type AppsCatalogBanner struct {
+ BackgroundColor string `json:"background_color"`
+ DescriptionColor string `json:"description_color"`
+ Description string `json:"description"`
+ TitleColor string `json:"title_color"`
+}
+
+// AppsApp struct.
+type AppsApp struct {
+ AuthorOwnerID int `json:"author_owner_id"`
+ AuthorURL string `json:"author_url"`
+ Banner1120 string `json:"banner_1120"` // URL of the app banner with 1120 px in width
+ Banner560 string `json:"banner_560"` // URL of the app banner with 560 px in width
+ CatalogPosition int `json:"catalog_position"` // Catalog position
+ Description string `json:"description"` // Application description
+ Friends []int `json:"friends"`
+ Genre string `json:"genre"` // Genre name
+ GenreID int `json:"genre_id"` // Genre ID
+ Icon139 string `json:"icon_139"` // URL of the app icon with 139 px in width
+ Icon150 string `json:"icon_150"` // URL of the app icon with 150 px in width
+ Icon278 string `json:"icon_278"` // URL of the app icon with 279 px in width
+ Icon75 string `json:"icon_75"` // URL of the app icon with 75 px in width
+ ID int `json:"id"` // Application ID
+ International BaseBoolInt `json:"international"` // Information whether the application is multi language
+ IsInCatalog BaseBoolInt `json:"is_in_catalog"` // Information whether application is in mobile catalog
+ Installed BaseBoolInt `json:"installed"`
+ PushEnabled BaseBoolInt `json:"push_enabled"`
+ HideTabbar BaseBoolInt `json:"hide_tabbar"`
+ IsNew BaseBoolInt `json:"is_new"`
+ New BaseBoolInt `json:"new"`
+ IsInstalled BaseBoolInt `json:"is_installed"`
+ LeaderboardType int `json:"leaderboard_type"`
+ MembersCount int `json:"members_count"` // Members number
+ PlatformID int `json:"platform_id"` // Application ID in store
+
+ // Date when the application has been published in Unixtime.
+ PublishedDate int `json:"published_date"`
+ ScreenName string `json:"screen_name"` // Screen name
+ Screenshots []PhotosPhoto `json:"screenshots"`
+ Section string `json:"section"` // Application section name
+ Title string `json:"title"` // Application title
+ Type string `json:"type"`
+ Icon16 string `json:"icon_16"`
+ Icon576 string `json:"icon_576"`
+ ScreenOrientation AppsScreenOrientation `json:"screen_orientation"`
+ CatalogBanner AppsCatalogBanner `json:"catalog_banner"`
+
+ // mobile_controls_type = 0 - прозрачный элемент управления поверх области с игрой;
+ // mobile_controls_type = 1 - чёрная полоска над областью с игрой;
+ // mobile_controls_type = 2 - только для vk apps, без контроллов.
+ MobileControlsType int `json:"mobile_controls_type"`
+
+ // mobile_view_support_type = 0 - игра не использует нижнюю часть экрана на iPhoneX, черная полоса есть.
+ // mobile_view_support_type = 1 - игра использует нижнюю часть экрана на iPhoneX, черной полосы нет.
+ MobileViewSupportType int `json:"mobile_view_support_type"`
+}
+
+// AppsLeaderboard struct.
+type AppsLeaderboard struct {
+ Level int `json:"level"` // Level
+ Points int `json:"points"` // Points number
+ Score int `json:"score"` // Score number
+ UserID int `json:"user_id"` // User ID
+}
+
+// AppsScope Scope description.
+type AppsScope struct {
+ Name string `json:"name"` // Scope name
+ Title string `json:"title"` // Scope title
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/appwidgets.go b/vendor/github.com/SevereCloud/vksdk/v2/object/appwidgets.go
new file mode 100644
index 00000000..ac6d2492
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/appwidgets.go
@@ -0,0 +1,20 @@
+package object
+
+// AppWidgetsAppImageUploadResponse struct.
+type AppWidgetsAppImageUploadResponse struct {
+ Image string `json:"image"`
+ Hash string `json:"hash"`
+}
+
+// AppWidgetsGroupImageUploadResponse struct.
+type AppWidgetsGroupImageUploadResponse struct {
+ Image string `json:"image"`
+ Hash string `json:"hash"`
+}
+
+// AppWidgetsImage struct.
+type AppWidgetsImage struct {
+ ID string `json:"id"`
+ Type string `json:"type"`
+ Images []BaseImage `json:"images"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/audio.go b/vendor/github.com/SevereCloud/vksdk/v2/object/audio.go
new file mode 100644
index 00000000..4aec2412
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/audio.go
@@ -0,0 +1,67 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// AudioAudio struct.
+type AudioAudio struct {
+ AccessKey string `json:"access_key"` // Access key for the audio
+ ID int `json:"id"`
+ OwnerID int `json:"owner_id"`
+ Artist string `json:"artist"`
+ Title string `json:"title"`
+ Duration int `json:"duration"`
+ Date int `json:"date"`
+ URL string `json:"url"`
+ IsHq BaseBoolInt `json:"is_hq"`
+ IsExplicit BaseBoolInt `json:"is_explicit"`
+ StoriesAllowed BaseBoolInt `json:"stories_allowed"`
+ ShortVideosAllowed BaseBoolInt `json:"short_videos_allowed"`
+ IsFocusTrack BaseBoolInt `json:"is_focus_track"`
+ IsLicensed BaseBoolInt `json:"is_licensed"`
+ StoriesCoverAllowed BaseBoolInt `json:"stories_cover_allowed"`
+ LyricsID int `json:"lyrics_id"`
+ AlbumID int `json:"album_id"`
+ GenreID int `json:"genre_id"`
+ TrackCode string `json:"track_code"`
+ NoSearch int `json:"no_search"`
+ MainArtists []AudioAudioArtist `json:"main_artists"`
+ Ads AudioAds `json:"ads"`
+ Subtitle string `json:"subtitle"`
+}
+
+// ToAttachment return attachment format.
+func (audio AudioAudio) ToAttachment() string {
+ return fmt.Sprintf("audio%d_%d", audio.OwnerID, audio.ID)
+}
+
+// AudioAds struct.
+type AudioAds struct {
+ ContentID string `json:"content_id"`
+ Duration string `json:"duration"`
+ AccountAgeType string `json:"account_age_type"`
+ PUID1 string `json:"puid1"`
+ PUID22 string `json:"puid22"`
+}
+
+// AudioAudioArtist struct.
+type AudioAudioArtist struct {
+ Name string `json:"name"`
+ ID string `json:"id"`
+ Domain string `json:"domain"`
+}
+
+// AudioAudioUploadResponse struct.
+type AudioAudioUploadResponse struct {
+ Audio string `json:"audio"`
+ Hash string `json:"hash"`
+ Redirect string `json:"redirect"`
+ Server int `json:"server"`
+}
+
+// AudioLyrics struct.
+type AudioLyrics struct {
+ LyricsID int `json:"lyrics_id"`
+ Text string `json:"text"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/board.go b/vendor/github.com/SevereCloud/vksdk/v2/object/board.go
new file mode 100644
index 00000000..b8f6b5a3
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/board.go
@@ -0,0 +1,40 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// BoardTopic struct.
+type BoardTopic struct {
+ Comments int `json:"comments"` // Comments number
+ Created int `json:"created"` // Date when the topic has been created in Unixtime
+ CreatedBy int `json:"created_by"` // Creator ID
+ ID int `json:"id"` // Topic ID
+ IsClosed BaseBoolInt `json:"is_closed"` // Information whether the topic is closed
+ IsFixed BaseBoolInt `json:"is_fixed"` // Information whether the topic is fixed
+ Title string `json:"title"` // Topic title
+ Updated int `json:"updated"` // Date when the topic has been updated in Unixtime
+ UpdatedBy int `json:"updated_by"` // ID of user who updated the topic
+}
+
+// BoardTopicComment struct.
+type BoardTopicComment struct {
+ Attachments []WallCommentAttachment `json:"attachments"`
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ FromID int `json:"from_id"` // Author ID
+ ID int `json:"id"` // Comment ID
+ // RealOffset int `json:"real_offset"` // Real position of the comment
+ Text string `json:"text"` // Comment text
+ // TopicID int `json:"topic_id"`
+ // TopicOwnerID int `json:"topic_owner_id"`
+ Likes BaseLikesInfo `json:"likes"`
+ CanEdit BaseBoolInt `json:"can_edit"` // Information whether current user can edit the comment
+}
+
+// BoardTopicPoll struct.
+type BoardTopicPoll struct {
+ AnswerID int `json:"answer_id"` // Current user's answer ID
+ Answers []PollsAnswer `json:"answers"`
+ Created int `json:"created"` // Date when poll has been created in Unixtime
+ IsClosed BaseBoolInt `json:"is_closed"` // Information whether the poll is closed
+ OwnerID int `json:"owner_id"` // Poll owner's ID
+ PollID int `json:"poll_id"` // Poll ID
+ Question string `json:"question"` // Poll question
+ Votes string `json:"votes"` // Votes number
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/database.go b/vendor/github.com/SevereCloud/vksdk/v2/object/database.go
new file mode 100644
index 00000000..e8cd9341
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/database.go
@@ -0,0 +1,50 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// DatabaseCity struct.
+type DatabaseCity struct {
+ ID int `json:"id"` // City ID
+ Title string `json:"title"` // City title
+ Area string `json:"area"`
+ Region string `json:"region"`
+ Important BaseBoolInt `json:"important"`
+}
+
+// DatabaseMetroStation struct.
+type DatabaseMetroStation struct {
+ ID int `json:"id"` // Metro station ID
+ Name string `json:"name"` // Metro station name
+ Color string `json:"color"` // Metro station color
+ CityID int `json:"city_id"` // Metro station city ID
+}
+
+// DatabaseFaculty struct.
+type DatabaseFaculty struct {
+ ID int `json:"id"` // Faculty ID
+ Title string `json:"title"` // Faculty title
+}
+
+// DatabaseRegion struct.
+type DatabaseRegion struct {
+ ID int `json:"id"` // Region ID
+ Title string `json:"title"` // Region title
+}
+
+// DatabaseSchool struct.
+type DatabaseSchool struct {
+ ID int `json:"id"` // School ID
+ Title string `json:"title"` // School title
+}
+
+// DatabaseStation struct.
+type DatabaseStation struct {
+ CityID int `json:"city_id"` // City ID
+ Color string `json:"color"` // Hex color code without #
+ ID int `json:"id"` // Station ID
+ Name string `json:"name"` // Station name
+}
+
+// DatabaseUniversity struct.
+type DatabaseUniversity struct {
+ ID int `json:"id"` // University ID
+ Title string `json:"title"` // University title
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/docs.go b/vendor/github.com/SevereCloud/vksdk/v2/object/docs.go
new file mode 100644
index 00000000..b7a880fa
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/docs.go
@@ -0,0 +1,117 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// DocsDoc struct.
+type DocsDoc struct {
+ AccessKey string `json:"access_key"` // Access key for the document
+ Date int `json:"date"` // Date when file has been uploaded in Unixtime
+ Ext string `json:"ext"` // File extension
+ ID int `json:"id"` // Document ID
+ IsLicensed BaseBoolInt `json:"is_licensed"`
+ OwnerID int `json:"owner_id"` // Document owner ID
+ Preview DocsDocPreview `json:"preview"`
+ Size int `json:"size"` // File size in bites
+ Title string `json:"title"` // Document title
+ Type int `json:"type"` // Document type
+ URL string `json:"url"` // File URL
+ DocsDocPreviewAudioMessage
+ DocsDocPreviewGraffiti
+}
+
+// ToAttachment return attachment format.
+func (doc DocsDoc) ToAttachment() string {
+ return fmt.Sprintf("doc%d_%d", doc.OwnerID, doc.ID)
+}
+
+// DocsDocPreview struct.
+type DocsDocPreview struct {
+ Photo DocsDocPreviewPhoto `json:"photo"`
+ Graffiti DocsDocPreviewGraffiti `json:"graffiti"`
+ Video DocsDocPreviewVideo `json:"video"`
+ AudioMessage DocsDocPreviewAudioMessage `json:"audio_message"`
+}
+
+// DocsDocPreviewPhoto struct.
+type DocsDocPreviewPhoto struct {
+ Sizes []DocsDocPreviewPhotoSizes `json:"sizes"`
+}
+
+// MaxSize return the largest DocsDocPreviewPhotoSizes.
+func (photo DocsDocPreviewPhoto) MaxSize() (maxPhotoSize DocsDocPreviewPhotoSizes) {
+ var max float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size > max {
+ max = size
+ maxPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// MinSize return the smallest DocsDocPreviewPhotoSizes.
+func (photo DocsDocPreviewPhoto) MinSize() (minPhotoSize DocsDocPreviewPhotoSizes) {
+ var min float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size < min || min == 0 {
+ min = size
+ minPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// DocsDocPreviewPhotoSizes struct.
+type DocsDocPreviewPhotoSizes struct {
+ // BUG(VK): json: cannot unmarshal number 162.000000 into Go struct field
+ // DocsDocPreviewPhotoSizes.doc.preview.photo.sizes.height of type Int
+ Height float64 `json:"height"` // Height in px
+ Src string `json:"src"` // URL of the image
+ Type string `json:"type"`
+ Width float64 `json:"width"` // Width in px
+}
+
+// DocsDocPreviewGraffiti struct.
+type DocsDocPreviewGraffiti struct {
+ Src string `json:"src"`
+ Width int `json:"width"`
+ Height int `json:"height"`
+}
+
+// DocsDocPreviewVideo struct.
+type DocsDocPreviewVideo struct {
+ FileSize int `json:"file_size"` // Video file size in bites
+ Height int `json:"height"` // Video's height in pixels
+ Src string `json:"src"` // Video URL
+ Width int `json:"width"` // Video's width in pixels
+}
+
+// DocsDocPreviewAudioMessage struct.
+type DocsDocPreviewAudioMessage struct {
+ Duration int `json:"duration"`
+ Waveform []int `json:"waveform"`
+ LinkOgg string `json:"link_ogg"`
+ LinkMp3 string `json:"link_mp3"`
+ Transcript string `json:"transcript"`
+ TranscriptState string `json:"transcript_state"`
+}
+
+// DocsDocTypes struct.
+type DocsDocTypes struct {
+ Count int `json:"count"` // Number of docs
+ ID int `json:"id"` // Doc type ID
+ Name string `json:"name"` // Doc type Title
+}
+
+// DocsDocUploadResponse struct.
+type DocsDocUploadResponse struct {
+ File string `json:"file"` // Uploaded file data
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/donut.go b/vendor/github.com/SevereCloud/vksdk/v2/object/donut.go
new file mode 100644
index 00000000..8148969b
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/donut.go
@@ -0,0 +1,9 @@
+package object
+
+// DonutDonatorSubscriptionInfo struct.
+type DonutDonatorSubscriptionInfo struct {
+ OwnerID int `json:"owner_id"`
+ NextPaymentDate int `json:"next_payment_date"`
+ Amount int `json:"amount"`
+ Status string `json:"status"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/fave.go b/vendor/github.com/SevereCloud/vksdk/v2/object/fave.go
new file mode 100644
index 00000000..802e7f66
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/fave.go
@@ -0,0 +1,41 @@
+package object
+
+// FaveTag struct.
+type FaveTag struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+}
+
+// FavePage struct.
+type FavePage struct {
+ Type string `json:"type"`
+ Description string `json:"description"`
+ Tags []FaveTag `json:"tags"`
+ UpdatedDate int `json:"updated_date"`
+ User UsersUser `json:"user"`
+ Group GroupsGroup `json:"group"`
+}
+
+// FaveFavesLink struct.
+type FaveFavesLink struct {
+ URL string `json:"url"`
+ Title string `json:"title"`
+ Caption string `json:"caption"`
+ Description string `json:"description"`
+ Photo PhotosPhoto `json:"photo"`
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ ID string `json:"id"`
+}
+
+// FaveItem struct.
+type FaveItem struct {
+ Type string `json:"type"`
+ Seen BaseBoolInt `json:"seen"`
+ AddedDate int `json:"added_date"`
+ Tags []FaveTag `json:"tags"`
+ Link FaveFavesLink `json:"link,omitempty"`
+ Post WallWallpost `json:"post,omitempty"`
+ Video VideoVideo `json:"video,omitempty"`
+ Product MarketMarketItem `json:"product,omitempty"`
+ Article Article `json:"article,omitempty"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/friends.go b/vendor/github.com/SevereCloud/vksdk/v2/object/friends.go
new file mode 100644
index 00000000..4f6866c3
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/friends.go
@@ -0,0 +1,63 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// FriendsFriendStatus FriendStatus type.
+const (
+ FriendsStatusNotFriend = iota // not a friend
+ FriendsStatusOutComingRequest // out coming request
+ FriendsStatusInComingRequest // incoming request
+ FriendsStatusIsFriend // is friend
+)
+
+// FriendsFriendStatus struct.
+type FriendsFriendStatus struct {
+ FriendStatus int `json:"friend_status"`
+ ReadState BaseBoolInt `json:"read_state"` // Information whether request is unviewed
+ RequestMessage string `json:"request_message"` // Message sent with request
+ Sign string `json:"sign"` // MD5 hash for the result validation
+ UserID int `json:"user_id"` // User ID
+}
+
+// FriendsFriendsList struct.
+type FriendsFriendsList struct {
+ ID int `json:"id"` // List ID
+ Name string `json:"name"` // List title
+}
+
+// type friendsMutualFriend struct {
+// CommonCount int `json:"common_count"` // Total mutual friends number
+// CommonFriends []int `json:"common_friends"`
+// ID int `json:"id"` // User ID
+// }
+
+// FriendsRequests struct.
+type FriendsRequests struct {
+ UsersUser
+ From string `json:"from"` // ID of the user by whom friend has been suggested
+ Mutual FriendsRequestsMutual `json:"mutual"`
+ UserID int `json:"user_id"` // User ID
+ TrackCode string `json:"track_code"`
+}
+
+// FriendsRequestsMutual struct.
+type FriendsRequestsMutual struct {
+ Count int `json:"count"` // Total mutual friends number
+ Users []int `json:"users"`
+}
+
+// FriendsRequestsXtrMessage struct.
+type FriendsRequestsXtrMessage struct {
+ FriendsRequests
+ Message string `json:"message"` // Message sent with a request
+}
+
+// FriendsUserXtrLists struct.
+type FriendsUserXtrLists struct {
+ UsersUser
+ Lists []int `json:"lists"` // IDs of friend lists with user
+}
+
+// FriendsUserXtrPhone struct.
+type FriendsUserXtrPhone struct {
+ UsersUser
+ Phone string `json:"phone"` // User phone
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/gifts.go b/vendor/github.com/SevereCloud/vksdk/v2/object/gifts.go
new file mode 100644
index 00000000..9abe95b2
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/gifts.go
@@ -0,0 +1,34 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// GiftsGift Privacy type.
+const (
+ GiftsGiftPrivacyForAll = iota // name and message for all
+ GiftsGiftPrivacyNameForAll // name for all
+ GiftsGiftPrivacyRecipientOnly // name and message for recipient only
+)
+
+// GiftsGift struct.
+type GiftsGift struct {
+ Date int `json:"date"` // Date when gist has been sent in Unixtime
+ FromID int `json:"from_id"` // Gift sender ID
+ Gift GiftsLayout `json:"gift"`
+ GiftHash string `json:"gift_hash"` // Hash
+ ID int `json:"id"` // Gift ID
+ Message string `json:"message"` // Comment text
+ Privacy int `json:"privacy"`
+
+ Description string `json:"description"`
+ PaymentType string `json:"payment_type"`
+ Price int `json:"price"`
+ PriceStr string `json:"price_str"`
+}
+
+// GiftsLayout struct.
+type GiftsLayout struct {
+ ID int `json:"id"`
+ Thumb256 string `json:"thumb_256"` // URL of the preview image with 256 px in width
+ Thumb48 string `json:"thumb_48"` // URL of the preview image with 48 px in width
+ Thumb96 string `json:"thumb_96"` // URL of the preview image with 96 px in width
+ StickersProductID int `json:"stickers_product_id"`
+ IsStickersStyle BaseBoolInt `json:"is_stickers_style"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/groups.go b/vendor/github.com/SevereCloud/vksdk/v2/object/groups.go
new file mode 100644
index 00000000..b66c1ee6
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/groups.go
@@ -0,0 +1,807 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "encoding/json"
+ "fmt"
+ "reflect"
+)
+
+// GroupsAddress WorkInfoStatus of information about timetable.
+const (
+ WorkStatusNoInformation = "no_information"
+ WorkStatusTemporarilyClosed = "temporarily_closed"
+ WorkStatusAlwaysOpened = "always_opened"
+ WorkStatusTimetable = "timetable"
+ WorkStatusForeverClosed = "forever_closed"
+)
+
+// GroupsAddress struct.
+type GroupsAddress struct {
+ // Additional address to the place (6 floor, left door).
+ AdditionalAddress string `json:"additional_address"`
+ Address string `json:"address"` // String address to the place (Nevsky, 28)
+ CityID int `json:"city_id"` // City id of address
+ CountryID int `json:"country_id"` // Country id of address
+ Distance int `json:"distance"` // Distance from the point
+ ID int `json:"id"` // Address id
+ Latitude float64 `json:"latitude"` // Address latitude
+ Longitude float64 `json:"longitude"` // Address longitude
+ MetroStationID int `json:"metro_station_id"` // Metro id of address
+ Phone string `json:"phone"` // Address phone
+ TimeOffset int `json:"time_offset"` // Time offset int minutes from utc time
+ Timetable GroupsAddressTimetable `json:"timetable"` // Week timetable for the address
+ Title string `json:"title"` // Title of the place (Zinger, etc)
+ WorkInfoStatus string `json:"work_info_status"` // Status of information about timetable
+}
+
+// GroupsAddressTimetable Timetable for a week.
+type GroupsAddressTimetable struct {
+ Fri GroupsAddressTimetableDay `json:"fri"` // Timetable for friday
+ Mon GroupsAddressTimetableDay `json:"mon"` // Timetable for monday
+ Sat GroupsAddressTimetableDay `json:"sat"` // Timetable for saturday
+ Sun GroupsAddressTimetableDay `json:"sun"` // Timetable for sunday
+ Thu GroupsAddressTimetableDay `json:"thu"` // Timetable for thursday
+ Tue GroupsAddressTimetableDay `json:"tue"` // Timetable for tuesday
+ Wed GroupsAddressTimetableDay `json:"wed"` // Timetable for wednesday
+}
+
+// GroupsAddressTimetableDay Timetable for one day.
+type GroupsAddressTimetableDay struct {
+ BreakCloseTime int `json:"break_close_time"` // Close time of the break in minutes
+ BreakOpenTime int `json:"break_open_time"` // Start time of the break in minutes
+ CloseTime int `json:"close_time"` // Close time in minutes
+ OpenTime int `json:"open_time"` // Open time in minutes
+}
+
+// GroupsAddressesInfo struct.
+type GroupsAddressesInfo struct {
+ IsEnabled BaseBoolInt `json:"is_enabled"` // Information whether addresses is enabled
+ MainAddressID int `json:"main_address_id"` // Main address id for group
+}
+
+// GroupsGroup AdminLevel type.
+const (
+ GroupsAdminLevelModerator = iota
+ GroupsAdminLevelEditor
+ GroupsAdminLevelAdministrator
+)
+
+// GroupsGroup MainSection type.
+const (
+ GroupsMainSectionAbsent = iota
+ GroupsMainSectionPhotos
+ GroupsMainSectionTopics
+ GroupsMainSectionAudio
+ GroupsMainSectionVideo
+ GroupsMainSectionMarket
+)
+
+// GroupsGroup MemberStatus(events_event_attach, newsfeed_event_activity).
+const (
+ GroupsMemberStatusNotMember = iota
+ GroupsMemberStatusMember
+ GroupsMemberStatusNotSure
+ GroupsMemberStatusDeclined
+ GroupsMemberStatusHasSentRequest
+ GroupsMemberStatusInvited
+)
+
+// GroupsGroup Access or IsClosed type.
+const (
+ GroupsGroupOpen = iota
+ GroupsGroupClosed
+ GroupsGroupPrivate
+)
+
+// GroupsGroup AgeLimits.
+const (
+ GroupsAgeLimitsNo = iota
+ GroupsAgeLimitsOver16
+ GroupsAgeLimitsOver18
+)
+
+// GroupsGroup type.
+const (
+ GroupsTypeGroup = "group"
+ GroupsTypePage = "page"
+ GroupsTypeEvent = "event"
+)
+
+// GroupsGroup struct.
+type GroupsGroup struct {
+ AdminLevel int `json:"admin_level"`
+ Deactivated string `json:"deactivated"` // Information whether community is banned
+ FinishDate int `json:"finish_date"` // Finish date in Unixtime format
+ ID int `json:"id"` // Community ID
+ Name string `json:"name"` // Community name
+ Photo100 string `json:"photo_100"` // URL of square photo of the community with 100 pixels in width
+ Photo200 string `json:"photo_200"` // URL of square photo of the community with 200 pixels in width
+ Photo50 string `json:"photo_50"` // URL of square photo of the community with 50 pixels in width
+ ScreenName string `json:"screen_name"` // Domain of the community page
+ StartDate int `json:"start_date"` // Start date in Unixtime format
+ Type string `json:"type"`
+ Market GroupsMarketInfo `json:"market"`
+ MemberStatus int `json:"member_status"` // Current user's member status
+ IsClosed int `json:"is_closed"`
+ City BaseObject `json:"city"`
+ Country BaseCountry `json:"country"`
+
+ // Information whether current user is administrator.
+ IsAdmin BaseBoolInt `json:"is_admin"`
+
+ // Information whether current user is advertiser.
+ IsAdvertiser BaseBoolInt `json:"is_advertiser"`
+
+ // Information whether current user is member.
+ IsMember BaseBoolInt `json:"is_member"`
+
+ // Information whether community is in faves.
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+
+ // Information whether community is adult.
+ IsAdult BaseBoolInt `json:"is_adult"`
+
+ // Information whether current user is subscribed.
+ IsSubscribed BaseBoolInt `json:"is_subscribed"`
+
+ // Information whether current user can post on community's wall.
+ CanPost BaseBoolInt `json:"can_post"`
+
+ // Information whether current user can see all posts on community's wall.
+ CanSeeAllPosts BaseBoolInt `json:"can_see_all_posts"`
+
+ // Information whether current user can create topic.
+ CanCreateTopic BaseBoolInt `json:"can_create_topic"`
+
+ // Information whether current user can upload video.
+ CanUploadVideo BaseBoolInt `json:"can_upload_video"`
+
+ // Information whether current user can upload doc.
+ CanUploadDoc BaseBoolInt `json:"can_upload_doc"`
+
+ // Information whether community has photo.
+ HasPhoto BaseBoolInt `json:"has_photo"`
+
+ // Information whether current user can send a message to community.
+ CanMessage BaseBoolInt `json:"can_message"`
+
+ // Information whether community can send a message to current user.
+ IsMessagesBlocked BaseBoolInt `json:"is_messages_blocked"`
+
+ // Information whether community can send notifications by phone number to current user.
+ CanSendNotify BaseBoolInt `json:"can_send_notify"`
+
+ // Information whether current user is subscribed to podcasts.
+ IsSubscribedPodcasts BaseBoolInt `json:"is_subscribed_podcasts"`
+
+ // Owner in whitelist or not.
+ CanSubscribePodcasts BaseBoolInt `json:"can_subscribe_podcasts"`
+
+ // Can subscribe to wall.
+ CanSubscribePosts BaseBoolInt `json:"can_subscribe_posts"`
+
+ // Information whether community has market app.
+ HasMarketApp BaseBoolInt `json:"has_market_app"`
+ IsHiddenFromFeed BaseBoolInt `json:"is_hidden_from_feed"`
+ IsMarketCartEnabled BaseBoolInt `json:"is_market_cart_enabled"`
+ Verified BaseBoolInt `json:"verified"` // Information whether community is verified
+
+ // Information whether the community has a fire pictogram.
+ Trending BaseBoolInt `json:"trending"`
+ Description string `json:"description"` // Community description
+ WikiPage string `json:"wiki_page"` // Community's main wiki page title
+ MembersCount int `json:"members_count"` // Community members number
+ Counters GroupsCountersGroup `json:"counters"`
+ Cover GroupsCover `json:"cover"`
+
+ // Type of group, start date of event or category of public page.
+ Activity string `json:"activity"`
+ FixedPost int `json:"fixed_post"` // Fixed post ID
+ Status string `json:"status"` // Community status
+ MainAlbumID int `json:"main_album_id"` // Community's main photo album ID
+ Links []GroupsLinksItem `json:"links"`
+ Contacts []GroupsContactsItem `json:"contacts"`
+ Site string `json:"site"` // Community's website
+ MainSection int `json:"main_section"`
+ OnlineStatus GroupsOnlineStatus `json:"online_status"` // Status of replies in community messages
+ AgeLimits int `json:"age_limits"` // Information whether age limit
+ BanInfo GroupsGroupBanInfo `json:"ban_info"` // User ban info
+ Addresses GroupsAddressesInfo `json:"addresses"` // Info about addresses in Groups
+ LiveCovers GroupsLiveCovers `json:"live_covers"`
+ CropPhoto UsersCropPhoto `json:"crop_photo"`
+ Wall int `json:"wall"`
+ ActionButton GroupsActionButton `json:"action_button"`
+ TrackCode string `json:"track_code"`
+ PublicDateLabel string `json:"public_date_label"`
+ AuthorID int `json:"author_id"`
+ Phone string `json:"phone"`
+}
+
+// ToMention return mention.
+func (group GroupsGroup) ToMention() string {
+ return fmt.Sprintf("[club%d|%s]", group.ID, group.Name)
+}
+
+// GroupsLiveCovers struct.
+type GroupsLiveCovers struct {
+ IsEnabled BaseBoolInt `json:"is_enabled"`
+ IsScalable BaseBoolInt `json:"is_scalable"`
+ StoryIds []string `json:"story_ids"`
+}
+
+// GroupsBanInfo reason type.
+const (
+ GroupsBanReasonOther = iota
+ GroupsBanReasonSpam
+ GroupsBanReasonVerbalAbuse
+ GroupsBanReasonStrongLanguage
+ GroupsBanReasonFlood
+)
+
+// GroupsBanInfo struct.
+type GroupsBanInfo struct {
+ AdminID int `json:"admin_id"` // Administrator ID
+ Comment string `json:"comment"` // Comment for a ban
+ Date int `json:"date"` // Date when user has been added to blacklist in Unixtime
+ EndDate int `json:"end_date"` // Date when user will be removed from blacklist in Unixtime
+ Reason int `json:"reason"`
+ CommentVisible BaseBoolInt `json:"comment_visible"`
+}
+
+// GroupsCallbackServer struct.
+type GroupsCallbackServer struct {
+ CreatorID int `json:"creator_id"`
+ ID int `json:"id"`
+ SecretKey string `json:"secret_key"`
+ Status string `json:"status"`
+ Title string `json:"title"`
+ URL string `json:"url"`
+}
+
+// GroupsCallbackSettings struct.
+type GroupsCallbackSettings struct {
+ APIVersion string `json:"api_version"` // API version used for the events
+ Events GroupsLongPollEvents `json:"events"`
+}
+
+// GroupsContactsItem struct.
+type GroupsContactsItem struct {
+ Desc string `json:"desc"` // Contact description
+ Email string `json:"email"` // Contact email
+ Phone string `json:"phone"` // Contact phone
+ UserID int `json:"user_id"` // User ID
+}
+
+// GroupsCountersGroup struct.
+type GroupsCountersGroup struct {
+ Addresses int `json:"addresses"` // Addresses number
+ Albums int `json:"albums"` // Photo albums number
+ Articles int `json:"articles"` // Articles number
+ Audios int `json:"audios"` // Audios number
+ Docs int `json:"docs"` // Docs number
+ Market int `json:"market"` // Market items number
+ Photos int `json:"photos"` // Photos number
+ Topics int `json:"topics"` // Topics number
+ Videos int `json:"videos"` // Videos number
+ Narratives int `json:"narratives"` // Narratives number
+}
+
+// GroupsCover struct.
+type GroupsCover struct {
+ Enabled BaseBoolInt `json:"enabled"` // Information whether cover is enabled
+ Images []BaseImage `json:"images"`
+}
+
+// GroupsGroupBanInfo struct.
+type GroupsGroupBanInfo struct {
+ Comment string `json:"comment"` // Ban comment
+ EndDate int `json:"end_date"` // End date of ban in Unixtime
+}
+
+// GroupsGroupCategory struct.
+type GroupsGroupCategory struct {
+ ID int `json:"id"` // Category ID
+ Name string `json:"name"` // Category name
+ Subcategories []BaseObjectWithName `json:"subcategories"`
+}
+
+// GroupsGroupCategoryFull struct.
+type GroupsGroupCategoryFull struct {
+ ID int `json:"id"` // Category ID
+ Name string `json:"name"` // Category name
+ PageCount int `json:"page_count"` // Pages number
+ PagePreviews []GroupsGroup `json:"page_previews"`
+ Subcategories []GroupsGroupCategoryFull `json:"subcategories"`
+}
+
+// GroupsGroupCategoryType struct.
+type GroupsGroupCategoryType struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+}
+
+// GroupsGroupLink struct.
+type GroupsGroupLink struct {
+ Desc string `json:"desc"` // Link description
+ EditTitle BaseBoolInt `json:"edit_title"` // Information whether the title can be edited
+ ImageProcessing BaseBoolInt `json:"image_processing"` // Information whether the image on processing
+ Name string `json:"name"`
+ ID int `json:"id"` // Link ID
+ URL string `json:"url"` // Link URL
+}
+
+// GroupsGroupPublicCategoryList struct.
+type GroupsGroupPublicCategoryList struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+ Subcategories []GroupsGroupCategoryType `json:"subcategories"`
+}
+
+// GroupsGroupSettings Photos type.
+const (
+ GroupsGroupPhotosDisabled = iota
+ GroupsGroupPhotosOpen
+ GroupsGroupPhotosLimited
+)
+
+// GroupsGroupSettings Subject type.
+const (
+ _ = iota
+ GroupsGroupSubjectAuto
+ GroupsGroupSubjectActivityHolidays
+ GroupsGroupSubjectBusiness
+ GroupsGroupSubjectPets
+ GroupsGroupSubjectHealth
+ GroupsGroupSubjectDatingAndCommunication
+ GroupsGroupSubjectGames
+ GroupsGroupSubjectIt
+ GroupsGroupSubjectCinema
+ GroupsGroupSubjectBeautyAndFashion
+ GroupsGroupSubjectCooking
+ GroupsGroupSubjectArtAndCulture
+ GroupsGroupSubjectLiterature
+ GroupsGroupSubjectMobileServicesAndInternet
+ GroupsGroupSubjectMusic
+ GroupsGroupSubjectScienceAndTechnology
+ GroupsGroupSubjectRealEstate
+ GroupsGroupSubjectNewsAndMedia
+ GroupsGroupSubjectSecurity
+ GroupsGroupSubjectEducation
+ GroupsGroupSubjectHomeAndRenovations
+ GroupsGroupSubjectPolitics
+ GroupsGroupSubjectFood
+ GroupsGroupSubjectIndustry
+ GroupsGroupSubjectTravel
+ GroupsGroupSubjectWork
+ GroupsGroupSubjectEntertainment
+ GroupsGroupSubjectReligion
+ GroupsGroupSubjectFamily
+ GroupsGroupSubjectSports
+ GroupsGroupSubjectInsurance
+ GroupsGroupSubjectTelevision
+ GroupsGroupSubjectGoodsAndServices
+ GroupsGroupSubjectHobbies
+ GroupsGroupSubjectFinance
+ GroupsGroupSubjectPhoto
+ GroupsGroupSubjectEsoterics
+ GroupsGroupSubjectElectronicsAndAppliances
+ GroupsGroupSubjectErotic
+ GroupsGroupSubjectHumor
+ GroupsGroupSubjectSocietyHumanities
+ GroupsGroupSubjectDesignAndGraphics
+)
+
+// GroupsGroupSettings Topics type.
+const (
+ GroupsGroupTopicsDisabled = iota
+ GroupsGroupTopicsOpen
+ GroupsGroupTopicsLimited
+)
+
+// GroupsGroupSettings Docs type.
+const (
+ GroupsGroupDocsDisabled = iota
+ GroupsGroupDocsOpen
+ GroupsGroupDocsLimited
+)
+
+// GroupsGroupSettings Audio type.
+const (
+ GroupsGroupAudioDisabled = iota
+ GroupsGroupAudioOpen
+ GroupsGroupAudioLimited
+)
+
+// GroupsGroupSettings Video type.
+const (
+ GroupsGroupVideoDisabled = iota
+ GroupsGroupVideoOpen
+ GroupsGroupVideoLimited
+)
+
+// GroupsGroupSettings Wall type.
+const (
+ GroupsGroupWallDisabled = iota
+ GroupsGroupWallOpen
+ GroupsGroupWallLimited
+ GroupsGroupWallClosed
+)
+
+// GroupsGroupSettings Wiki type.
+const (
+ GroupsGroupWikiDisabled = iota
+ GroupsGroupWikiOpen
+ GroupsGroupWikiLimited
+)
+
+// GroupsGroupSettings struct.
+type GroupsGroupSettings struct {
+ Access int `json:"access"` // Community access settings
+ Address string `json:"address"` // Community's page domain
+ Audio int `json:"audio"` // Audio settings
+ Description string `json:"description"` // Community description
+ Docs int `json:"docs"` // Docs settings
+ ObsceneWords []string `json:"obscene_words"` // The list of stop words
+ Photos int `json:"photos"` // Photos settings
+ PublicCategory int `json:"public_category"` // Information about the group category
+ PublicCategoryList []GroupsGroupPublicCategoryList `json:"public_category_list"`
+
+ // Information about the group subcategory.
+ PublicSubcategory int `json:"public_subcategory"`
+ Rss string `json:"rss"` // URL of the RSS feed
+ Subject int `json:"subject"` // Community subject ID
+ SubjectList []GroupsSubjectItem `json:"subject_list"`
+ Title string `json:"title"` // Community title
+ Topics int `json:"topics"` // Topics settings
+ Video int `json:"video"` // Video settings
+ Wall int `json:"wall"` // Wall settings
+ Website string `json:"website"` // Community website
+ Wiki int `json:"wiki"` // Wiki settings
+ CountryID int `json:"country_id"`
+ CityID int `json:"city_id"`
+ Messages int `json:"messages"`
+ Articles int `json:"articles"`
+ Events int `json:"events"`
+ AgeLimits int `json:"age_limits"`
+
+ // Information whether the obscene filter is enabled.
+ ObsceneFilter BaseBoolInt `json:"obscene_filter"`
+
+ // Information whether the stopwords filter is enabled.
+ ObsceneStopwords BaseBoolInt `json:"obscene_stopwords"`
+ LiveCovers struct {
+ IsEnabled BaseBoolInt `json:"is_enabled"`
+ } `json:"live_covers"`
+ Market GroupsMarketInfo `json:"market"`
+ SectionsList []GroupsSectionsList `json:"sections_list"`
+ MainSection int `json:"main_section"`
+ SecondarySection int `json:"secondary_section"`
+ ActionButton GroupsActionButton `json:"action_button"`
+ Phone string `json:"phone"`
+}
+
+// GroupsSectionsList struct.
+type GroupsSectionsList struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+}
+
+// UnmarshalJSON need for unmarshal dynamic array (Example: [1, "Фотографии"]) to struct.
+//
+// To unmarshal JSON into a value implementing the Unmarshaler interface,
+// Unmarshal calls that value's UnmarshalJSON method.
+// See more https://golang.org/pkg/encoding/json/#Unmarshal
+func (g *GroupsSectionsList) UnmarshalJSON(data []byte) error {
+ var alias []interface{}
+ if err := json.Unmarshal(data, &alias); err != nil {
+ return err
+ }
+
+ if len(alias) != 2 {
+ return &json.UnmarshalTypeError{
+ Value: string(data),
+ Type: reflect.TypeOf((*GroupsSectionsList)(nil)),
+ }
+ }
+
+ // default concrete Go type float64 for JSON numbers
+ id, ok := alias[0].(float64)
+ if !ok {
+ return &json.UnmarshalTypeError{
+ Value: string(data),
+ Type: reflect.TypeOf((*GroupsSectionsList)(nil)),
+ Struct: "GroupsSectionsList",
+ Field: "ID",
+ }
+ }
+
+ name, ok := alias[1].(string)
+ if !ok {
+ return &json.UnmarshalTypeError{
+ Value: string(data),
+ Type: reflect.TypeOf((*GroupsSectionsList)(nil)),
+ Struct: "GroupsSectionsList",
+ Field: "Name",
+ }
+ }
+
+ g.ID = int(id)
+ g.Name = name
+
+ return nil
+}
+
+// GroupsActionType for action_button in groups.
+type GroupsActionType string
+
+// GroupsActionType enums.
+const (
+ GroupsActionTypeOpenURL GroupsActionType = "open_url"
+ GroupsActionTypeSendEmail GroupsActionType = "send_email"
+ GroupsActionTypeCallPhone GroupsActionType = "call_phone"
+ GroupsActionTypeCallVK GroupsActionType = "call_vk"
+ GroupsActionTypeOpenGroupApp GroupsActionType = "open_group_app"
+ GroupsActionTypeOpenApp GroupsActionType = "open_app"
+)
+
+// GroupsActionButton struct.
+type GroupsActionButton struct {
+ ActionType GroupsActionType `json:"action_type"`
+ Target GroupsActionButtonTarget `json:"target"`
+ Title string `json:"title"`
+
+ // IsEnabled for GroupsGroupSettings
+ IsEnabled BaseBoolInt `json:"is_enabled,omitempty"`
+}
+
+// GroupsActionButtonTarget struct.
+type GroupsActionButtonTarget struct {
+ // ActionType == ActionTypeSendEmail
+ Email string `json:"email"`
+
+ // ActionType == ActionTypeCallPhone
+ Phone string `json:"phone"`
+
+ // ActionType == ActionTypeCallVK
+ UserID int `json:"user_id"`
+
+ // ActionType == ActionTypeOpenURL
+ URL string `json:"url"`
+
+ // ActionType == ActionTypeOpenApp
+ GoogleStoreURL string `json:"google_store_url"`
+ ItunesURL string `json:"itunes_url"`
+ // URL string `json:"url"`
+
+ // ActionType == ActionTypeOpenGroupApp
+ AppID int `json:"app_id"`
+
+ IsInternal BaseBoolInt `json:"is_internal"`
+}
+
+// GroupsGroupXtrInvitedBy struct.
+type GroupsGroupXtrInvitedBy struct {
+ AdminLevel int `json:"admin_level"`
+ ID int `json:"id"` // Community ID
+ InvitedBy int `json:"invited_by"` // Inviter ID
+ Name string `json:"name"` // Community name
+ Photo100 string `json:"photo_100"` // URL of square photo of the community with 100 pixels in width
+ Photo200 string `json:"photo_200"` // URL of square photo of the community with 200 pixels in width
+ Photo50 string `json:"photo_50"` // URL of square photo of the community with 50 pixels in width
+ ScreenName string `json:"screen_name"` // Domain of the community page
+ Type string `json:"type"`
+ IsClosed int `json:"is_closed"` // Information whether community is closed
+ IsAdmin BaseBoolInt `json:"is_admin"` // Information whether current user is manager
+ IsMember BaseBoolInt `json:"is_member"` // Information whether current user is member
+ IsAdvertiser BaseBoolInt `json:"is_advertiser"` // Information whether current user is advertiser
+}
+
+// ToMention return mention.
+func (group GroupsGroupXtrInvitedBy) ToMention() string {
+ return fmt.Sprintf("[club%d|%s]", group.ID, group.Name)
+}
+
+// GroupsLinksItem struct.
+type GroupsLinksItem struct {
+ Desc string `json:"desc"` // Link description
+ EditTitle BaseBoolInt `json:"edit_title"` // Information whether the link title can be edited
+ ID int `json:"id"` // Link ID
+ Name string `json:"name"` // Link title
+ Photo100 string `json:"photo_100"` // URL of square image of the link with 100 pixels in width
+ Photo50 string `json:"photo_50"` // URL of square image of the link with 50 pixels in width
+ URL string `json:"url"` // Link URL
+}
+
+// GroupsLongPollEvents struct.
+type GroupsLongPollEvents struct {
+ MessageNew BaseBoolInt `json:"message_new"`
+ MessageReply BaseBoolInt `json:"message_reply"`
+ PhotoNew BaseBoolInt `json:"photo_new"`
+ AudioNew BaseBoolInt `json:"audio_new"`
+ VideoNew BaseBoolInt `json:"video_new"`
+ WallReplyNew BaseBoolInt `json:"wall_reply_new"`
+ WallReplyEdit BaseBoolInt `json:"wall_reply_edit"`
+ WallReplyDelete BaseBoolInt `json:"wall_reply_delete"`
+ WallReplyRestore BaseBoolInt `json:"wall_reply_restore"`
+ WallPostNew BaseBoolInt `json:"wall_post_new"`
+ BoardPostNew BaseBoolInt `json:"board_post_new"`
+ BoardPostEdit BaseBoolInt `json:"board_post_edit"`
+ BoardPostRestore BaseBoolInt `json:"board_post_restore"`
+ BoardPostDelete BaseBoolInt `json:"board_post_delete"`
+ PhotoCommentNew BaseBoolInt `json:"photo_comment_new"`
+ PhotoCommentEdit BaseBoolInt `json:"photo_comment_edit"`
+ PhotoCommentDelete BaseBoolInt `json:"photo_comment_delete"`
+ PhotoCommentRestore BaseBoolInt `json:"photo_comment_restore"`
+ VideoCommentNew BaseBoolInt `json:"video_comment_new"`
+ VideoCommentEdit BaseBoolInt `json:"video_comment_edit"`
+ VideoCommentDelete BaseBoolInt `json:"video_comment_delete"`
+ VideoCommentRestore BaseBoolInt `json:"video_comment_restore"`
+ MarketCommentNew BaseBoolInt `json:"market_comment_new"`
+ MarketCommentEdit BaseBoolInt `json:"market_comment_edit"`
+ MarketCommentDelete BaseBoolInt `json:"market_comment_delete"`
+ MarketCommentRestore BaseBoolInt `json:"market_comment_restore"`
+ MarketOrderNew BaseBoolInt `json:"market_order_new"`
+ MarketOrderEdit BaseBoolInt `json:"market_order_edit"`
+ PollVoteNew BaseBoolInt `json:"poll_vote_new"`
+ GroupJoin BaseBoolInt `json:"group_join"`
+ GroupLeave BaseBoolInt `json:"group_leave"`
+ GroupChangeSettings BaseBoolInt `json:"group_change_settings"`
+ GroupChangePhoto BaseBoolInt `json:"group_change_photo"`
+ GroupOfficersEdit BaseBoolInt `json:"group_officers_edit"`
+ MessageAllow BaseBoolInt `json:"message_allow"`
+ MessageDeny BaseBoolInt `json:"message_deny"`
+ WallRepost BaseBoolInt `json:"wall_repost"`
+ UserBlock BaseBoolInt `json:"user_block"`
+ UserUnblock BaseBoolInt `json:"user_unblock"`
+ MessageEdit BaseBoolInt `json:"message_edit"`
+ MessageTypingState BaseBoolInt `json:"message_typing_state"`
+ LeadFormsNew BaseBoolInt `json:"lead_forms_new"`
+ LikeAdd BaseBoolInt `json:"like_add"`
+ LikeRemove BaseBoolInt `json:"like_remove"`
+ VkpayTransaction BaseBoolInt `json:"vkpay_transaction"`
+ AppPayload BaseBoolInt `json:"app_payload"`
+ MessageRead BaseBoolInt `json:"message_read"`
+ MessageEvent BaseBoolInt `json:"message_event"`
+ DonutSubscriptionCreate BaseBoolInt `json:"donut_subscription_create"`
+ DonutSubscriptionProlonged BaseBoolInt `json:"donut_subscription_prolonged"`
+ DonutSubscriptionExpired BaseBoolInt `json:"donut_subscription_expired"`
+ DonutSubscriptionCancelled BaseBoolInt `json:"donut_subscription_cancelled"`
+ DonutSubscriptionPriceChanged BaseBoolInt `json:"donut_subscription_price_changed"`
+ DonutMoneyWithdraw BaseBoolInt `json:"donut_money_withdraw"`
+ DonutMoneyWithdrawError BaseBoolInt `json:"donut_money_withdraw_error"`
+
+ // Bugs
+ // MessagesEdit BaseBoolInt `json:"messages_edit"`
+ // WallNew BaseBoolInt `json:"wall_new"`
+ // WallNewReply BaseBoolInt `json:"wall_new_reply"`
+ // WallEditReply BaseBoolInt `json:"wall_edit_reply"`
+}
+
+// GroupsLongPollServer struct.
+type GroupsLongPollServer struct {
+ Key string `json:"key"` // Long Poll key
+ Server string `json:"server"` // Long Poll server address
+ Ts string `json:"ts"` // Number of the last event
+}
+
+// TODO: func (g GroupsLongPollServer) GetURL() string {
+
+// GroupsLongPollSettings struct.
+type GroupsLongPollSettings struct {
+ APIVersion string `json:"api_version"` // API version used for the events
+ Events GroupsLongPollEvents `json:"events"`
+ IsEnabled BaseBoolInt `json:"is_enabled"` // Shows whether Long Poll is enabled
+}
+
+// GroupsMarketType ...
+type GroupsMarketType string
+
+// Possible values.
+const (
+ GroupsMarketBasic GroupsMarketType = "basic"
+ GroupsMarketAdvanced GroupsMarketType = "advanced"
+)
+
+// GroupsMarketInfo struct.
+type GroupsMarketInfo struct {
+ // information about the type of store. Returned if the group includes
+ // the "Products" section.
+ Type GroupsMarketType `json:"type,omitempty"`
+ ContactID int `json:"contact_id,omitempty"` // Contact person ID
+ Currency MarketCurrency `json:"currency,omitempty"`
+ CurrencyText string `json:"currency_text,omitempty"` // Currency name
+ Enabled BaseBoolInt `json:"enabled"` // Information whether the market is enabled
+ CommentsEnabled BaseBoolInt `json:"comments_enabled,omitempty"`
+ CanMessage BaseBoolInt `json:"can_message,omitempty"`
+ MainAlbumID int `json:"main_album_id,omitempty"` // Main market album ID
+ PriceMax string `json:"price_max,omitempty"` // Maximum price
+ PriceMin string `json:"price_min,omitempty"` // Minimum price
+ Wiki PagesWikipageFull `json:"wiki,omitempty"`
+ CityIDs []int `json:"city_ids"`
+ CountryIDs []int `json:"country_ids,omitempty"`
+}
+
+// GroupsGroupRole Role type.
+const (
+ GroupsGroupRoleModerator = "moderator"
+ GroupsGroupRoleEditor = "editor"
+ GroupsGroupRoleAdministrator = "administrator"
+ GroupsGroupRoleCreator = "creator"
+)
+
+// GroupsMemberRole struct.
+type GroupsMemberRole struct {
+ ID int `json:"id"` // User ID
+ Role string `json:"role"`
+ Permissions []string `json:"permissions"`
+}
+
+// GroupsMemberRoleXtrUsersUser struct.
+type GroupsMemberRoleXtrUsersUser struct {
+ UsersUser
+ Role string `json:"role"`
+ Permissions []string `json:"permissions"`
+}
+
+// GroupsMemberStatus struct.
+type GroupsMemberStatus struct {
+ Member BaseBoolInt `json:"member"` // Information whether user is a member of the group
+ UserID int `json:"user_id"` // User ID
+ Permissions []string `json:"permissions"`
+}
+
+// GroupsMemberStatusFull struct.
+type GroupsMemberStatusFull struct {
+ Invitation BaseBoolInt `json:"invitation"` // Information whether user has been invited to the group
+ Member BaseBoolInt `json:"member"` // Information whether user is a member of the group
+ Request BaseBoolInt `json:"request"` // Information whether user has send request to the group
+ CanInvite BaseBoolInt `json:"can_invite"` // Information whether user can be invite
+ CanRecall BaseBoolInt `json:"can_recall"` // Information whether user's invite to the group can be recalled
+ UserID int `json:"user_id"` // User ID
+}
+
+// GroupsOnlineStatus Status type.
+const (
+ GroupsOnlineStatusTypeNone = "none"
+ GroupsOnlineStatusTypeOnline = "online"
+ GroupsOnlineStatusTypeAnswerMark = "answer_mark"
+)
+
+// GroupsOnlineStatus struct.
+type GroupsOnlineStatus struct {
+ Minutes int `json:"minutes"` // Estimated time of answer (for status = answer_mark)
+ Status string `json:"status"`
+}
+
+// GroupsOwnerXtrBanInfo struct.
+type GroupsOwnerXtrBanInfo struct {
+ BanInfo GroupsBanInfo `json:"ban_info"`
+ Group GroupsGroup `json:"group"`
+ Profile UsersUser `json:"profile"`
+ Type string `json:"type"`
+}
+
+// GroupsSubjectItem struct.
+type GroupsSubjectItem struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+}
+
+// GroupsTokenPermissionSetting struct.
+type GroupsTokenPermissionSetting struct {
+ Name string `json:"name"`
+ Setting int `json:"setting"`
+}
+
+// GroupsTokenPermissions struct.
+type GroupsTokenPermissions struct {
+ Mask int `json:"mask"`
+ Permissions []GroupsTokenPermissionSetting `json:"permissions"`
+}
+
+// GroupsTag struct.
+type GroupsTag struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+ Color string `json:"color"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/leadforms.go b/vendor/github.com/SevereCloud/vksdk/v2/object/leadforms.go
new file mode 100644
index 00000000..6159fdf2
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/leadforms.go
@@ -0,0 +1,44 @@
+package object
+
+// LeadFormsForm struct.
+type LeadFormsForm struct {
+ FormID int `json:"form_id"`
+ GroupID int `json:"group_id"`
+ Photo interface{} `json:"photo"`
+ Name string `json:"name"`
+ Title string `json:"title"`
+ Description string `json:"description"`
+ Confirmation string `json:"confirmation"`
+ SiteLinkURL string `json:"site_link_url"`
+ PolicyLinkURL string `json:"policy_link_url"`
+ Questions []struct {
+ Type string `json:"type"`
+ Key string `json:"key"`
+ Label string `json:"label,omitempty"`
+ Options []struct {
+ Label string `json:"label"`
+ Key string `json:"key"`
+ } `json:"options,omitempty"`
+ } `json:"questions"`
+ Active int `json:"active"`
+ LeadsCount int `json:"leads_count"`
+ PixelCode string `json:"pixel_code"`
+ OncePerUser int `json:"once_per_user"`
+ NotifyAdmins string `json:"notify_admins"`
+ NotifyEmails string `json:"notify_emails"`
+ URL string `json:"url"`
+}
+
+// LeadFormsLead struct.
+type LeadFormsLead struct {
+ LeadID string `json:"lead_id"`
+ UserID string `json:"user_id"`
+ Date string `json:"date"`
+ Answers []struct {
+ Key string `json:"key"`
+ Answer struct {
+ Value string `json:"value"`
+ } `json:"answer"`
+ } `json:"answers"`
+ AdID string `json:"ad_id"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/leads.go b/vendor/github.com/SevereCloud/vksdk/v2/object/leads.go
new file mode 100644
index 00000000..a5d78fa0
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/leads.go
@@ -0,0 +1,55 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// LeadsChecked struct.
+type LeadsChecked struct {
+ Reason string `json:"reason"` // Reason why user can't start the lead
+ Result string `json:"result"`
+ Sid string `json:"sid"` // Session ID
+ StartLink string `json:"start_link"` // URL user should open to start the lead
+}
+
+// LeadsComplete struct.
+type LeadsComplete struct {
+ Cost int `json:"cost"` // Offer cost
+ Limit int `json:"limit"` // Offer limit
+ Spent int `json:"spent"` // Amount of spent votes
+ Success BaseBoolInt `json:"success"`
+ TestMode BaseBoolInt `json:"test_mode"` // Information whether test mode is enabled
+}
+
+// LeadsEntry struct.
+type LeadsEntry struct {
+ Aid int `json:"aid"` // Application ID
+ Comment string `json:"comment"` // Comment text
+ Date int `json:"date"` // Date when the action has been started in Unixtime
+ Sid string `json:"sid"` // Session string ID
+ StartDate int `json:"start_date"` // Start date in Unixtime (for status=2)
+ Status int `json:"status"` // Action type
+ TestMode BaseBoolInt `json:"test_mode"` // Information whether test mode is enabled
+ UID int `json:"uid"` // User ID
+}
+
+// LeadsLead struct.
+type LeadsLead struct {
+ Completed int `json:"completed"` // Completed offers number
+ Cost int `json:"cost"` // Offer cost
+ Days LeadsLeadDays `json:"days"`
+ Impressions int `json:"impressions"` // Impressions number
+ Limit int `json:"limit"` // Lead limit
+ Spent int `json:"spent"` // Amount of spent votes
+ Started int `json:"started"` // Started offers number
+}
+
+// LeadsLeadDays struct.
+type LeadsLeadDays struct {
+ Completed int `json:"completed"` // Completed offers number
+ Impressions int `json:"impressions"` // Impressions number
+ Spent int `json:"spent"` // Amount of spent votes
+ Started int `json:"started"` // Started offers number
+}
+
+// LeadsStart struct.
+type LeadsStart struct {
+ TestMode BaseBoolInt `json:"test_mode"` // Information whether test mode is enabled
+ VkSid string `json:"vk_sid"` // Session data
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/market.go b/vendor/github.com/SevereCloud/vksdk/v2/object/market.go
new file mode 100644
index 00000000..8f5d172f
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/market.go
@@ -0,0 +1,244 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+)
+
+// Information whether the MarketMarketItem is available.
+const (
+ MarketItemAvailable = iota
+ MarketItemRemoved
+ MarketItemUnavailable
+)
+
+// MarketCurrency struct.
+type MarketCurrency struct {
+ ID int `json:"id"` // Currency ID
+ Name string `json:"name"` // Currency sign
+}
+
+// MarketMarketAlbum struct.
+type MarketMarketAlbum struct {
+ Count int `json:"count"` // Items number
+ ID int `json:"id"` // Market album ID
+ OwnerID int `json:"owner_id"` // Market album owner's ID
+ Photo PhotosPhoto `json:"photo"`
+ Title string `json:"title"` // Market album title
+ UpdatedTime int `json:"updated_time"` // Date when album has been updated last time in Unixtime
+}
+
+// ToAttachment return attachment format.
+func (marketAlbum MarketMarketAlbum) ToAttachment() string {
+ return fmt.Sprintf("market_album%d_%d", marketAlbum.OwnerID, marketAlbum.ID)
+}
+
+// MarketMarketCategory struct.
+type MarketMarketCategory struct {
+ ID int `json:"id"` // Category ID
+ Name string `json:"name"` // Category name
+ Section MarketSection `json:"section"`
+}
+
+// MarketMarketItem struct.
+type MarketMarketItem struct {
+ AccessKey string `json:"access_key"` // Access key for the market item
+ Availability int `json:"availability"` // Information whether the item is available
+ Category MarketMarketCategory `json:"category"`
+
+ // Date when the item has been created in Unixtime.
+ Date int `json:"date,omitempty"`
+ Description string `json:"description"` // Item description
+ ID int `json:"id"` // Item ID
+ OwnerID int `json:"owner_id"` // Item owner's ID
+ Price MarketPrice `json:"price"`
+ ThumbPhoto string `json:"thumb_photo"` // URL of the preview image
+ Title string `json:"title"` // Item title
+ CanComment BaseBoolInt `json:"can_comment"`
+ CanRepost BaseBoolInt `json:"can_repost"`
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ IsMainVariant BaseBoolInt `json:"is_main_variant"`
+ AlbumsIDs []int `json:"albums_ids"`
+ Photos []PhotosPhoto `json:"photos"`
+ Likes BaseLikesInfo `json:"likes"`
+ Reposts BaseRepostsInfo `json:"reposts"`
+ ViewsCount int `json:"views_count,omitempty"`
+ URL string `json:"url"` // URL to item
+ ButtonTitle string `json:"button_title"`
+ ExternalID string `json:"external_id"`
+ Dimensions MarketDimensions `json:"dimensions"`
+ Weight int `json:"weight"`
+ VariantsGroupingID int `json:"variants_grouping_id"`
+ PropertyValues []MarketMarketItemProperty `json:"property_values"`
+ CartQuantity int `json:"cart_quantity"`
+}
+
+// UnmarshalJSON MarketMarketItem.
+//
+// BUG(VK): https://github.com/SevereCloud/vksdk/issues/147
+func (market *MarketMarketItem) UnmarshalJSON(data []byte) error {
+ if bytes.Equal(data, []byte("false")) {
+ return nil
+ }
+
+ type renamedMarketMarketItem MarketMarketItem
+
+ var r renamedMarketMarketItem
+
+ err := json.Unmarshal(data, &r)
+ if err != nil {
+ return err
+ }
+
+ *market = MarketMarketItem(r)
+
+ return nil
+}
+
+// MarketMarketItemProperty struct.
+type MarketMarketItemProperty struct {
+ VariantID int `json:"variant_id"`
+ VariantName string `json:"variant_name"`
+ PropertyName string `json:"property_name"`
+}
+
+// MarketDimensions struct.
+type MarketDimensions struct {
+ Width int `json:"width"`
+ Height int `json:"height"`
+ Length int `json:"length"`
+}
+
+// ToAttachment return attachment format.
+func (market MarketMarketItem) ToAttachment() string {
+ return fmt.Sprintf("market%d_%d", market.OwnerID, market.ID)
+}
+
+// MarketPrice struct.
+type MarketPrice struct {
+ Amount string `json:"amount"` // Amount
+ Currency MarketCurrency `json:"currency"`
+ DiscountRate int `json:"discount_rate"`
+ OldAmount string `json:"old_amount"`
+ Text string `json:"text"` // Text
+ OldAmountText string `json:"old_amount_text"`
+}
+
+// UnmarshalJSON MarketPrice.
+//
+// BUG(VK): unavailable product, in fave.get return [].
+func (m *MarketPrice) UnmarshalJSON(data []byte) error {
+ if bytes.Equal(data, []byte("[]")) {
+ return nil
+ }
+
+ type renamedMarketPrice MarketPrice
+
+ var r renamedMarketPrice
+
+ err := json.Unmarshal(data, &r)
+ if err != nil {
+ return err
+ }
+
+ *m = MarketPrice(r)
+
+ return nil
+}
+
+// MarketSection struct.
+type MarketSection struct {
+ ID int `json:"id"` // Section ID
+ Name string `json:"name"` // Section name
+}
+
+// MarketOrderStatus order status.
+type MarketOrderStatus int
+
+// Possible values.
+const (
+ MarketOrderNew MarketOrderStatus = iota
+ MarketOrderPending
+ MarketOrderProcessing
+ MarketOrderShipped
+ MarketOrderComplete
+ MarketOrderCanceled
+ MarketOrderRefund
+)
+
+// MarketOrder struct.
+type MarketOrder struct {
+ ID int `json:"id"`
+ GroupID int `json:"group_id"`
+ UserID int `json:"user_id"`
+ Date int `json:"date"`
+ Status MarketOrderStatus `json:"status"`
+ ItemsCount int `json:"items_count"`
+ TotalPrice MarketPrice `json:"total_price"`
+ DisplayOrderID string `json:"display_order_id"`
+ Comment string `json:"comment"`
+ PreviewOrderItems []MarketOrderItem `json:"preview_order_items"`
+ PriceDetails []MarketPriceDetail `json:"price_details"`
+ Delivery MarketOrderDelivery `json:"delivery"`
+ Recipient MarketOrderRecipient `json:"recipient"`
+}
+
+// MarketOrderDelivery struct.
+type MarketOrderDelivery struct {
+ TrackNumber string `json:"track_number"`
+ TrackLink string `json:"track_link"`
+ Address string `json:"address"`
+ Type string `json:"type"`
+ DeliveryPoint MarketDeliveryPoint `json:"delivery_point,omitempty"`
+}
+
+// MarketDeliveryPoint struct.
+type MarketDeliveryPoint struct {
+ ID int `json:"id"`
+ ExternalID string `json:"external_id"`
+ OutpostOnly BaseBoolInt `json:"outpost_only"`
+ CashOnly BaseBoolInt `json:"cash_only"`
+ Address MarketDeliveryPointAddress `json:"address"`
+ DisplayTitle string `json:"display_title"`
+ ServiceID int `json:"service_id"`
+}
+
+// MarketDeliveryPointAddress struct.
+type MarketDeliveryPointAddress struct {
+ ID int `json:"id"`
+ Address string `json:"address"`
+ CityID int `json:"city_id"`
+ CountryID int `json:"country_id"`
+ Latitude float64 `json:"latitude"`
+ Longitude float64 `json:"longitude"`
+ Phone string `json:"phone"`
+ Title string `json:"title"`
+ WorkInfoStatus string `json:"work_info_status"`
+}
+
+// MarketOrderRecipient struct.
+type MarketOrderRecipient struct {
+ Name string `json:"name"`
+ Phone string `json:"phone"`
+ DisplayText string `json:"display_text"`
+}
+
+// MarketOrderItem struct.
+type MarketOrderItem struct {
+ OwnerID int `json:"owner_id"`
+ ItemID int `json:"item_id"`
+ Price MarketPrice `json:"price"`
+ Quantity int `json:"quantity"`
+ Item MarketMarketItem `json:"item"`
+ Title string `json:"title"`
+ Photo PhotosPhoto `json:"photo"`
+ Variants []string `json:"variants"`
+}
+
+// MarketPriceDetail struct.
+type MarketPriceDetail struct {
+ Title string `json:"title"`
+ Price MarketPrice `json:"price"`
+ IsAccent BaseBoolInt `json:"is_accent,omitempty"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/messages.go b/vendor/github.com/SevereCloud/vksdk/v2/object/messages.go
new file mode 100644
index 00000000..dc2648b1
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/messages.go
@@ -0,0 +1,756 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "encoding/json"
+ "fmt"
+)
+
+// MessagesAudioMessage struct.
+type MessagesAudioMessage struct {
+ AccessKey string `json:"access_key"` // Access key for the document
+ ID int `json:"id"` // Document ID
+ OwnerID int `json:"owner_id"` // Document owner ID
+ Duration int `json:"duration"` // Audio message duration in seconds
+ LinkMp3 string `json:"link_mp3"` // MP3 file URL
+ LinkOgg string `json:"link_ogg"` // OGG file URL
+ Waveform []int `json:"waveform"` // Sound visualisation
+}
+
+// ToAttachment return attachment format.
+func (doc MessagesAudioMessage) ToAttachment() string {
+ return fmt.Sprintf("doc%d_%d", doc.OwnerID, doc.ID)
+}
+
+// MessagesGraffiti struct.
+type MessagesGraffiti struct {
+ AccessKey string `json:"access_key"` // Access key for the document
+ ID int `json:"id"` // Document ID
+ OwnerID int `json:"owner_id"` // Document owner ID
+ URL string `json:"url"` // Graffiti URL
+ Width int `json:"width"` // Graffiti width
+ Height int `json:"height"` // Graffiti height
+}
+
+// ToAttachment return attachment format.
+func (doc MessagesGraffiti) ToAttachment() string {
+ return fmt.Sprintf("doc%d_%d", doc.OwnerID, doc.ID)
+}
+
+// MessagesMessage struct.
+type MessagesMessage struct {
+ // Only for messages from community. Contains user ID of community admin,
+ // who sent this message.
+ AdminAuthorID int `json:"admin_author_id"`
+ Action MessagesMessageAction `json:"action"`
+ Attachments []MessagesMessageAttachment `json:"attachments"`
+
+ // Unique auto-incremented number for all messages with this peer.
+ ConversationMessageID int `json:"conversation_message_id"`
+
+ // Date when the message has been sent in Unixtime.
+ Date int `json:"date"`
+
+ // Message author's ID.
+ FromID int `json:"from_id"`
+
+ // Forwarded messages.
+ FwdMessages []MessagesMessage `json:"fwd_Messages"`
+ ReplyMessage *MessagesMessage `json:"reply_message"`
+ Geo BaseMessageGeo `json:"geo"`
+ PinnedAt int `json:"pinned_at,omitempty"`
+ ID int `json:"id"` // Message ID
+ Deleted BaseBoolInt `json:"deleted"` // Is it an deleted message
+ Important BaseBoolInt `json:"important"` // Is it an important message
+ IsHidden BaseBoolInt `json:"is_hidden"`
+ IsCropped BaseBoolInt `json:"is_cropped"`
+ Out BaseBoolInt `json:"out"` // Information whether the message is outcoming
+ WasListened BaseBoolInt `json:"was_listened,omitempty"`
+ Keyboard MessagesKeyboard `json:"keyboard"`
+ Template MessagesTemplate `json:"template"`
+ Payload string `json:"payload"`
+ PeerID int `json:"peer_id"` // Peer ID
+
+ // ID used for sending messages. It returned only for outgoing messages.
+ RandomID int `json:"random_id"`
+ Ref string `json:"ref"`
+ RefSource string `json:"ref_source"`
+ Text string `json:"text"` // Message text
+ UpdateTime int `json:"update_time"` // Date when the message has been updated in Unixtime
+ MembersCount int `json:"members_count"` // Members number
+ ExpireTTL int `json:"expire_ttl"`
+}
+
+// MessagesBasePayload struct.
+type MessagesBasePayload struct {
+ ButtonType string `json:"button_type,omitempty"`
+ Command string `json:"command,omitempty"`
+ Payload string `json:"payload,omitempty"`
+}
+
+// Command for MessagesBasePayload.
+const (
+ CommandNotSupportedButton = "not_supported_button"
+)
+
+// MessagesKeyboard struct.
+type MessagesKeyboard struct {
+ AuthorID int `json:"author_id,omitempty"` // Community or bot, which set this keyboard
+ Buttons [][]MessagesKeyboardButton `json:"buttons"`
+ OneTime BaseBoolInt `json:"one_time,omitempty"` // Should this keyboard disappear on first use
+ Inline BaseBoolInt `json:"inline,omitempty"`
+}
+
+// NewMessagesKeyboard returns a new MessagesKeyboard.
+func NewMessagesKeyboard(oneTime BaseBoolInt) *MessagesKeyboard {
+ return &MessagesKeyboard{
+ Buttons: [][]MessagesKeyboardButton{},
+ OneTime: oneTime,
+ }
+}
+
+// NewMessagesKeyboardInline returns a new inline MessagesKeyboard.
+func NewMessagesKeyboardInline() *MessagesKeyboard {
+ return &MessagesKeyboard{
+ Buttons: [][]MessagesKeyboardButton{},
+ Inline: true,
+ }
+}
+
+// AddRow add row in MessagesKeyboard.
+func (keyboard *MessagesKeyboard) AddRow() *MessagesKeyboard {
+ if len(keyboard.Buttons) == 0 {
+ keyboard.Buttons = make([][]MessagesKeyboardButton, 1)
+ } else {
+ row := make([]MessagesKeyboardButton, 0)
+ keyboard.Buttons = append(keyboard.Buttons, row)
+ }
+
+ return keyboard
+}
+
+// AddTextButton add Text button in last row.
+func (keyboard *MessagesKeyboard) AddTextButton(label string, payload interface{}, color string) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonText,
+ Label: label,
+ Payload: string(b),
+ },
+ Color: color,
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// AddOpenLinkButton add Open Link button in last row.
+func (keyboard *MessagesKeyboard) AddOpenLinkButton(link, label string, payload interface{}) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonOpenLink,
+ Payload: string(b),
+ Label: label,
+ Link: link,
+ },
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// AddLocationButton add Location button in last row.
+func (keyboard *MessagesKeyboard) AddLocationButton(payload interface{}) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonLocation,
+ Payload: string(b),
+ },
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// AddVKPayButton add VK Pay button in last row.
+func (keyboard *MessagesKeyboard) AddVKPayButton(payload interface{}, hash string) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonVKPay,
+ Payload: string(b),
+ Hash: hash,
+ },
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// AddVKAppsButton add VK Apps button in last row.
+func (keyboard *MessagesKeyboard) AddVKAppsButton(
+ appID, ownerID int,
+ payload interface{},
+ label, hash string,
+) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonVKApp,
+ AppID: appID,
+ OwnerID: ownerID,
+ Payload: string(b),
+ Label: label,
+ Hash: hash,
+ },
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// AddCallbackButton add Callback button in last row.
+func (keyboard *MessagesKeyboard) AddCallbackButton(label string, payload interface{}, color string) *MessagesKeyboard {
+ b, err := json.Marshal(payload)
+ if err != nil {
+ panic(err)
+ }
+
+ button := MessagesKeyboardButton{
+ Action: MessagesKeyboardButtonAction{
+ Type: ButtonCallback,
+ Label: label,
+ Payload: string(b),
+ },
+ Color: color,
+ }
+
+ lastRow := len(keyboard.Buttons) - 1
+ keyboard.Buttons[lastRow] = append(keyboard.Buttons[lastRow], button)
+
+ return keyboard
+}
+
+// ToJSON returns the JSON encoding of MessagesKeyboard.
+func (keyboard MessagesKeyboard) ToJSON() string {
+ b, _ := json.Marshal(keyboard)
+ return string(b)
+}
+
+// MessagesKeyboardButton struct.
+type MessagesKeyboardButton struct {
+ Action MessagesKeyboardButtonAction `json:"action"`
+ Color string `json:"color,omitempty"` // Button color
+}
+
+// MessagesKeyboardButtonAction struct.
+type MessagesKeyboardButtonAction struct {
+ AppID int `json:"app_id,omitempty"` // Fragment value in app link like vk.com/app{app_id}_-654321#hash
+ Hash string `json:"hash,omitempty"` // Fragment value in app link like vk.com/app123456_-654321#{hash}
+ Label string `json:"label,omitempty"` // Label for button
+ OwnerID int `json:"owner_id,omitempty"` // Fragment value in app link like vk.com/app123456_{owner_id}#hash
+ Payload string `json:"payload,omitempty"` // Additional data sent along with message for developer convenience
+ Type string `json:"type"` // Button type
+ Link string `json:"link,omitempty"` // Link URL
+}
+
+// MessagesEventDataShowSnackbar struct.
+type MessagesEventDataShowSnackbar struct {
+ Text string `json:"text,omitempty"`
+}
+
+// MessagesEventDataOpenLink struct.
+type MessagesEventDataOpenLink struct {
+ Link string `json:"link,omitempty"`
+}
+
+// MessagesEventDataOpenApp struct.
+type MessagesEventDataOpenApp struct {
+ AppID int `json:"app_id,omitempty"`
+ OwnerID int `json:"owner_id,omitempty"`
+ Hash string `json:"hash,omitempty"`
+}
+
+// MessagesEventData struct.
+type MessagesEventData struct {
+ Type string `json:"type"`
+ MessagesEventDataShowSnackbar
+ MessagesEventDataOpenLink
+ MessagesEventDataOpenApp
+}
+
+// NewMessagesEventDataShowSnackbar show disappearing message.
+//
+// Contains the field text - the text you want to print
+// (maximum 90 characters). Snackbar is shown for 10 seconds and automatically
+// hides, while the user has the ability to flick it off the screen.
+func NewMessagesEventDataShowSnackbar(text string) *MessagesEventData {
+ return &MessagesEventData{
+ Type: "show_snackbar",
+ MessagesEventDataShowSnackbar: MessagesEventDataShowSnackbar{
+ Text: text,
+ },
+ }
+}
+
+// NewMessagesEventDataOpenLink open the link. Click on the specified address.
+func NewMessagesEventDataOpenLink(link string) *MessagesEventData {
+ return &MessagesEventData{
+ Type: "open_link",
+ MessagesEventDataOpenLink: MessagesEventDataOpenLink{
+ Link: link,
+ },
+ }
+}
+
+// NewMessagesEventDataOpenApp open the link. Click on the specified address.
+func NewMessagesEventDataOpenApp(appID, ownerID int, hash string) *MessagesEventData {
+ return &MessagesEventData{
+ Type: "open_app",
+ MessagesEventDataOpenApp: MessagesEventDataOpenApp{
+ AppID: appID,
+ OwnerID: ownerID,
+ Hash: hash,
+ },
+ }
+}
+
+// ToJSON returns the JSON encoding of MessagesEventData.
+func (eventData MessagesEventData) ToJSON() string {
+ b, _ := json.Marshal(eventData)
+ return string(b)
+}
+
+// MessagesTemplate struct.
+//
+// https://vk.com/dev/bot_docs_templates
+type MessagesTemplate struct {
+ Type string `json:"type"`
+ Elements []MessagesTemplateElement `json:"elements"`
+}
+
+// ToJSON returns the JSON encoding of MessagesKeyboard.
+func (template MessagesTemplate) ToJSON() string {
+ b, _ := json.Marshal(template)
+ return string(b)
+}
+
+// MessagesTemplateElement struct.
+type MessagesTemplateElement struct {
+ MessagesTemplateElementCarousel
+}
+
+// MessagesTemplateElementCarousel struct.
+type MessagesTemplateElementCarousel struct {
+ Title string `json:"title"`
+ Action MessagesTemplateElementCarouselAction `json:"action"`
+ Description string `json:"description"`
+ Photo PhotosPhoto `json:"photo"`
+ Buttons []MessagesKeyboardButton `json:"buttons"`
+}
+
+// MessagesTemplateElementCarouselAction struct.
+type MessagesTemplateElementCarouselAction struct {
+ Type string `json:"type"`
+ Link string `json:"link"`
+}
+
+// MessageContentSourceMessage ...
+type MessageContentSourceMessage struct {
+ OwnerID int `json:"owner_id,omitempty"`
+ PeerID int `json:"peer_id,omitempty"`
+ ConversationMessageID int `json:"conversation_message_id,omitempty"`
+}
+
+// MessageContentSourceURL ...
+type MessageContentSourceURL struct {
+ URL string `json:"url,omitempty"`
+}
+
+// MessageContentSource struct.
+//
+// https://vk.com/dev/bots_docs_2
+type MessageContentSource struct {
+ Type string `json:"type"`
+ MessageContentSourceMessage // type message
+ MessageContentSourceURL // type url
+
+}
+
+// NewMessageContentSourceMessage ...
+func NewMessageContentSourceMessage(ownerID, peerID, conversationMessageID int) *MessageContentSource {
+ return &MessageContentSource{
+ Type: "message",
+ MessageContentSourceMessage: MessageContentSourceMessage{
+ OwnerID: ownerID,
+ PeerID: peerID,
+ ConversationMessageID: conversationMessageID,
+ },
+ }
+}
+
+// NewMessageContentSourceURL ...
+func NewMessageContentSourceURL(u string) *MessageContentSource {
+ return &MessageContentSource{
+ Type: "url",
+ MessageContentSourceURL: MessageContentSourceURL{
+ URL: u,
+ },
+ }
+}
+
+// ToJSON returns the JSON encoding of MessageContentSource.
+func (contentSource MessageContentSource) ToJSON() string {
+ b, _ := json.Marshal(contentSource)
+ return string(b)
+}
+
+// MessagesChat struct.
+type MessagesChat struct {
+ AdminID int `json:"admin_id"` // Chat creator ID
+ ID int `json:"id"` // Chat ID
+ IsDefaultPhoto BaseBoolInt `json:"is_default_photo"`
+ Photo100 string `json:"photo_100"` // URL of the preview image with 100 px in width
+ Photo200 string `json:"photo_200"` // URL of the preview image with 200 px in width
+ Photo50 string `json:"photo_50"` // URL of the preview image with 50 px in width
+ Title string `json:"title"` // Chat title
+ Type string `json:"type"` // Chat type
+ Users []int `json:"users"`
+ MembersCount int `json:"members_count"`
+}
+
+// MessagesChatPreview struct.
+type MessagesChatPreview struct {
+ AdminID int `json:"admin_id"`
+ MembersCount int `json:"members_count"`
+ Members []int `json:"members"`
+ Title string `json:"title"`
+ Photo MessagesChatSettingsPhoto `json:"photo"`
+ LocalID int `json:"local_id"`
+ Joined bool `json:"joined"`
+ ChatSettings MessagesConversationChatSettings `json:"chat_settings"`
+}
+
+// MessagesChatPushSettings struct.
+type MessagesChatPushSettings struct {
+ DisabledUntil int `json:"disabled_until"` // Time until that notifications are disabled
+ Sound BaseBoolInt `json:"sound"` // Information whether the sound is on
+}
+
+// MessagesChatSettingsPhoto struct.
+type MessagesChatSettingsPhoto struct {
+ Photo100 string `json:"photo_100"`
+ Photo200 string `json:"photo_200"`
+ Photo50 string `json:"photo_50"`
+ IsDefaultPhoto BaseBoolInt `json:"is_default_photo"`
+}
+
+// MessagesConversation struct.
+type MessagesConversation struct {
+ CanWrite MessagesConversationCanWrite `json:"can_write"`
+ ChatSettings MessagesConversationChatSettings `json:"chat_settings"`
+ InRead int `json:"in_read"` // Last message user have read
+ LastMessageID int `json:"last_message_id"` // ID of the last message in conversation
+ Mentions []int `json:"mentions"` // IDs of messages with mentions
+ MessageRequest string `json:"message_request"`
+
+ // Last outcoming message have been read by the opponent.
+ OutRead int `json:"out_read"`
+ Peer MessagesConversationPeer `json:"peer"`
+ PushSettings MessagesConversationPushSettings `json:"push_settings"`
+ Important BaseBoolInt `json:"important"`
+ Unanswered BaseBoolInt `json:"unanswered"`
+ IsMarkedUnread BaseBoolInt `json:"is_marked_unread"`
+ UnreadCount int `json:"unread_count"` // Unread messages number
+ CurrentKeyboard MessagesKeyboard `json:"current_keyboard"`
+ SortID struct {
+ MajorID int `json:"major_id"`
+ MinorID int `json:"minor_id"`
+ } `json:"sort_id"`
+}
+
+// MessagesConversationCanWrite struct.
+type MessagesConversationCanWrite struct {
+ Allowed BaseBoolInt `json:"allowed"`
+ Reason int `json:"reason"`
+}
+
+// MessagesConversationChatSettings struct.
+type MessagesConversationChatSettings struct {
+ MembersCount int `json:"members_count"`
+ Photo MessagesChatSettingsPhoto `json:"photo"`
+ PinnedMessage MessagesPinnedMessage `json:"pinned_message"`
+ State string `json:"state"`
+ Title string `json:"title"`
+ ActiveIDs []int `json:"active_ids"`
+ ACL struct {
+ CanInvite BaseBoolInt `json:"can_invite"`
+ CanChangeInfo BaseBoolInt `json:"can_change_info"`
+ CanChangePin BaseBoolInt `json:"can_change_pin"`
+ CanPromoteUsers BaseBoolInt `json:"can_promote_users"`
+ CanSeeInviteLink BaseBoolInt `json:"can_see_invite_link"`
+ CanChangeInviteLink BaseBoolInt `json:"can_change_invite_link"`
+ CanCopyChat BaseBoolInt `json:"can_copy_chat"`
+ CanModerate BaseBoolInt `json:"can_moderate"`
+ CanCall BaseBoolInt `json:"can_call"`
+ CanUseMassMentions BaseBoolInt `json:"can_use_mass_mentions"`
+ CanChangeServiceType BaseBoolInt `json:"can_change_service_type"`
+ } `json:"acl"`
+ IsGroupChannel BaseBoolInt `json:"is_group_channel"`
+ IsDisappearing BaseBoolInt `json:"is_disappearing"`
+ IsService BaseBoolInt `json:"is_service"`
+ IsCreatedForCall BaseBoolInt `json:"is_created_for_call"`
+ OwnerID int `json:"owner_id"`
+ AdminIDs []int `json:"admin_ids"`
+ Permissions MessagesChatPermissions `json:"permissions"`
+}
+
+// MessagesChatPermission struct.
+type MessagesChatPermission string
+
+// Possible values.
+const (
+ OwnerChatPermission MessagesChatPermission = "owner"
+ OwnerAndAdminsChatPermission MessagesChatPermission = "owner_and_admins"
+ AllChatPermission MessagesChatPermission = "all"
+)
+
+// MessagesChatPermissions struct.
+type MessagesChatPermissions struct {
+ Invite MessagesChatPermission `json:"invite"`
+ ChangeInfo MessagesChatPermission `json:"change_info"`
+ ChangePin MessagesChatPermission `json:"change_pin"`
+ UseMassMentions MessagesChatPermission `json:"use_mass_mentions"`
+ SeeInviteLink MessagesChatPermission `json:"see_invite_link"`
+ Call MessagesChatPermission `json:"call"`
+ ChangeAdmins MessagesChatPermission `json:"change_admins"`
+}
+
+// MessagesConversationPeer struct.
+type MessagesConversationPeer struct {
+ ID int `json:"id"`
+ LocalID int `json:"local_id"`
+ Type string `json:"type"`
+}
+
+// MessagesConversationPushSettings struct.
+type MessagesConversationPushSettings struct {
+ DisabledUntil int `json:"disabled_until"`
+ DisabledForever BaseBoolInt `json:"disabled_forever"`
+ NoSound BaseBoolInt `json:"no_sound"`
+}
+
+// MessagesConversationWithMessage struct.
+type MessagesConversationWithMessage struct {
+ Conversation MessagesConversation `json:"conversation"`
+ // BUG(VK): https://vk.com/bug229134
+ LastMessage MessagesMessage `json:"last_message"`
+}
+
+// MessagesDialog struct.
+type MessagesDialog struct {
+ Important int `json:"important"`
+ InRead int `json:"in_read"`
+ Message MessagesMessage `json:"message"`
+ OutRead int `json:"out_read"`
+ Unanswered int `json:"unanswered"`
+ Unread int `json:"unread"`
+}
+
+// MessagesHistoryAttachment struct.
+type MessagesHistoryAttachment struct {
+ Attachment MessagesHistoryMessageAttachment `json:"attachment"`
+ MessageID int `json:"message_id"` // Message ID
+ FromID int `json:"from_id"`
+}
+
+// MessagesHistoryMessageAttachment struct.
+type MessagesHistoryMessageAttachment struct {
+ Audio AudioAudio `json:"audio"`
+ Doc DocsDoc `json:"doc"`
+ Link BaseLink `json:"link"`
+ Market BaseLink `json:"market"`
+ Photo PhotosPhoto `json:"photo"`
+ Share BaseLink `json:"share"`
+ Type string `json:"type"`
+ Video VideoVideo `json:"video"`
+ Wall BaseLink `json:"wall"`
+}
+
+// MessagesLastActivity struct.
+type MessagesLastActivity struct {
+ Online BaseBoolInt `json:"online"` // Information whether user is online
+ Time int `json:"time"` // Time when user was online in Unixtime
+}
+
+// MessagesLongPollParams struct.
+type MessagesLongPollParams struct {
+ Key string `json:"key"` // Key
+ Pts int `json:"pts"` // Persistent timestamp
+ Server string `json:"server"` // Server URL
+ Ts int `json:"ts"` // Timestamp
+}
+
+// MessagesMessageAction status.
+const (
+ ChatPhotoUpdate = "chat_photo_update"
+ ChatPhotoRemove = "chat_photo_remove"
+ ChatCreate = "chat_create"
+ ChatTitleUpdate = "chat_title_update"
+ ChatInviteUser = "chat_invite_user"
+ ChatKickUser = "chat_kick_user"
+ ChatPinMessage = "chat_pin_message"
+ ChatUnpinMessage = "chat_unpin_message"
+ ChatInviteUserByLink = "chat_invite_user_by_link"
+ AcceptedMessageRequest = "accepted_message_request"
+)
+
+// MessagesMessageAction struct.
+type MessagesMessageAction struct {
+ ConversationMessageID int `json:"conversation_message_id"` // Message ID
+
+ // Email address for chat_invite_user or chat_kick_user actions.
+ Email string `json:"email"`
+ MemberID int `json:"member_id"` // User or email peer ID
+ Message string `json:"message"` // Message body of related message
+ Photo MessagesMessageActionPhoto `json:"photo"`
+
+ // New chat title for chat_create and chat_title_update actions.
+ Text string `json:"text"`
+ Type string `json:"type"`
+}
+
+// MessagesMessageActionPhoto struct.
+type MessagesMessageActionPhoto struct {
+ Photo100 string `json:"photo_100"` // URL of the preview image with 100px in width
+ Photo200 string `json:"photo_200"` // URL of the preview image with 200px in width
+ Photo50 string `json:"photo_50"` // URL of the preview image with 50px in width
+}
+
+// MessagesMessageAttachment struct.
+type MessagesMessageAttachment struct {
+ Audio AudioAudio `json:"audio"`
+ Doc DocsDoc `json:"doc"`
+ Gift GiftsLayout `json:"gift"`
+ Link BaseLink `json:"link"`
+ Market MarketMarketItem `json:"market"`
+ MarketMarketAlbum MarketMarketAlbum `json:"market_market_album"`
+ Photo PhotosPhoto `json:"photo"`
+ Sticker BaseSticker `json:"sticker"`
+ Type string `json:"type"`
+ Video VideoVideo `json:"video"`
+ Wall WallWallpost `json:"wall"`
+ WallReply WallWallComment `json:"wall_reply"`
+ AudioMessage DocsDoc `json:"audio_message"`
+ Graffiti DocsDoc `json:"graffiti"`
+ Poll PollsPoll `json:"poll"`
+ Call MessageCall `json:"call"`
+ Story StoriesStory `json:"story"`
+ Podcast PodcastsEpisode `json:"podcast"`
+}
+
+// State in which call ended up.
+//
+// TODO: v3 type CallEndState.
+const (
+ CallEndStateCanceledByInitiator = "canceled_by_initiator"
+ CallEndStateCanceledByReceiver = "canceled_by_receiver"
+ CallEndStateReached = "reached"
+)
+
+// MessageCall struct.
+type MessageCall struct {
+ InitiatorID int `json:"initiator_id"`
+ ReceiverID int `json:"receiver_id"`
+ State string `json:"state"`
+ Time int `json:"time"`
+ Duration int `json:"duration"`
+ Video BaseBoolInt `json:"video"`
+}
+
+// MessagesPinnedMessage struct.
+type MessagesPinnedMessage struct {
+ Attachments []MessagesMessageAttachment `json:"attachments"`
+
+ // Unique auto-incremented number for all Messages with this peer.
+ ConversationMessageID int `json:"conversation_message_id"`
+
+ // Date when the message has been sent in Unixtime.
+ Date int `json:"date"`
+
+ // Message author's ID.
+ FromID int `json:"from_id"`
+ FwdMessages []*MessagesMessage `json:"fwd_Messages"`
+ Geo BaseMessageGeo `json:"geo"`
+ ID int `json:"id"` // Message ID
+ PeerID int `json:"peer_id"` // Peer ID
+ ReplyMessage *MessagesMessage `json:"reply_message"`
+ Text string `json:"text"` // Message text
+}
+
+// MessagesUserXtrInvitedBy struct.
+type MessagesUserXtrInvitedBy struct {
+}
+
+// MessagesForward struct.
+type MessagesForward struct {
+ // Message owner. It is worth passing it on if you want to forward messages
+ // from the community to a dialog.
+ OwnerID int `json:"owner_id,omitempty"`
+
+ // Identifier of the place from which the messages are to be sent.
+ PeerID int `json:"peer_id,omitempty"`
+
+ // Messages can be passed to conversation_message_ids array:
+ //
+ // - that are in a personal dialog with the bot;
+ //
+ // - which are outbound messages from the bot;
+ //
+ // - written after the bot has entered the conversation.
+ ConversationMessageIDs []int `json:"conversation_message_ids,omitempty"`
+ MessageIDs []int `json:"message_ids,omitempty"`
+
+ // Reply to messages. It is worth passing if you want to reply to messages
+ // in the chat room where the messages are. In this case there should be
+ // only one element in the conversation_message_ids/message_ids.
+ IsReply bool `json:"is_reply,omitempty"`
+}
+
+// ToJSON returns the JSON encoding of MessagesForward.
+func (forward MessagesForward) ToJSON() string {
+ b, _ := json.Marshal(forward)
+ return string(b)
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/newsfeed.go b/vendor/github.com/SevereCloud/vksdk/v2/object/newsfeed.go
new file mode 100644
index 00000000..e9bda35a
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/newsfeed.go
@@ -0,0 +1,187 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// NewsfeedEventActivity struct.
+type NewsfeedEventActivity struct {
+ Address string `json:"address"` // address of event
+ ButtonText string `json:"button_text"` // text of attach
+ Friends []int `json:"friends"` // array of friends ids
+ MemberStatus int `json:"member_status"` // Current user's member status
+ Text string `json:"text"` // text of attach
+ Time int `json:"time"` // event start time
+}
+
+// NewsfeedItemAudio struct.
+type NewsfeedItemAudio struct {
+ Audio NewsfeedItemAudioAudio `json:"audio"`
+}
+
+// NewsfeedItemAudioAudio struct.
+type NewsfeedItemAudioAudio struct {
+ Count int `json:"count"` // Audios number
+ Items []AudioAudio `json:"items"`
+}
+
+// NewsfeedItemDigest struct.
+type NewsfeedItemDigest struct {
+ ButtonText string `json:"button_text"`
+ FeedID string `json:"feed_id"` // id of feed in digest
+ Items []WallWallpost `json:"items"`
+ MainPostIDs []string `json:"main_post_ids"`
+ Template string `json:"template"` // type of digest
+ Title string `json:"title"`
+ TrackCode string `json:"track_code"`
+ // Type string `json:"type"`
+}
+
+// NewsfeedItemFriend struct.
+type NewsfeedItemFriend struct {
+ Friends NewsfeedItemFriendFriends `json:"friends"`
+}
+
+// NewsfeedItemFriendFriends struct.
+type NewsfeedItemFriendFriends struct {
+ Count int `json:"count"` // Number of friends has been added
+ Items []BaseUserID `json:"items"`
+}
+
+// NewsfeedItemNote struct.
+type NewsfeedItemNote struct {
+ Notes NewsfeedItemNoteNotes `json:"notes"`
+}
+
+// NewsfeedItemNoteNotes struct.
+type NewsfeedItemNoteNotes struct {
+ Count int `json:"count"` // Notes number
+ Items []NewsfeedNewsfeedNote `json:"items"`
+}
+
+// NewsfeedItemPhoto struct.
+type NewsfeedItemPhoto struct {
+ Photos NewsfeedItemPhotoPhotos `json:"photos"`
+}
+
+// NewsfeedItemPhotoPhotos struct.
+type NewsfeedItemPhotoPhotos struct {
+ Count int `json:"count"` // Photos number
+ Items []PhotosPhotoFull `json:"items"`
+}
+
+// NewsfeedItemPhotoTag struct.
+type NewsfeedItemPhotoTag struct {
+ PhotoTags NewsfeedItemPhotoTagPhotoTags `json:"photo_tags"`
+}
+
+// NewsfeedItemPhotoTagPhotoTags struct.
+type NewsfeedItemPhotoTagPhotoTags struct {
+ Count int `json:"count"` // Tags number
+ Items []PhotosPhotoFull `json:"items"`
+}
+
+// NewsfeedItemStoriesBlock struct.
+type NewsfeedItemStoriesBlock struct {
+ BlockType string `json:"block_type"`
+ Stories []StoriesStory `json:"stories"`
+ // Title string `json:"title"`
+ // TrackCode string `json:"track_code"`
+ // Type string `json:"type"`
+}
+
+// NewsfeedItemTopic struct.
+type NewsfeedItemTopic struct {
+ // Comments BaseCommentsInfo `json:"comments"`
+ // Likes BaseLikesInfo `json:"likes"`
+ // Text string `json:"text"` // Post text
+}
+
+// NewsfeedItemVideo struct.
+type NewsfeedItemVideo struct {
+ Video NewsfeedItemVideoVideo `json:"video"`
+}
+
+// NewsfeedItemVideoVideo struct.
+type NewsfeedItemVideoVideo struct {
+ Count int `json:"count"` // Tags number
+ Items []VideoVideo `json:"items"`
+}
+
+// NewsfeedItemWallpost struct.
+type NewsfeedItemWallpost struct {
+ Activity NewsfeedEventActivity `json:"activity"`
+ Attachments []WallWallpostAttachment `json:"attachments"`
+ Comments BaseCommentsInfo `json:"comments"`
+ FromID int `json:"from_id"`
+ CopyHistory []WallWallpost `json:"copy_history"`
+ Geo BaseGeo `json:"geo"`
+ Likes BaseLikesInfo `json:"likes"`
+ PostSource WallPostSource `json:"post_source"`
+ PostType string `json:"post_type"`
+ Reposts BaseRepostsInfo `json:"reposts"`
+ MarkedAsAds int `json:"marked_as_ads,omitempty"`
+ Views interface{} `json:"views,omitempty"` // BUG: Views int or wallViews
+ IsFavorite BaseBoolInt `json:"is_favorite,omitempty"`
+ CanDelete BaseBoolInt `json:"can_delete"`
+ CanArchive BaseBoolInt `json:"can_archive"`
+ IsArchived BaseBoolInt `json:"is_archived"`
+ SignerID int `json:"signer_id,omitempty"`
+ Text string `json:"text"` // Post text
+ Copyright WallPostCopyright `json:"copyright"`
+ CategoryAction NewsfeedCategoryAction `json:"category_action"`
+}
+
+// NewsfeedCategoryAction struct.
+type NewsfeedCategoryAction struct {
+ Action struct {
+ Target string `json:"target"`
+ Type string `json:"type"`
+ URL string `json:"url"`
+ } `json:"action"`
+ Name string `json:"name"`
+}
+
+// NewsfeedList struct.
+type NewsfeedList struct {
+ ID int `json:"id"` // List ID
+ Title string `json:"title"` // List title
+}
+
+// NewsfeedItemMarket struct.
+type NewsfeedItemMarket struct {
+ MarketMarketItem
+}
+
+// NewsfeedNewsfeedItem struct.
+type NewsfeedNewsfeedItem struct {
+ Type string `json:"type"`
+ SourceID int `json:"source_id"`
+ Date int `json:"date"`
+ TopicID int `json:"topic_id"`
+
+ PostID int `json:"post_id,omitempty"`
+
+ NewsfeedItemWallpost
+ NewsfeedItemPhoto
+ NewsfeedItemPhotoTag
+ NewsfeedItemFriend
+ NewsfeedItemNote
+ NewsfeedItemAudio
+ NewsfeedItemTopic
+ NewsfeedItemVideo
+ NewsfeedItemDigest
+ NewsfeedItemStoriesBlock
+ NewsfeedItemMarket
+
+ CreatedBy int `json:"created_by,omitempty"`
+ CanEdit BaseBoolInt `json:"can_edit,omitempty"`
+ CanDelete BaseBoolInt `json:"can_delete,omitempty"`
+ CanDoubtCategory BaseBoolInt `json:"can_doubt_category"`
+ CanSetCategory BaseBoolInt `json:"can_set_category"`
+ // TODO: Need more fields
+}
+
+// NewsfeedNewsfeedNote struct.
+type NewsfeedNewsfeedNote struct {
+ Comments int `json:"comments"` // Comments Number
+ ID int `json:"id"` // Note ID
+ OwnerID int `json:"owner_id"` // integer
+ Title string `json:"title"` // Note title
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/notes.go b/vendor/github.com/SevereCloud/vksdk/v2/object/notes.go
new file mode 100644
index 00000000..c238256e
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/notes.go
@@ -0,0 +1,37 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// NotesNote struct.
+type NotesNote struct {
+ CanComment BaseBoolInt `json:"can_comment"` // Information whether current user can comment the note
+ Comments int `json:"comments"` // Comments number
+ Date int `json:"date"` // Date when the note has been created in Unixtime
+ ID int `json:"id"` // Note ID
+ OwnerID int `json:"owner_id"` // Note owner's ID
+ Text string `json:"text"` // Note text
+ TextWiki string `json:"text_wiki"` // Note text in wiki format
+ Title string `json:"title"` // Note title
+ ViewURL string `json:"view_url"` // URL of the page with note preview
+ ReadComments int `json:"read_comments"`
+ PrivacyView []interface{} `json:"privacy_view"` // NOTE: old type privacy
+ PrivacyComment []interface{} `json:"privacy_comment"` // NOTE: old type privacy
+}
+
+// ToAttachment return attachment format.
+func (note NotesNote) ToAttachment() string {
+ return fmt.Sprintf("note%d_%d", note.OwnerID, note.ID)
+}
+
+// NotesNoteComment struct.
+type NotesNoteComment struct {
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ ID int `json:"id"` // Comment ID
+ Message string `json:"message"` // Comment text
+ NID int `json:"nid"` // Note ID
+ OID int `json:"oid"` // Note ID
+ ReplyTo int `json:"reply_to"` // ID of replied comment
+ UID int `json:"uid"` // Comment author's ID
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/notifications.go b/vendor/github.com/SevereCloud/vksdk/v2/object/notifications.go
new file mode 100644
index 00000000..119c3f9f
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/notifications.go
@@ -0,0 +1,42 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import "encoding/json"
+
+// NotificationsFeedback struct.
+type NotificationsFeedback struct {
+ Attachments []WallWallpostAttachment `json:"attachments"`
+ FromID int `json:"from_id"` // Reply author's ID
+ Geo BaseGeo `json:"geo"`
+ ID int `json:"id"` // Item ID
+ Likes BaseLikesInfo `json:"likes"`
+ Text string `json:"text"` // Reply text
+ ToID int `json:"to_id"` // Wall owner's ID
+}
+
+// NotificationsNotification struct.
+type NotificationsNotification struct {
+ Date int `json:"date"` // Date when the event has been occurred
+ Feedback json.RawMessage `json:"feedback"`
+ Parent json.RawMessage `json:"parent"`
+ Reply NotificationsReply `json:"reply"`
+ Type string `json:"type"` // Notification type
+}
+
+// NotificationsNotificationsComment struct.
+type NotificationsNotificationsComment struct {
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ ID int `json:"id"` // Comment ID
+ OwnerID int `json:"owner_id"` // Author ID
+ Photo PhotosPhoto `json:"photo"`
+ Post WallWallpost `json:"post"`
+ Text string `json:"text"` // Comment text
+ Topic BoardTopic `json:"topic"`
+ Video VideoVideo `json:"video"`
+}
+
+// NotificationsReply struct.
+type NotificationsReply struct {
+ Date string `json:"date"` // Date when the reply has been created in Unixtime
+ ID int `json:"id"` // Reply ID
+ Text string `json:"text"` // Reply text
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/object.go b/vendor/github.com/SevereCloud/vksdk/v2/object/object.go
new file mode 100644
index 00000000..4daf7c07
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/object.go
@@ -0,0 +1,566 @@
+/*
+Package object contains objects for VK.
+
+See more https://vk.com/dev/objects
+*/
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "bytes"
+ "encoding/json"
+ "reflect"
+)
+
+// 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
+}
+
+// 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
+}
+
+// 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 int `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"`
+ 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"`
+ } `json:"lists,omitempty"`
+ Owners struct {
+ 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 // O‘zbek
+ 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"
+)
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/orders.go b/vendor/github.com/SevereCloud/vksdk/v2/object/orders.go
new file mode 100644
index 00000000..0d29dfb5
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/orders.go
@@ -0,0 +1,45 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// OrdersAmount struct.
+type OrdersAmount struct {
+ Amounts []OrdersAmountItem `json:"amounts"`
+ Currency string `json:"currency"` // Currency name
+}
+
+// OrdersAmountItem struct.
+type OrdersAmountItem struct {
+ Amount int `json:"amount"` // Votes amount in user's currency
+ Description string `json:"description"` // Amount description
+ Votes string `json:"votes"` // Votes number
+}
+
+// OrdersOrder struct.
+type OrdersOrder struct {
+ Amount int `json:"amount"` // Amount
+ AppOrderID int `json:"app_order_id"` // App order ID
+ CancelTransactionID int `json:"cancel_transaction_id"` // Cancel transaction ID
+ Date int `json:"date"` // Date of creation in Unixtime
+ ID int `json:"id"` // Order ID
+ Item string `json:"item"` // Order item
+ ReceiverID int `json:"receiver_id"` // Receiver ID
+ Status string `json:"status"` // Order status
+ TransactionID int `json:"transaction_id"` // Transaction ID
+ UserID int `json:"user_id"` // User ID
+}
+
+// OrdersSubscription struct.
+type OrdersSubscription struct {
+ CancelReason string `json:"cancel_reason"` // Cancel reason
+ CreateTime int `json:"create_time"` // Date of creation in Unixtime
+ ID int `json:"id"` // Subscription ID
+ ItemID string `json:"item_id"` // Subscription order item
+ NextBillTime int `json:"next_bill_time"` // Date of next bill in Unixtime
+ Period int `json:"period"` // Subscription period
+ PeriodStartTime int `json:"period_start_time"` // Date of last period start in Unixtime
+ Price int `json:"price"` // Subscription price
+ Status string `json:"status"` // Subscription status
+ PendingCancel BaseBoolInt `json:"pending_cancel"` // Pending cancel state
+ TestMode BaseBoolInt `json:"test_mode"` // Is test subscription
+ TrialExpireTime int `json:"trial_expire_time"` // Date of trial expire in Unixtime
+ UpdateTime int `json:"update_time"` // Date of last change in Unixtime
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/pages.go b/vendor/github.com/SevereCloud/vksdk/v2/object/pages.go
new file mode 100644
index 00000000..616830cc
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/pages.go
@@ -0,0 +1,85 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// Pages privacy settings.
+const (
+ PagesPrivacyCommunityManagers = iota // community managers only
+ PagesPrivacyCommunityMembers // community members only
+ PagesPrivacyEveryone // everyone
+)
+
+// PagesWikipage struct.
+type PagesWikipage struct {
+ CreatorID int `json:"creator_id"` // Page creator ID
+ CreatorName int `json:"creator_name"` // Page creator name
+ EditorID int `json:"editor_id"` // Last editor ID
+ EditorName string `json:"editor_name"` // Last editor name
+ GroupID int `json:"group_id"` // Community ID
+ ID int `json:"id"` // Page ID
+ Title string `json:"title"` // Page title
+ Views int `json:"views"` // Views number
+ WhoCanEdit int `json:"who_can_edit"` // Edit settings of the page
+ WhoCanView int `json:"who_can_view"` // View settings of the page
+}
+
+// PagesWikipageFull struct.
+type PagesWikipageFull struct {
+ // Date when the page has been created in Unixtime.
+ Created int `json:"created"`
+
+ // Page creator ID.
+ CreatorID int `json:"creator_id"`
+
+ // Information whether current user can edit the page.
+ CurrentUserCanEdit BaseBoolInt `json:"current_user_can_edit"`
+
+ // Information whether current user can edit the page access settings.
+ CurrentUserCanEditAccess BaseBoolInt `json:"current_user_can_edit_access"`
+
+ // Date when the page has been edited in Unixtime.
+ Edited int `json:"edited"`
+
+ // Last editor ID.
+ EditorID int `json:"editor_id"`
+
+ // Page ID.
+ PageID int `json:"page_id"`
+
+ // Community ID.
+ GroupID int `json:"group_id"`
+
+ // Page content, HTML.
+ HTML string `json:"html"`
+
+ // Page ID.
+ ID int `json:"id"`
+
+ // Page content, wiki.
+ Source string `json:"source"`
+
+ // Page title.
+ Title string `json:"title"`
+
+ // URL of the page preview.
+ ViewURL string `json:"view_url"`
+
+ // Views number.
+ Views int `json:"views"`
+
+ // Edit settings of the page.
+ WhoCanEdit int `json:"who_can_edit"`
+
+ // View settings of the page.
+ WhoCanView int `json:"who_can_view"`
+ VersionCreated int `json:"version_created"`
+}
+
+// PagesWikipageHistory struct.
+//
+// BUG(VK): https://vk.com/dev/pages.getHistory edited and date.
+type PagesWikipageHistory struct {
+ Date int `json:"date"` // Date when the page has been edited in Unixtime
+ EditorID int `json:"editor_id"` // Last editor ID
+ EditorName string `json:"editor_name"` // Last editor name
+ ID int `json:"id"` // Version ID
+ Length int `json:"length"` // Page size in bytes
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/photos.go b/vendor/github.com/SevereCloud/vksdk/v2/object/photos.go
new file mode 100644
index 00000000..5adfcae8
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/photos.go
@@ -0,0 +1,339 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// PhotosPhoto struct.
+type PhotosPhoto struct {
+ AccessKey string `json:"access_key"` // Access key for the photo
+ AlbumID int `json:"album_id"` // Album ID
+ Date int `json:"date"` // Date when uploaded
+ Height int `json:"height"` // Original photo height
+ ID int `json:"id"` // Photo ID
+ Images []PhotosImage `json:"images"`
+ Lat float64 `json:"lat"` // Latitude
+ Long float64 `json:"long"` // Longitude
+ OwnerID int `json:"owner_id"` // Photo owner's ID
+ PostID int `json:"post_id"` // Post ID
+ Text string `json:"text"` // Photo caption
+ UserID int `json:"user_id"` // ID of the user who have uploaded the photo
+ Width int `json:"width"` // Original photo width
+ CanUpload BaseBoolInt `json:"can_upload"`
+ CommentsDisabled BaseBoolInt `json:"comments_disabled"`
+ ThumbIsLast BaseBoolInt `json:"thumb_is_last"`
+ UploadByAdminsOnly BaseBoolInt `json:"upload_by_admins_only"`
+ HasTags BaseBoolInt `json:"has_tags"`
+ Created int `json:"created"`
+ Description string `json:"description"`
+ PrivacyComment []string `json:"privacy_comment"`
+ PrivacyView []string `json:"privacy_view"`
+ Size int `json:"size"`
+ Sizes []PhotosPhotoSizes `json:"sizes"`
+ ThumbID int `json:"thumb_id"`
+ ThumbSrc string `json:"thumb_src"`
+ Title string `json:"title"`
+ Updated int `json:"updated"`
+ Color string `json:"color"`
+}
+
+// ToAttachment return attachment format.
+func (photo PhotosPhoto) ToAttachment() string {
+ return fmt.Sprintf("photo%d_%d", photo.OwnerID, photo.ID)
+}
+
+// MaxSize return the largest PhotosPhotoSizes.
+func (photo PhotosPhoto) MaxSize() (maxPhotoSize PhotosPhotoSizes) {
+ var max float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size > max {
+ max = size
+ maxPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// MinSize return the smallest PhotosPhotoSizes.
+func (photo PhotosPhoto) MinSize() (minPhotoSize PhotosPhotoSizes) {
+ var min float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size < min || min == 0 {
+ min = size
+ minPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// PhotosCommentXtrPid struct.
+type PhotosCommentXtrPid struct {
+ Attachments []WallCommentAttachment `json:"attachments"`
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ FromID int `json:"from_id"` // Author ID
+ ID int `json:"id"` // Comment ID
+ Likes BaseLikesInfo `json:"likes"`
+ ParentsStack []int `json:"parents_stack"`
+ Pid int `json:"pid"` // Photo ID
+ ReplyToComment int `json:"reply_to_comment"` // Replied comment ID
+ ReplyToUser int `json:"reply_to_user"` // Replied user ID
+ Text string `json:"text"` // Comment text
+ Thread WallWallCommentThread `json:"thread"`
+}
+
+// PhotosImage struct.
+type PhotosImage struct {
+ BaseImage
+ Type string `json:"type"`
+}
+
+// PhotosChatUploadResponse struct.
+type PhotosChatUploadResponse struct {
+ Response string `json:"response"` // Uploaded photo data
+}
+
+// PhotosMarketAlbumUploadResponse struct.
+type PhotosMarketAlbumUploadResponse struct {
+ GID int `json:"gid"` // Community ID
+ Hash string `json:"hash"` // Uploading hash
+ Photo string `json:"photo"` // Uploaded photo data
+ Server int `json:"server"` // Upload server number
+}
+
+// PhotosMarketUploadResponse struct.
+type PhotosMarketUploadResponse struct {
+ CropData string `json:"crop_data"` // Crop data
+ CropHash string `json:"crop_hash"` // Crop hash
+ GroupID int `json:"group_id"` // Community ID
+ Hash string `json:"hash"` // Uploading hash
+ Photo string `json:"photo"` // Uploaded photo data
+ Server int `json:"server"` // Upload server number
+}
+
+// PhotosMessageUploadResponse struct.
+type PhotosMessageUploadResponse struct {
+ Hash string `json:"hash"` // Uploading hash
+ Photo string `json:"photo"` // Uploaded photo data
+ Server int `json:"server"` // Upload server number
+}
+
+// PhotosOwnerUploadResponse struct.
+type PhotosOwnerUploadResponse struct {
+ Hash string `json:"hash"` // Uploading hash
+ Photo string `json:"photo"` // Uploaded photo data
+ Server int `json:"server"` // Upload server number
+}
+
+// PhotosPhotoAlbum struct.
+type PhotosPhotoAlbum struct {
+ Created int `json:"created"` // Date when the album has been created in Unixtime
+ Description string `json:"description"` // Photo album description
+ ID string `json:"id"` // BUG(VK): Photo album ID
+ OwnerID int `json:"owner_id"` // Album owner's ID
+ Size int `json:"size"` // Photos number
+ Thumb PhotosPhoto `json:"thumb"`
+ Title string `json:"title"` // Photo album title
+ Updated int `json:"updated"` // Date when the album has been updated last time in Unixtime
+}
+
+// ToAttachment return attachment format.
+func (album PhotosPhotoAlbum) ToAttachment() string {
+ return fmt.Sprintf("album%d_%s", album.OwnerID, album.ID)
+}
+
+// PhotosPhotoAlbumFull struct.
+type PhotosPhotoAlbumFull struct {
+ // Information whether current user can upload photo to the album.
+ CanUpload BaseBoolInt `json:"can_upload"`
+ CommentsDisabled BaseBoolInt `json:"comments_disabled"` // Information whether album comments are disabled
+ Created int `json:"created"` // Date when the album has been created in Unixtime
+ Description string `json:"description"` // Photo album description
+ ID int `json:"id"` // Photo album ID
+ OwnerID int `json:"owner_id"` // Album owner's ID
+ Size int `json:"size"` // Photos number
+ PrivacyComment Privacy `json:"privacy_comment"`
+ PrivacyView Privacy `json:"privacy_view"`
+ Sizes []PhotosPhotoSizes `json:"sizes"`
+ ThumbID int `json:"thumb_id"` // Thumb photo ID
+
+ // Information whether the album thumb is last photo.
+ ThumbIsLast int `json:"thumb_is_last"`
+ ThumbSrc string `json:"thumb_src"` // URL of the thumb image
+ Title string `json:"title"` // Photo album title
+
+ // Date when the album has been updated last time in Unixtime.
+ Updated int `json:"updated"`
+
+ // Information whether only community administrators can upload photos.
+ UploadByAdminsOnly int `json:"upload_by_admins_only"`
+}
+
+// ToAttachment return attachment format.
+func (album PhotosPhotoAlbumFull) ToAttachment() string {
+ return fmt.Sprintf("album%d_%d", album.OwnerID, album.ID)
+}
+
+// MaxSize return the largest PhotosPhotoSizes.
+func (album PhotosPhotoAlbumFull) MaxSize() (maxPhotoSize PhotosPhotoSizes) {
+ var max float64
+
+ for _, photoSize := range album.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size > max {
+ max = size
+ maxPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// MinSize return the smallest PhotosPhotoSizes.
+func (album PhotosPhotoAlbumFull) MinSize() (minPhotoSize PhotosPhotoSizes) {
+ var min float64
+
+ for _, photoSize := range album.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size < min || min == 0 {
+ min = size
+ minPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// PhotosPhotoFull struct.
+type PhotosPhotoFull struct {
+ AccessKey string `json:"access_key"` // Access key for the photo
+ AlbumID int `json:"album_id"` // Album ID
+ CanComment BaseBoolInt `json:"can_comment"` // Information whether current user can comment the photo
+ CanRepost BaseBoolInt `json:"can_repost"` // Information whether current user can repost the photo
+ HasTags BaseBoolInt `json:"has_tags"`
+ Comments BaseObjectCount `json:"comments"`
+ Date int `json:"date"` // Date when uploaded
+ Height int `json:"height"` // Original photo height
+ ID int `json:"id"` // Photo ID
+ Images []PhotosImage `json:"images"`
+ Lat float64 `json:"lat"` // Latitude
+ Likes BaseLikes `json:"likes"`
+ Long float64 `json:"long"` // Longitude
+ OwnerID int `json:"owner_id"` // Photo owner's ID
+ PostID int `json:"post_id"` // Post ID
+ Reposts BaseRepostsInfo `json:"reposts"`
+ Tags BaseObjectCount `json:"tags"`
+ Text string `json:"text"` // Photo caption
+ UserID int `json:"user_id"` // ID of the user who have uploaded the photo
+ Width int `json:"width"` // Original photo width
+ Hidden int `json:"hidden"` // Returns if the photo is hidden above the wall
+ Photo75 string `json:"photo_75"` // URL of image with 75 px width
+ Photo130 string `json:"photo_130"` // URL of image with 130 px width
+ Photo604 string `json:"photo_604"` // URL of image with 604 px width
+ Photo807 string `json:"photo_807"` // URL of image with 807 px width
+ Photo1280 string `json:"photo_1280"` // URL of image with 1280 px width
+ Photo2560 string `json:"photo_2560"` // URL of image with 2560 px width
+ Sizes []PhotosPhotoSizes `json:"sizes"`
+}
+
+// ToAttachment return attachment format.
+func (photo PhotosPhotoFull) ToAttachment() string {
+ return fmt.Sprintf("photo%d_%d", photo.OwnerID, photo.ID)
+}
+
+// MaxSize return the largest PhotosPhotoSizes.
+func (photo PhotosPhotoFull) MaxSize() (maxPhotoSize PhotosPhotoSizes) {
+ var max float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size > max {
+ max = size
+ maxPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// MinSize return the smallest PhotosPhotoSizes.
+func (photo PhotosPhotoFull) MinSize() (minPhotoSize PhotosPhotoSizes) {
+ var min float64
+
+ for _, photoSize := range photo.Sizes {
+ size := photoSize.Height * photoSize.Width
+ if size < min || min == 0 {
+ min = size
+ minPhotoSize = photoSize
+ }
+ }
+
+ return
+}
+
+// PhotosPhotoFullXtrRealOffset struct.
+type PhotosPhotoFullXtrRealOffset struct {
+ PhotosPhotoFull
+ RealOffset int `json:"real_offset"` // Real position of the photo
+}
+
+// PhotosPhotoSizes struct.
+type PhotosPhotoSizes struct {
+ // BUG(VK): json: cannot unmarshal number 180.000000 into Go struct field PhotosPhotoSizes.height of type int
+ BaseImage
+}
+
+// PhotosPhotoTag struct.
+type PhotosPhotoTag struct {
+ Date int `json:"date"` // Date when tag has been added in Unixtime
+ ID int `json:"id"` // Tag ID
+ PlacerID int `json:"placer_id"` // ID of the tag creator
+ TaggedName string `json:"tagged_name"` // Tag description
+ Description string `json:"description"` // Tagged description.
+ UserID int `json:"user_id"` // Tagged user ID
+ Viewed BaseBoolInt `json:"viewed"` // Information whether the tag is reviewed
+ 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
+}
+
+// PhotosPhotoUpload struct.
+type PhotosPhotoUpload struct {
+ AlbumID int `json:"album_id"` // Album ID
+ UploadURL string `json:"upload_url"` // URL to upload photo
+ UserID int `json:"user_id"` // User ID
+}
+
+// PhotosPhotoUploadResponse struct.
+type PhotosPhotoUploadResponse struct {
+ AID int `json:"aid"` // Album ID
+ Hash string `json:"hash"` // Uploading hash
+ PhotosList string `json:"photos_list"` // Uploaded photos data
+ Server int `json:"server"` // Upload server number
+}
+
+// PhotosPhotoXtrRealOffset struct.
+type PhotosPhotoXtrRealOffset struct {
+ PhotosPhoto
+ RealOffset int `json:"real_offset"` // Real position of the photo
+}
+
+// PhotosPhotoXtrTagInfo struct.
+type PhotosPhotoXtrTagInfo struct {
+ PhotosPhoto
+ TagCreated int `json:"tag_created"` // Date when tag has been added in Unixtime
+ TagID int `json:"tag_id"` // Tag ID
+}
+
+// PhotosWallUploadResponse struct.
+type PhotosWallUploadResponse struct {
+ Hash string `json:"hash"` // Uploading hash
+ Photo string `json:"photo"` // Uploaded photo data
+ Server int `json:"server"` // Upload server number
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/podcasts.go b/vendor/github.com/SevereCloud/vksdk/v2/object/podcasts.go
new file mode 100644
index 00000000..a332da43
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/podcasts.go
@@ -0,0 +1,45 @@
+package object
+
+// PodcastsItem struct.
+type PodcastsItem struct {
+ OwnerID int `json:"owner_id"`
+}
+
+// PodcastsCategory struct.
+type PodcastsCategory struct {
+ ID int `json:"id"`
+ Title string `json:"title"`
+ Cover []BaseImage `json:"cover"`
+}
+
+// PodcastsEpisode struct.
+type PodcastsEpisode struct {
+ ID int `json:"id"`
+ OwnerID int `json:"owner_id"`
+ Artist string `json:"artist"`
+ Title string `json:"title"`
+ Duration int `json:"duration"`
+ Date int `json:"date"`
+ URL string `json:"url"`
+ LyricsID int `json:"lyrics_id"`
+ NoSearch int `json:"no_search"`
+ TrackCode string `json:"track_code"`
+ IsHq BaseBoolInt `json:"is_hq"`
+ IsFocusTrack BaseBoolInt `json:"is_focus_track"`
+ IsExplicit BaseBoolInt `json:"is_explicit"`
+ ShortVideosAllowed BaseBoolInt `json:"short_videos_allowed"`
+ StoriesAllowed BaseBoolInt `json:"stories_allowed"`
+ StoriesCoverAllowed BaseBoolInt `json:"stories_cover_allowed"`
+ PodcastInfo PodcastsPodcastInfo `json:"podcast_info"`
+}
+
+// PodcastsPodcastInfo struct.
+type PodcastsPodcastInfo struct {
+ Cover struct {
+ Sizes []BaseImage `json:"cover"`
+ }
+ Plays int `json:"plays"`
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ Description string `json:"description"`
+ Position int `json:"position"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/polls.go b/vendor/github.com/SevereCloud/vksdk/v2/object/polls.go
new file mode 100644
index 00000000..a2f69656
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/polls.go
@@ -0,0 +1,101 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// PollsAnswer struct.
+type PollsAnswer struct {
+ ID int `json:"id"`
+ Rate float64 `json:"rate"`
+ Text string `json:"text"`
+ Votes int `json:"votes"`
+}
+
+// PollsPoll struct.
+type PollsPoll struct {
+ AnswerID int `json:"answer_id"` // Current user's answer ID
+ Answers []PollsAnswer `json:"answers"`
+ Created int `json:"created"` // Date when poll has been created in Unixtime
+ ID int `json:"id"` // Poll ID
+ OwnerID int `json:"owner_id"` // Poll owner's ID
+ Question string `json:"question"` // Poll question
+ Votes int `json:"votes"` // Votes number
+ AnswerIDs []int `json:"answer_ids"`
+ EndDate int `json:"end_date"`
+ Anonymous BaseBoolInt `json:"anonymous"` // Information whether the pole is anonymous
+ Closed BaseBoolInt `json:"closed"`
+ IsBoard BaseBoolInt `json:"is_board"`
+ CanEdit BaseBoolInt `json:"can_edit"`
+ CanVote BaseBoolInt `json:"can_vote"`
+ CanReport BaseBoolInt `json:"can_report"`
+ CanShare BaseBoolInt `json:"can_share"`
+ Multiple BaseBoolInt `json:"multiple"`
+ DisableUnvote BaseBoolInt `json:"disable_unvote"`
+ Photo PhotosPhoto `json:"photo"`
+ AuthorID int `json:"author_id"`
+ Background PollsBackground `json:"background"`
+ Friends []PollsFriend `json:"friends"`
+ Profiles []UsersUser `json:"profiles"`
+ Groups []GroupsGroup `json:"groups"`
+}
+
+// ToAttachment return attachment format.
+func (poll PollsPoll) ToAttachment() string {
+ return fmt.Sprintf("poll%d_%d", poll.OwnerID, poll.ID)
+}
+
+// PollsFriend struct.
+type PollsFriend struct {
+ ID int `json:"id"`
+}
+
+// PollsVoters struct.
+type PollsVoters struct {
+ AnswerID int `json:"answer_id"` // Answer ID
+ Users PollsVotersUsers `json:"users"`
+}
+
+// PollsVotersUsers struct.
+type PollsVotersUsers struct {
+ Count int `json:"count"` // Votes number
+ Items []int `json:"items"`
+}
+
+// PollsVotersFields struct.
+type PollsVotersFields struct {
+ AnswerID int `json:"answer_id"` // Answer ID
+ Users PollsVotersUsersFields `json:"users"`
+}
+
+// PollsVotersUsersFields struct.
+type PollsVotersUsersFields struct {
+ Count int `json:"count"` // Votes number
+ Items []UsersUser `json:"items"`
+}
+
+// PollsBackground struct.
+type PollsBackground struct {
+ Type string `json:"type"`
+ Angle int `json:"angle"`
+ Color string `json:"color"`
+ Points []struct {
+ Position float64 `json:"position"`
+ Color string `json:"color"`
+ } `json:"points"`
+ ID int `json:"id"`
+ Name string `json:"name"`
+}
+
+// PollsPhoto struct.
+type PollsPhoto struct {
+ ID int `json:"id"`
+ Color string `json:"color"`
+ Images []PhotosImage `json:"images"`
+}
+
+// PollsPhotoUploadResponse struct.
+type PollsPhotoUploadResponse struct {
+ Photo string `json:"photo"` // Uploaded photo data
+ Hash string `json:"hash"` // Uploaded hash
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/prettycards.go b/vendor/github.com/SevereCloud/vksdk/v2/object/prettycards.go
new file mode 100644
index 00000000..4cb14a01
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/prettycards.go
@@ -0,0 +1,14 @@
+package object
+
+// PrettyCardsPrettyCard struct.
+type PrettyCardsPrettyCard struct {
+ Button string `json:"button"` // Button key
+ ButtonText string `json:"button_text"` // Button text in current language
+ CardID string `json:"card_id"` // Card ID (long int returned as string)
+ Images []BaseImage `json:"images"`
+ LinkURL string `json:"link_url"` // Link URL
+ Photo string `json:"photo"` // Photo ID (format "<owner_id>_<media_id>")
+ Price string `json:"price"` // Price if set (decimal number returned as string)
+ PriceOld string `json:"price_old"` // Old price if set (decimal number returned as string)
+ Title string `json:"title"` // Title
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/search.go b/vendor/github.com/SevereCloud/vksdk/v2/object/search.go
new file mode 100644
index 00000000..81b0e17a
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/search.go
@@ -0,0 +1,11 @@
+package object
+
+// SearchHint struct.
+type SearchHint struct {
+ Description string `json:"description"` // Object description
+ Global int `json:"global,omitempty"` // Information whether the object has been found globally
+ Group GroupsGroup `json:"group,omitempty"`
+ Profile UsersUser `json:"profile,omitempty"`
+ Section string `json:"section"`
+ Type string `json:"type"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/secure.go b/vendor/github.com/SevereCloud/vksdk/v2/object/secure.go
new file mode 100644
index 00000000..5d64059f
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/secure.go
@@ -0,0 +1,33 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// SecureLevel struct.
+type SecureLevel struct {
+ Level int `json:"level"` // Level
+ UID int `json:"uid"` // User ID
+}
+
+// SecureSmsNotification struct.
+type SecureSmsNotification struct {
+ AppID int `json:"app_id"` // Application ID
+ Date int `json:"date"` // Date when message has been sent in Unixtime
+ ID int `json:"id"` // Notification ID
+ Message string `json:"message"` // Message text
+ UserID int `json:"user_id"` // User ID
+}
+
+// SecureTokenChecked struct.
+type SecureTokenChecked struct {
+ Date int `json:"date"` // Date when access_token has been generated in Unixtime
+ Expire int `json:"expire"` // Date when access_token will expire in Unixtime
+ Success int `json:"success"` // Returns if successfully processed
+ UserID int `json:"user_id"` // User ID
+}
+
+// SecureTransaction struct.
+type SecureTransaction struct {
+ Date int `json:"date"` // Transaction date in Unixtime
+ ID int `json:"id"` // Transaction ID
+ UIDFrom int `json:"uid_from"` // From ID
+ UIDTo int `json:"uid_to"` // To ID
+ Votes int `json:"votes"` // Votes number
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/stats.go b/vendor/github.com/SevereCloud/vksdk/v2/object/stats.go
new file mode 100644
index 00000000..b8fe5001
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/stats.go
@@ -0,0 +1,77 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// StatsActivity struct.
+type StatsActivity struct {
+ Comments int `json:"comments"` // Comments number
+ Copies int `json:"copies"` // Reposts number
+ Hidden int `json:"hidden"` // Hidden from news count
+ Likes int `json:"likes"` // Likes number
+ Subscribed int `json:"subscribed"` // New subscribers count
+ Unsubscribed int `json:"unsubscribed"` // Unsubscribed count
+}
+
+// StatsCity struct.
+type StatsCity struct {
+ Count int `json:"count"` // Visitors number
+ Name string `json:"name"` // City name
+ Value int `json:"value"` // City ID
+}
+
+// StatsCountry struct.
+type StatsCountry struct {
+ Code string `json:"code"` // Country code
+ Count int `json:"count"` // Visitors number
+ Name string `json:"name"` // Country name
+ Value int `json:"value"` // Country ID
+}
+
+// StatsPeriod struct.
+type StatsPeriod struct {
+ Activity StatsActivity `json:"activity"`
+ PeriodFrom int `json:"period_from"` // Unix timestamp
+ PeriodTo int `json:"period_to"` // Unix timestamp
+ Reach StatsReach `json:"reach"`
+ Visitors StatsViews `json:"visitors"`
+}
+
+// StatsReach struct.
+type StatsReach struct {
+ Age []StatsSexAge `json:"age"`
+ Cities []StatsCity `json:"cities"`
+ Countries []StatsCountry `json:"countries"`
+ MobileReach int `json:"mobile_reach"` // Reach count from mobile devices
+ Reach int `json:"reach"` // Reach count
+ ReachSubscribers int `json:"reach_subscribers"` // Subscribers reach count
+ Sex []StatsSexAge `json:"sex"`
+ SexAge []StatsSexAge `json:"sex_age"`
+}
+
+// StatsSexAge struct.
+type StatsSexAge struct {
+ Count int `json:"count"` // Visitors number
+ Value string `json:"value"` // Sex/age value
+}
+
+// StatsViews struct.
+type StatsViews struct {
+ Age []StatsSexAge `json:"age"`
+ Cities []StatsCity `json:"cities"`
+ Countries []StatsCountry `json:"countries"`
+ MobileViews int `json:"mobile_views"` // Number of views from mobile devices
+ Sex []StatsSexAge `json:"sex"`
+ SexAge []StatsSexAge `json:"sex_age"`
+ Views int `json:"views"` // Views number
+ Visitors int `json:"visitors"` // Visitors number
+}
+
+// StatsWallpostStat struct.
+type StatsWallpostStat struct {
+ Hide int `json:"hide"` // Hidings number
+ JoinGroup int `json:"join_group"` // People have joined the group
+ Links int `json:"links"` // Link click-through
+ ReachSubscribers int `json:"reach_subscribers"` // Subscribers reach
+ ReachTotal int `json:"reach_total"` // Total reach
+ Report int `json:"report"` // Reports number
+ ToGroup int `json:"to_group"` // Click-through to community
+ Unsubscribe int `json:"unsubscribe"` // Unsubscribed members
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/stories.go b/vendor/github.com/SevereCloud/vksdk/v2/object/stories.go
new file mode 100644
index 00000000..8995e8d4
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/stories.go
@@ -0,0 +1,335 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "encoding/json"
+)
+
+// StoriesViewer struct.
+type StoriesViewer struct {
+ IsLiked bool `json:"is_liked"`
+ UserID int `json:"user_id"`
+
+ // For extended
+ User struct {
+ Type string `json:"type"`
+ ID int `json:"id"`
+ FirstName string `json:"first_name"`
+ LastName string `json:"last_name"`
+ IsClosed bool `json:"is_closed"`
+ CanAccessClosed bool `json:"can_access_closed"`
+ } `json:"user,omitempty"`
+}
+
+// StoriesNarrativeInfo type.
+type StoriesNarrativeInfo struct {
+ Author string `json:"author"`
+ Title string `json:"title"`
+ Views int `json:"views"`
+}
+
+// StoriesPromoData struct.
+type StoriesPromoData struct {
+ Name string `json:"name"`
+ Photo50 string `json:"photo_50"`
+ Photo100 string `json:"photo_100"`
+ NotAnimated BaseBoolInt `json:"not_animated"`
+}
+
+// StoriesStoryLink struct.
+type StoriesStoryLink struct {
+ Text string `json:"text"` // Link text
+ URL string `json:"url"` // Link URL
+}
+
+// StoriesReplies struct.
+type StoriesReplies struct {
+ Count int `json:"count"` // Replies number.
+ New int `json:"new"` // New replies number.
+}
+
+// StoriesQuestions struct.
+type StoriesQuestions struct {
+ Count int `json:"count"` // Replies number.
+ New int `json:"new"` // New replies number.
+}
+
+// StoriesStoryStats struct.
+type StoriesStoryStats struct {
+ Answer StoriesStoryStatsStat `json:"answer"`
+ Bans StoriesStoryStatsStat `json:"bans"`
+ OpenLink StoriesStoryStatsStat `json:"open_link"`
+ Replies StoriesStoryStatsStat `json:"replies"`
+ Shares StoriesStoryStatsStat `json:"shares"`
+ Subscribers StoriesStoryStatsStat `json:"subscribers"`
+ Views StoriesStoryStatsStat `json:"views"`
+ Likes StoriesStoryStatsStat `json:"likes"`
+}
+
+// StoriesStoryStatsStat struct.
+type StoriesStoryStatsStat struct {
+ Count int `json:"count"` // Stat value
+ State string `json:"state"`
+}
+
+// StoriesStoryType story type.
+type StoriesStoryType string
+
+// Possible values.
+const (
+ StoriesStoryPhoto StoriesStoryType = "photo"
+ StoriesStoryVideo StoriesStoryType = "video"
+ StoriesStoryLiveActive StoriesStoryType = "live_active"
+ StoriesStoryLiveFinished StoriesStoryType = "live_finished"
+ StoriesStoryBirthdayInvite StoriesStoryType = "birthday_invite"
+)
+
+// StoriesStory struct.
+type StoriesStory struct {
+ AccessKey string `json:"access_key"` // Access key for private object.
+ ExpiresAt int `json:"expires_at"` // Story expiration time. Unixtime.
+ CanHide BaseBoolInt `json:"can_hide"`
+ // Information whether story has question sticker and current user can send question to the author
+ CanAsk BaseBoolInt `json:"can_ask"`
+ // Information whether story has question sticker and current user can send anonymous question to the author
+ CanAskAnonymous BaseBoolInt `json:"can_ask_anonymous"`
+
+ // Information whether current user can comment the story (0 - no, 1 - yes).
+ CanComment BaseBoolInt `json:"can_comment"`
+
+ // Information whether current user can reply to the story
+ // (0 - no, 1 - yes).
+ CanReply BaseBoolInt `json:"can_reply"`
+
+ // Information whether current user can see the story (0 - no, 1 - yes).
+ CanSee BaseBoolInt `json:"can_see"`
+
+ // Information whether current user can share the story (0 - no, 1 - yes).
+ CanShare BaseBoolInt `json:"can_share"`
+
+ // Information whether the story is deleted (false - no, true - yes).
+ IsDeleted BaseBoolInt `json:"is_deleted"`
+
+ // Information whether the story is expired (false - no, true - yes).
+ IsExpired BaseBoolInt `json:"is_expired"`
+
+ // Is video without sound
+ NoSound BaseBoolInt `json:"no_sound"`
+
+ // Does author have stories privacy restrictions
+ IsRestricted BaseBoolInt `json:"is_restricted"`
+
+ CanUseInNarrative BaseBoolInt `json:"can_use_in_narrative"`
+
+ // Information whether current user has seen the story or not
+ // (0 - no, 1 - yes).
+ Seen BaseBoolInt `json:"seen"`
+ IsOwnerPinned BaseBoolInt `json:"is_owner_pinned"`
+ IsOneTime BaseBoolInt `json:"is_one_time"`
+ NeedMute BaseBoolInt `json:"need_mute"`
+ MuteReply BaseBoolInt `json:"mute_reply"`
+ CanLike BaseBoolInt `json:"can_like"`
+ Date int `json:"date"` // Date when story has been added in Unixtime.
+ ID int `json:"id"` // Story ID.
+ Link StoriesStoryLink `json:"link"`
+ OwnerID int `json:"owner_id"` // Story owner's ID.
+ ParentStory *StoriesStory `json:"parent_story"`
+ ParentStoryAccessKey string `json:"parent_story_access_key"` // Access key for private object.
+ ParentStoryID int `json:"parent_story_id"` // Parent story ID.
+ ParentStoryOwnerID int `json:"parent_story_owner_id"` // Parent story owner's ID.
+ Photo PhotosPhoto `json:"photo"`
+ Replies StoriesReplies `json:"replies"` // Replies to current story.
+ Type string `json:"type"`
+ Video VideoVideo `json:"video"`
+ Views int `json:"views"` // Views number.
+ ClickableStickers StoriesClickableStickers `json:"clickable_stickers"`
+ TrackCode string `json:"track_code"`
+ LikesCount int `json:"likes_count"`
+ NarrativeID int `json:"narrative_id"`
+ NarrativeOwnerID int `json:"narrative_owner_id"`
+ NarrativeInfo StoriesNarrativeInfo `json:"narrative_info"`
+ NarrativesCount int `json:"narratives_count"`
+ FirstNarrativeTitle string `json:"first_narrative_title"`
+ Questions StoriesQuestions `json:"questions"`
+}
+
+// StoriesFeedItemType type.
+type StoriesFeedItemType string
+
+// Possible values.
+const (
+ StoriesFeedItemStories StoriesFeedItemType = "stories"
+ StoriesFeedItemCommunity StoriesFeedItemType = "community_grouped_stories"
+ StoriesFeedItemApp StoriesFeedItemType = "app_grouped_stories"
+)
+
+// StoriesFeedItem struct.
+type StoriesFeedItem struct {
+ Type StoriesFeedItemType `json:"type"`
+ ID string `json:"id"`
+ Stories []StoriesStory `json:"stories"`
+ Grouped StoriesFeedItemType `json:"grouped"`
+ App AppsApp `json:"app"`
+}
+
+// StoriesClickableStickers struct.
+//
+// The field clickable_stickers is available in the history object.
+// The sticker object is pasted by the developer on the client himself, only
+// coordinates are transmitted to the server.
+//
+// https://vk.com/dev/objects/clickable_stickers
+type StoriesClickableStickers struct {
+ OriginalWidth int `json:"original_width"`
+ OriginalHeight int `json:"original_height"`
+ ClickableStickers []StoriesClickableSticker `json:"clickable_stickers"`
+}
+
+// NewClickableStickers return new StoriesClickableStickers.
+//
+// Requires the width and height of the original photo or video.
+func NewClickableStickers(width, height int) *StoriesClickableStickers {
+ return &StoriesClickableStickers{
+ OriginalWidth: width,
+ OriginalHeight: height,
+ ClickableStickers: []StoriesClickableSticker{},
+ }
+}
+
+// AddMention add mention sticker.
+//
+// Mention should be in the format of a VK mentioning, for example: [id1|name] or [club1|name].
+func (cs *StoriesClickableStickers) AddMention(mention string, area []StoriesClickablePoint) *StoriesClickableStickers {
+ cs.ClickableStickers = append(cs.ClickableStickers, StoriesClickableSticker{
+ Type: ClickableStickerMention,
+ ClickableArea: area,
+ Mention: mention,
+ })
+
+ return cs
+}
+
+// AddHashtag add hashtag sticker.
+//
+// Hashtag must necessarily begin with the symbol #.
+func (cs *StoriesClickableStickers) AddHashtag(hashtag string, area []StoriesClickablePoint) *StoriesClickableStickers {
+ cs.ClickableStickers = append(cs.ClickableStickers, StoriesClickableSticker{
+ Type: ClickableStickerHashtag,
+ ClickableArea: area,
+ Hashtag: hashtag,
+ })
+
+ return cs
+}
+
+// TODO: Add more clickable stickers func
+
+// ToJSON returns the JSON encoding of StoriesClickableStickers.
+func (cs StoriesClickableStickers) ToJSON() string {
+ b, _ := json.Marshal(cs)
+ return string(b)
+}
+
+// StoriesClickableSticker struct.
+type StoriesClickableSticker struct { // nolint: maligned
+ ID int `json:"id"`
+ Type string `json:"type"`
+ ClickableArea []StoriesClickablePoint `json:"clickable_area"`
+ Style string `json:"style,omitempty"`
+
+ // type=post
+ PostOwnerID int `json:"post_owner_id,omitempty"`
+ PostID int `json:"post_id,omitempty"`
+
+ // type=sticker
+ StickerID int `json:"sticker_id,omitempty"`
+ StickerPackID int `json:"sticker_pack_id,omitempty"`
+
+ // type=place
+ PlaceID int `json:"place_id,omitempty"`
+
+ // type=question
+ Question string `json:"question,omitempty"`
+ QuestionButton string `json:"question_button,omitempty"`
+ QuestionDefaultPrivate BaseBoolInt `json:"question_default_private,omitempty"`
+ Color string `json:"color,omitempty"`
+
+ // type=mention
+ Mention string `json:"mention,omitempty"`
+
+ // type=hashtag
+ Hashtag string `json:"hashtag,omitempty"`
+
+ // type=link
+ LinkObject BaseLink `json:"link_object,omitempty"`
+ TooltipText string `json:"tooltip_text,omitempty"`
+
+ // type=market_item
+ Subtype string `json:"subtype,omitempty"`
+ // LinkObject BaseLink `json:"link_object,omitempty"` // subtype=aliexpress_product
+ MarketItem MarketMarketItem `json:"market_item,omitempty"` // subtype=market_item
+
+ // type=story_reply
+ OwnerID int `json:"owner_id,omitempty"`
+ StoryID int `json:"story_id,omitempty"`
+
+ // type=owner
+ // OwnerID int `json:"owner_id,omitempty"`
+
+ // type=poll
+ Poll PollsPoll `json:"poll,omitempty"`
+
+ // type=music
+ Audio AudioAudio `json:"audio,omitempty"`
+ AudioStartTime int `json:"audio_start_time,omitempty"`
+
+ // type=app
+ App AppsApp `json:"app"`
+ AppContext string `json:"app_context"`
+ HasNewInteractions BaseBoolInt `json:"has_new_interactions"`
+ IsBroadcastNotifyAllowed BaseBoolInt `json:"is_broadcast_notify_allowed"`
+}
+
+// TODO: сделать несколько структур для кликабельного стикера
+
+// Type of clickable sticker.
+const (
+ ClickableStickerPost = "post"
+ ClickableStickerSticker = "sticker"
+ ClickableStickerPlace = "place"
+ ClickableStickerQuestion = "question"
+ ClickableStickerMention = "mention"
+ ClickableStickerHashtag = "hashtag"
+ ClickableStickerMarketItem = "market_item"
+ ClickableStickerLink = "link"
+ ClickableStickerStoryReply = "story_reply"
+ ClickableStickerOwner = "owner"
+ ClickableStickerPoll = "poll"
+ ClickableStickerMusic = "music"
+ ClickableStickerApp = "app"
+)
+
+// Subtype of clickable sticker.
+const (
+ ClickableStickerSubtypeMarketItem = "market_item"
+ ClickableStickerSubtypeAliexpressProduct = "aliexpress_product"
+)
+
+// Clickable sticker style.
+const (
+ ClickableStickerTransparent = "transparent"
+ ClickableStickerBlueGradient = "blue_gradient"
+ ClickableStickerRedGradient = "red_gradient"
+ ClickableStickerUnderline = "underline"
+ ClickableStickerBlue = "blue"
+ ClickableStickerGreen = "green"
+ ClickableStickerWhite = "white"
+ ClickableStickerQuestionReply = "question_reply"
+ ClickableStickerLight = "light"
+ ClickableStickerImpressive = "impressive"
+)
+
+// StoriesClickablePoint struct.
+type StoriesClickablePoint struct {
+ X int `json:"x"`
+ Y int `json:"y"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/users.go b/vendor/github.com/SevereCloud/vksdk/v2/object/users.go
new file mode 100644
index 00000000..07e1049f
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/users.go
@@ -0,0 +1,299 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// 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"`
+ Verified BaseBoolInt `json:"verified"`
+ Trending BaseBoolInt `json:"trending"`
+ Blacklisted BaseBoolInt `json:"blacklisted"`
+ BlacklistedByMe BaseBoolInt `json:"blacklisted_by_me"`
+ Facebook string `json:"facebook"`
+ FacebookName string `json:"facebook_name"`
+ Twitter string `json:"twitter"`
+ Instagram string `json:"instagram"`
+ 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"`
+}
+
+// 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"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/utils.go b/vendor/github.com/SevereCloud/vksdk/v2/object/utils.go
new file mode 100644
index 00000000..3bbd775d
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/utils.go
@@ -0,0 +1,93 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// UtilsDomainResolvedType object type.
+const (
+ UtilsDomainResolvedTypeUser = "user"
+ UtilsDomainResolvedTypeGroup = "group"
+ UtilsDomainResolvedTypeApplication = "application"
+ UtilsDomainResolvedTypePage = "page"
+ UtilsDomainResolvedTypeVkApp = "vk_app"
+)
+
+// UtilsDomainResolved struct.
+type UtilsDomainResolved struct {
+ ObjectID int `json:"object_id"` // Object ID
+ Type string `json:"type"`
+}
+
+// UtilsLastShortenedLink struct.
+type UtilsLastShortenedLink struct {
+ AccessKey string `json:"access_key"` // Access key for private stats
+ Key string `json:"key"` // Link key (characters after vk.cc/)
+ ShortURL string `json:"short_url"` // Short link URL
+ Timestamp int `json:"timestamp"` // Creation time in Unixtime
+ URL string `json:"url"` // Full URL
+ Views int `json:"views"` // Total views number
+}
+
+// Link status.
+const (
+ UtilsLinkCheckedStatusNotBanned = "not_banned"
+ UtilsLinkCheckedStatusBanned = "banned"
+ UtilsLinkCheckedStatusProcessing = "processing"
+)
+
+// UtilsLinkChecked struct.
+type UtilsLinkChecked struct {
+ Link string `json:"link"` // Link URL
+ Status string `json:"status"`
+}
+
+// UtilsLinkStats struct.
+type UtilsLinkStats struct {
+ Key string `json:"key"` // Link key (characters after vk.cc/)
+ Stats []UtilsStats `json:"stats"`
+}
+
+// UtilsLinkStatsExtended struct.
+type UtilsLinkStatsExtended struct {
+ Key string `json:"key"` // Link key (characters after vk.cc/)
+ Stats []UtilsStatsExtended `json:"stats"`
+}
+
+// UtilsShortLink struct.
+type UtilsShortLink struct {
+ AccessKey string `json:"access_key"` // Access key for private stats
+ Key string `json:"key"` // Link key (characters after vk.cc/)
+ ShortURL string `json:"short_url"` // Short link URL
+ URL string `json:"url"` // Full URL
+}
+
+// UtilsStats struct.
+type UtilsStats struct {
+ Timestamp int `json:"timestamp"` // Start time
+ Views int `json:"views"` // Total views number
+}
+
+// UtilsStatsCity struct.
+type UtilsStatsCity struct {
+ CityID int `json:"city_id"` // City ID
+ Views int `json:"views"` // Views number
+}
+
+// UtilsStatsCountry struct.
+type UtilsStatsCountry struct {
+ CountryID int `json:"country_id"` // Country ID
+ Views int `json:"views"` // Views number
+}
+
+// UtilsStatsExtended struct.
+type UtilsStatsExtended struct {
+ Cities []UtilsStatsCity `json:"cities"`
+ Countries []UtilsStatsCountry `json:"countries"`
+ SexAge []UtilsStatsSexAge `json:"sex_age"`
+ Timestamp int `json:"timestamp"` // Start time
+ Views int `json:"views"` // Total views number
+}
+
+// UtilsStatsSexAge struct.
+type UtilsStatsSexAge struct {
+ AgeRange string `json:"age_range"` // Age denotation
+ Female int `json:"female"` // Views by female users
+ Male int `json:"male"` // Views by male users
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/video.go b/vendor/github.com/SevereCloud/vksdk/v2/object/video.go
new file mode 100644
index 00000000..62110243
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/video.go
@@ -0,0 +1,277 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+import (
+ "fmt"
+)
+
+// VideoVideo struct.
+type VideoVideo struct {
+ // Video access key.
+ AccessKey string `json:"access_key"`
+
+ // Date when the video has been added in Unixtime.
+ AddingDate int `json:"adding_date"`
+
+ // Information whether current user can add the video.
+ CanAdd BaseBoolInt `json:"can_add"`
+
+ // Information whether current user can add the video to faves.
+ CanAddToFaves BaseBoolInt `json:"can_add_to_faves"`
+
+ // Information whether current user can comment the video.
+ CanComment BaseBoolInt `json:"can_comment"`
+
+ // Information whether current user can edit the video.
+ CanEdit BaseBoolInt `json:"can_edit"`
+
+ // Information whether current user can like the video.
+ CanLike BaseBoolInt `json:"can_like"`
+
+ // Information whether current user can repost this video.
+ CanRepost BaseBoolInt `json:"can_repost"`
+ CanSubscribe BaseBoolInt `json:"can_subscribe"`
+ CanAttachLink BaseBoolInt `json:"can_attach_link"`
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ IsPrivate BaseBoolInt `json:"is_private"`
+ Added BaseBoolInt `json:"added"`
+ Repeat BaseBoolInt `json:"repeat"` // Information whether the video is repeated
+ ContentRestricted BaseBoolInt `json:"content_restricted"`
+ Live BaseBoolInt `json:"live"` // Returns if the video is a live stream
+ Upcoming BaseBoolInt `json:"upcoming"`
+ Comments int `json:"comments"` // Number of comments
+ Date int `json:"date"` // Date when video has been uploaded in Unixtime
+ Description string `json:"description"` // Video description
+ Duration int `json:"duration"` // Video duration in seconds
+ Files VideoVideoFiles `json:"files"`
+ FirstFrame []VideoVideoImage `json:"first_frame"`
+ Image []VideoVideoImage `json:"image"`
+ Height int `json:"height"` // Video height
+ ID int `json:"id"` // Video ID
+ OwnerID int `json:"owner_id"` // Video owner ID
+ UserID int `json:"user_id"`
+ Photo130 string `json:"photo_130"` // URL of the preview image with 130 px in width
+ Photo320 string `json:"photo_320"` // URL of the preview image with 320 px in width
+ Photo640 string `json:"photo_640"` // URL of the preview image with 640 px in width
+ Photo800 string `json:"photo_800"` // URL of the preview image with 800 px in width
+ Photo1280 string `json:"photo_1280"` // URL of the preview image with 1280 px in width
+
+ // URL of the page with a player that can be used to play the video in the browser.
+ Player string `json:"player"`
+ Processing int `json:"processing"` // Returns if the video is processing
+ Title string `json:"title"` // Video title
+ Type string `json:"type"`
+ Views int `json:"views"` // Number of views
+ Width int `json:"width"` // Video width
+ Platform string `json:"platform"`
+ LocalViews int `json:"local_views"`
+ Likes BaseLikesInfo `json:"likes"` // Count of likes
+ Reposts BaseRepostsInfo `json:"reposts"` // Count of views
+ TrackCode string `json:"track_code"`
+ PrivacyView Privacy `json:"privacy_view"`
+ PrivacyComment Privacy `json:"privacy_comment"`
+ ActionButton VideoActionButton `json:"action_button"`
+ Restriction VideoRestriction `json:"restriction"`
+ ContentRestrictedMessage string `json:"content_restricted_message"`
+}
+
+// ToAttachment return attachment format.
+func (video VideoVideo) ToAttachment() string {
+ return fmt.Sprintf("video%d_%d", video.OwnerID, video.ID)
+}
+
+// VideoRestriction struct.
+type VideoRestriction struct {
+ Title string `json:"title"`
+ Text string `json:"text"`
+ AlwaysShown BaseBoolInt `json:"always_shown"`
+ Blur BaseBoolInt `json:"blur"`
+ CanPlay BaseBoolInt `json:"can_play"`
+ CanPreview BaseBoolInt `json:"can_preview"`
+ CardIcon []BaseImage `json:"card_icon"`
+ ListIcon []BaseImage `json:"list_icon"`
+}
+
+// VideoActionButton struct.
+type VideoActionButton struct {
+ ID string `json:"id"`
+ Type string `json:"type"`
+ URL string `json:"url"`
+ Snippet VideoSnippet `json:"snippet"`
+}
+
+// VideoSnippet struct.
+type VideoSnippet struct {
+ Description string `json:"description"`
+ OpenTitle string `json:"open_title"`
+ Title string `json:"title"`
+ TypeName string `json:"type_name"`
+ Date int `json:"date"`
+ Image []BaseImage `json:"image"`
+}
+
+// VideoVideoFiles struct.
+type VideoVideoFiles struct {
+ External string `json:"external"` // URL of the external player
+ Mp4_1080 string `json:"mp4_1080"` // URL of the mpeg4 file with 1080p quality
+ Mp4_240 string `json:"mp4_240"` // URL of the mpeg4 file with 240p quality
+ Mp4_360 string `json:"mp4_360"` // URL of the mpeg4 file with 360p quality
+ Mp4_480 string `json:"mp4_480"` // URL of the mpeg4 file with 480p quality
+ Mp4_720 string `json:"mp4_720"` // URL of the mpeg4 file with 720p quality
+ Live string `json:"live"`
+ HLS string `json:"hls"`
+}
+
+// VideoCatBlock struct.
+type VideoCatBlock struct {
+ CanHide BaseBoolInt `json:"can_hide"`
+ ID int `json:"id"`
+ Items []VideoCatElement `json:"items"`
+ Name string `json:"name"`
+ Next string `json:"next"`
+ Type string `json:"type"`
+ View string `json:"view"`
+}
+
+// VideoCatElement struct.
+type VideoCatElement struct {
+ CanAdd BaseBoolInt `json:"can_add"`
+ CanEdit BaseBoolInt `json:"can_edit"`
+ IsPrivate BaseBoolInt `json:"is_private"`
+ Comments int `json:"comments"`
+ Count int `json:"count"`
+ Date int `json:"date"`
+ Description string `json:"description"`
+ Duration int `json:"duration"`
+ ID int `json:"id"`
+ OwnerID int `json:"owner_id"`
+ Photo130 string `json:"photo_130"`
+ Photo160 string `json:"photo_160"`
+ Photo320 string `json:"photo_320"`
+ Photo640 string `json:"photo_640"`
+ Photo800 string `json:"photo_800"`
+ Title string `json:"title"`
+ Type string `json:"type"`
+ UpdatedTime int `json:"updated_time"`
+ Views int `json:"views"`
+}
+
+// VideoSaveResult struct.
+type VideoSaveResult struct {
+ Description string `json:"description"` // Video description
+ OwnerID int `json:"owner_id"` // Video owner ID
+ Title string `json:"title"` // Video title
+ UploadURL string `json:"upload_url"` // URL for the video uploading
+ VideoID int `json:"video_id"` // Video ID
+ AccessKey string `json:"access_key"` // Video access key
+}
+
+// VideoUploadResponse struct.
+type VideoUploadResponse struct {
+ Size int `json:"size"`
+ VideoID int `json:"video_id"`
+}
+
+// VideoVideoAlbum struct.
+type VideoVideoAlbum struct {
+ ID int `json:"id"`
+ OwnerID int `json:"owner_id"`
+ Title string `json:"title"`
+}
+
+// VideoVideoAlbumFull struct.
+type VideoVideoAlbumFull struct {
+ Count int `json:"count"` // Total number of videos in album
+ ID int `json:"id"` // Album ID
+ Image []VideoVideoImage `json:"image"` // Album cover image in different sizes
+ IsSystem BaseBoolInt `json:"is_system"` // Information whether album is system
+ OwnerID int `json:"owner_id"` // Album owner's ID
+ Photo160 string `json:"photo_160"` // URL of the preview image with 160px in width
+ Photo320 string `json:"photo_320"` // URL of the preview image with 320px in width
+ Title string `json:"title"` // Album title
+ UpdatedTime int `json:"updated_time"` // Date when the album has been updated last time in Unixtime
+ ImageBlur int `json:"image_blur"`
+ Privacy Privacy `json:"privacy"`
+}
+
+// VideoVideoFull struct.
+type VideoVideoFull struct {
+ AccessKey string `json:"access_key"` // Video access key
+ AddingDate int `json:"adding_date"` // Date when the video has been added in Unixtime
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ CanAdd BaseBoolInt `json:"can_add"` // Information whether current user can add the video
+ CanComment BaseBoolInt `json:"can_comment"` // Information whether current user can comment the video
+ CanEdit BaseBoolInt `json:"can_edit"` // Information whether current user can edit the video
+ CanRepost BaseBoolInt `json:"can_repost"` // Information whether current user can comment the video
+ CanLike BaseBoolInt `json:"can_like"`
+ CanAddToFaves BaseBoolInt `json:"can_add_to_faves"`
+ Repeat BaseBoolInt `json:"repeat"` // Information whether the video is repeated
+ Comments int `json:"comments"` // Number of comments
+ Date int `json:"date"` // Date when video has been uploaded in Unixtime
+ Description string `json:"description"` // Video description
+ Duration int `json:"duration"` // Video duration in seconds
+ Files VideoVideoFiles `json:"files"`
+ ID int `json:"id"` // Video ID
+ Likes BaseLikes `json:"likes"`
+ Live int `json:"live"` // Returns if the video is live translation
+ OwnerID int `json:"owner_id"` // Video owner ID
+
+ // URL of the page with a player that can be used to play the video in the browser.
+ Player string `json:"player"`
+ Processing int `json:"processing"` // Returns if the video is processing
+ Title string `json:"title"` // Video title
+ Views int `json:"views"` // Number of views
+ Width int `json:"width"`
+ Height int `json:"height"`
+ Image []VideoVideoImage `json:"image"`
+ FirstFrame []VideoVideoImage `json:"first_frame"`
+ Added int `json:"added"`
+ Type string `json:"type"`
+ Reposts BaseRepostsInfo `json:"reposts"`
+}
+
+// ToAttachment return attachment format.
+func (video VideoVideoFull) ToAttachment() string {
+ return fmt.Sprintf("video%d_%d", video.OwnerID, video.ID)
+}
+
+// VideoVideoTag struct.
+type VideoVideoTag struct {
+ Date int `json:"date"`
+ ID int `json:"id"`
+ PlacerID int `json:"placer_id"`
+ TaggedName string `json:"tagged_name"`
+ UserID int `json:"user_id"`
+ Viewed BaseBoolInt `json:"viewed"`
+}
+
+// VideoVideoTagInfo struct.
+type VideoVideoTagInfo struct {
+ AccessKey string `json:"access_key"`
+ AddingDate int `json:"adding_date"`
+ CanAdd BaseBoolInt `json:"can_add"`
+ CanEdit BaseBoolInt `json:"can_edit"`
+ Comments int `json:"comments"`
+ Date int `json:"date"`
+ Description string `json:"description"`
+ Duration int `json:"duration"`
+ Files VideoVideoFiles `json:"files"`
+ ID int `json:"id"`
+ Live int `json:"live"`
+ OwnerID int `json:"owner_id"`
+ Photo130 string `json:"photo_130"`
+ Photo320 string `json:"photo_320"`
+ Photo800 string `json:"photo_800"`
+ PlacerID int `json:"placer_id"`
+ Player string `json:"player"`
+ Processing int `json:"processing"`
+ TagCreated int `json:"tag_created"`
+ TagID int `json:"tag_id"`
+ Title string `json:"title"`
+ Views int `json:"views"`
+}
+
+// VideoVideoImage struct.
+type VideoVideoImage struct {
+ BaseImage
+ WithPadding BaseBoolInt `json:"with_padding"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/wall.go b/vendor/github.com/SevereCloud/vksdk/v2/object/wall.go
new file mode 100644
index 00000000..5345fc5c
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/wall.go
@@ -0,0 +1,257 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// WallAppPost struct.
+type WallAppPost struct {
+ ID int `json:"id"` // Application ID
+ Name string `json:"name"` // Application name
+ Photo130 string `json:"photo_130"` // URL of the preview image with 130 px in width
+ Photo604 string `json:"photo_604"` // URL of the preview image with 604 px in width
+}
+
+// WallAttachedNote struct.
+type WallAttachedNote struct {
+ Comments int `json:"comments"` // Comments number
+ Date int `json:"date"` // Date when the note has been created in Unixtime
+ ID int `json:"id"` // Note ID
+ OwnerID int `json:"owner_id"` // Note owner's ID
+ ReadComments int `json:"read_comments"` // Read comments number
+ Title string `json:"title"` // Note title
+ ViewURL string `json:"view_url"` // URL of the page with note preview
+}
+
+// WallCommentAttachment struct.
+type WallCommentAttachment struct {
+ Audio AudioAudio `json:"audio"`
+ Doc DocsDoc `json:"doc"`
+ Link BaseLink `json:"link"`
+ Market MarketMarketItem `json:"market"`
+ MarketMarketAlbum MarketMarketAlbum `json:"market_market_album"`
+ Note WallAttachedNote `json:"note"`
+ Page PagesWikipageFull `json:"page"`
+ Photo PhotosPhoto `json:"photo"`
+ Sticker BaseSticker `json:"sticker"`
+ Type string `json:"type"`
+ Video VideoVideo `json:"video"`
+ Graffiti WallGraffiti `json:"graffiti"`
+}
+
+// WallGraffiti struct.
+type WallGraffiti struct {
+ ID int `json:"id"` // Graffiti ID
+ OwnerID int `json:"owner_id"` // Graffiti owner's ID
+ Photo200 string `json:"photo_200"` // URL of the preview image with 200 px in width
+ Photo586 string `json:"photo_586"` // URL of the preview image with 586 px in width
+ URL string `json:"url"`
+ Width int `json:"width"`
+ Height int `json:"height"`
+ AccessKey string `json:"access_key"`
+}
+
+// Type of post source.
+const (
+ WallPostSourceTypeVk = "vk"
+ WallPostSourceTypeWidget = "widget"
+ WallPostSourceTypeAPI = "api"
+ WallPostSourceTypeRss = "rss"
+ WallPostSourceTypeSms = "sms"
+)
+
+// WallPostSource struct.
+type WallPostSource struct {
+ Link BaseLink `json:"link"`
+ Data string `json:"data"` // Additional data
+ Platform string `json:"platform"` // Platform name
+ Type string `json:"type"`
+ URL string `json:"url"` // URL to an external site used to publish the post
+}
+
+// WallPostedPhoto struct.
+type WallPostedPhoto struct {
+ ID int `json:"id"` // Photo ID
+ OwnerID int `json:"owner_id"` // Photo owner's ID
+ Photo130 string `json:"photo_130"` // URL of the preview image with 130 px in width
+ Photo604 string `json:"photo_604"` // URL of the preview image with 604 px in width
+}
+
+// WallViews struct.
+type WallViews struct {
+ Count int `json:"count"` // Count
+}
+
+// WallWallCommentThread struct.
+type WallWallCommentThread struct {
+ Count int `json:"count"` // Comments number
+ Items []WallWallComment `json:"items"`
+ CanPost BaseBoolInt `json:"can_post"` // Information whether current user can comment the post
+ GroupsCanPost BaseBoolInt `json:"groups_can_post"` // Information whether groups can comment the post
+ ShowReplyButton BaseBoolInt `json:"show_reply_button"`
+}
+
+// WallWallComment struct.
+type WallWallComment struct {
+ Attachments []WallCommentAttachment `json:"attachments"`
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ Deleted BaseBoolInt `json:"deleted"`
+ FromID int `json:"from_id"` // Author ID
+ ID int `json:"id"` // Comment ID
+ Likes BaseLikesInfo `json:"likes"`
+ RealOffset int `json:"real_offset"` // Real position of the comment
+ ReplyToComment int `json:"reply_to_comment"` // Replied comment ID
+ ReplyToUser int `json:"reply_to_user"` // Replied user ID
+ Text string `json:"text"` // Comment text
+ PostID int `json:"post_id"`
+ PostOwnerID int `json:"post_owner_id"`
+ PhotoID int `json:"photo_id"`
+ PhotoOwnerID int `json:"photo_owner_id"`
+ VideoID int `json:"video_id"`
+ VideoOwnerID int `json:"video_owner_id"`
+ ItemID int `json:"item_id"`
+ MarketOwnerID int `json:"market_owner_id"`
+ ParentsStack []int `json:"parents_stack"`
+ OwnerID int `json:"owner_id"`
+ Thread WallWallCommentThread `json:"thread"`
+ Donut WallWallCommentDonut `json:"donut"`
+}
+
+// WallWallCommentDonut info about VK Donut.
+type WallWallCommentDonut struct {
+ IsDonut BaseBoolInt `json:"is_donut"`
+ Placeholder string `json:"placeholder"`
+}
+
+// WallPost type.
+const (
+ WallPostTypePost = "post"
+ WallPostTypeCopy = "copy"
+ WallPostTypeReply = "reply"
+ WallPostTypePostpone = "postpone"
+ WallPostTypeSuggest = "suggest"
+)
+
+// WallWallpost struct.
+type WallWallpost struct {
+ AccessKey string `json:"access_key"` // Access key to private object
+ ID int `json:"id"` // Post ID
+ OwnerID int `json:"owner_id"` // Wall owner's ID
+ FromID int `json:"from_id"` // Post author ID
+ CreatedBy int `json:"created_by"`
+ Date int `json:"date"` // Date of publishing in Unixtime
+ Text string `json:"text"` // Post text
+ ReplyOwnerID int `json:"reply_owner_id"`
+ ReplyPostID int `json:"reply_post_id"`
+ FriendsOnly int `json:"friends_only"`
+ Comments BaseCommentsInfo `json:"comments"`
+ Likes BaseLikesInfo `json:"likes"` // Count of likes
+ Reposts BaseRepostsInfo `json:"reposts"` // Count of views
+ Views WallViews `json:"views"` // Count of views
+ PostType string `json:"post_type"`
+ PostSource WallPostSource `json:"post_source"`
+ Attachments []WallWallpostAttachment `json:"attachments"`
+ Geo BaseGeo `json:"geo"`
+ SignerID int `json:"signer_id"` // Post signer ID
+ CopyHistory []WallWallpost `json:"copy_history"`
+ CanPin BaseBoolInt `json:"can_pin"`
+ CanDelete BaseBoolInt `json:"can_delete"`
+ CanEdit BaseBoolInt `json:"can_edit"`
+ IsPinned BaseBoolInt `json:"is_pinned"`
+ IsFavorite BaseBoolInt `json:"is_favorite"` // Information whether the post in favorites list
+ IsArchived BaseBoolInt `json:"is_archived"` // Is post archived, only for post owners
+ MarkedAsAds BaseBoolInt `json:"marked_as_ads"`
+ Edited int `json:"edited"` // Date of editing in Unixtime
+ Copyright WallPostCopyright `json:"copyright"`
+ PostID int `json:"post_id"`
+ ParentsStack []int `json:"parents_stack"`
+ Donut WallWallpostDonut `json:"donut"` // need api v5.125
+ ShortTextRate float64 `json:"short_text_rate"`
+ CarouselOffset int `json:"carousel_offset"`
+}
+
+// Attachment type.
+//
+// TODO: check this.
+const (
+ AttachmentTypePhoto = "photo"
+ AttachmentTypePostedPhoto = "posted_photo"
+ AttachmentTypeAudio = "audio"
+ AttachmentTypeVideo = "video"
+ AttachmentTypeDoc = "doc"
+ AttachmentTypeLink = "link"
+ AttachmentTypeGraffiti = "graffiti"
+ AttachmentTypeNote = "note"
+ AttachmentTypeApp = "app"
+ AttachmentTypePoll = "poll"
+ AttachmentTypePage = "page"
+ AttachmentTypeAlbum = "album"
+ AttachmentTypePhotosList = "photos_list"
+ AttachmentTypeMarketAlbum = "market_album"
+ AttachmentTypeMarket = "market"
+ AttachmentTypeEvent = "event"
+ AttachmentTypeWall = "wall"
+ AttachmentTypeStory = "story"
+ AttachmentTypePodcast = "podcast"
+)
+
+// WallWallpostAttachment struct.
+type WallWallpostAttachment struct {
+ AccessKey string `json:"access_key"` // Access key for the audio
+ Album PhotosPhotoAlbum `json:"album"`
+ App WallAppPost `json:"app"`
+ Audio AudioAudio `json:"audio"`
+ Doc DocsDoc `json:"doc"`
+ Event EventsEventAttach `json:"event"`
+ Graffiti WallGraffiti `json:"graffiti"`
+ Link BaseLink `json:"link"`
+ Market MarketMarketItem `json:"market"`
+ MarketMarketAlbum MarketMarketAlbum `json:"market_market_album"`
+ Note WallAttachedNote `json:"note"`
+ Page PagesWikipageFull `json:"page"`
+ Photo PhotosPhoto `json:"photo"`
+ PhotosList []string `json:"photos_list"`
+ Poll PollsPoll `json:"poll"`
+ PostedPhoto WallPostedPhoto `json:"posted_photo"`
+ Type string `json:"type"`
+ Video VideoVideo `json:"video"`
+ Podcast PodcastsEpisode `json:"podcast"`
+}
+
+// WallWallpostToID struct.
+type WallWallpostToID struct {
+ Attachments []WallWallpostAttachment `json:"attachments"`
+ Comments BaseCommentsInfo `json:"comments"`
+ CopyOwnerID int `json:"copy_owner_id"` // ID of the source post owner
+ CopyPostID int `json:"copy_post_id"` // ID of the source post
+ Date int `json:"date"` // Date of publishing in Unixtime
+ FromID int `json:"from_id"` // Post author ID
+ Geo BaseGeo `json:"geo"`
+ ID int `json:"id"` // Post ID
+ Likes BaseLikesInfo `json:"likes"`
+ PostID int `json:"post_id"` // wall post ID (if comment)
+ PostSource WallPostSource `json:"post_source"`
+ PostType string `json:"post_type"`
+ Reposts BaseRepostsInfo `json:"reposts"`
+ SignerID int `json:"signer_id"` // Post signer ID
+ Text string `json:"text"` // Post text
+ ToID int `json:"to_id"` // Wall owner's ID
+ IsFavorite BaseBoolInt `json:"is_favorite"` // Information whether the post in favorites list
+ MarkedAsAds BaseBoolInt `json:"marked_as_ads"`
+ ParentsStack []int `json:"parents_stack"`
+ Donut WallWallpostDonut `json:"donut"` // need api v5.125
+ ShortTextRate float64 `json:"short_text_rate"`
+}
+
+// WallWallpostDonut info about VK Donut.
+type WallWallpostDonut struct {
+ IsDonut BaseBoolInt `json:"is_donut"`
+ CanPublishFreeCopy BaseBoolInt `json:"can_publish_free_copy"`
+ PaidDuration int `json:"paid_duration"`
+ EditMode string `json:"edit_mode"`
+ Durations []BaseObjectWithName `json:"durations"`
+}
+
+// WallPostCopyright information about the source of the post.
+type WallPostCopyright struct {
+ ID int `json:"id,omitempty"`
+ Link string `json:"link"`
+ Type string `json:"type"`
+ Name string `json:"name"`
+}
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/widgets.go b/vendor/github.com/SevereCloud/vksdk/v2/object/widgets.go
new file mode 100644
index 00000000..80905a3f
--- /dev/null
+++ b/vendor/github.com/SevereCloud/vksdk/v2/object/widgets.go
@@ -0,0 +1,68 @@
+package object // import "github.com/SevereCloud/vksdk/v2/object"
+
+// WidgetsCommentMedia struct.
+type WidgetsCommentMedia struct {
+ ItemID int `json:"item_id"` // Media item ID
+ OwnerID int `json:"owner_id"` // Media owner's ID
+ ThumbSrc string `json:"thumb_src"` // URL of the preview image (type=photo only)
+ Type string `json:"type"`
+}
+
+// WidgetsCommentReplies struct.
+type WidgetsCommentReplies struct {
+ CanPost BaseBoolInt `json:"can_post"` // Information whether current user can comment the post
+ GroupsCanPost BaseBoolInt `json:"groups_can_post"`
+ Count int `json:"count"` // Comments number
+ Replies []WidgetsCommentRepliesItem `json:"replies"`
+}
+
+// WidgetsCommentRepliesItem struct.
+type WidgetsCommentRepliesItem struct {
+ Cid int `json:"cid"` // Comment ID
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ Likes WidgetsWidgetLikes `json:"likes"`
+ Text string `json:"text"` // Comment text
+ UID int `json:"uid"` // User ID
+ User UsersUser `json:"user"`
+}
+
+// WidgetsWidgetComment struct.
+type WidgetsWidgetComment struct {
+ Attachments []WallCommentAttachment `json:"attachments"`
+ CanDelete BaseBoolInt `json:"can_delete"` // Information whether current user can delete the comment
+ IsFavorite BaseBoolInt `json:"is_favorite"`
+ Comments WidgetsCommentReplies `json:"comments"`
+ Date int `json:"date"` // Date when the comment has been added in Unixtime
+ FromID int `json:"from_id"` // Comment author ID
+ ID int `json:"id"` // Comment ID
+ Likes BaseLikesInfo `json:"likes"`
+ Media WidgetsCommentMedia `json:"media"`
+ PostType string `json:"post_type"` // Post type
+ Reposts BaseRepostsInfo `json:"reposts"`
+ Text string `json:"text"` // Comment text
+ ToID int `json:"to_id"` // Wall owner
+ PostSource WallPostSource `json:"post_source"`
+ Views struct {
+ Count int `json:"count"`
+ } `json:"views"`
+}
+
+// WidgetsWidgetLikes struct.
+type WidgetsWidgetLikes struct {
+ Count int `json:"count"` // Likes number
+}
+
+// WidgetsWidgetPage struct.
+type WidgetsWidgetPage struct {
+ Comments WidgetsWidgetLikes `json:"comments,omitempty"`
+
+ // Date when Widgets on the page has been initialized firstly in Unixtime
+ Date int `json:"date,omitempty"`
+ Description string `json:"description,omitempty"` // Page description
+ ID int `json:"id,omitempty"` // Page ID
+ Likes WidgetsWidgetLikes `json:"likes,omitempty"`
+ PageID string `json:"page_id,omitempty"` // page_id parameter value
+ Photo string `json:"photo,omitempty"` // URL of the preview image
+ Title string `json:"title,omitempty"` // Page title
+ URL string `json:"url,omitempty"` // Page absolute URL
+}