diff options
Diffstat (limited to 'vendor/github.com')
101 files changed, 18340 insertions, 0 deletions
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/.gitignore b/vendor/github.com/SevereCloud/vksdk/v2/.gitignore new file mode 100644 index 00000000..7c5b1810 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/.gitignore @@ -0,0 +1,5 @@ +_vendor/ +vendor/ +*.out +coverage.txt +*.test
\ No newline at end of file diff --git a/vendor/github.com/SevereCloud/vksdk/v2/.golangci.yml b/vendor/github.com/SevereCloud/vksdk/v2/.golangci.yml new file mode 100644 index 00000000..97b7a3fe --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/.golangci.yml @@ -0,0 +1,84 @@ +--- +linters: + disable-all: true + enable: + - bodyclose + - deadcode + - errcheck + - gochecknoglobals + - goconst + - gocritic + - gofmt + - goimports + - golint + - goprintffuncname + - gosec + - gosimple + - govet + - ineffassign + - interfacer + - maligned + - misspell + - nakedret + - prealloc + - staticcheck + - structcheck + - stylecheck + - typecheck + - unconvert + - unparam + - unused + - varcheck + - whitespace + - wsl + - godot + - asciicheck + - nolintlint + - gofumpt + - goerr113 + - tparallel + - errorlint + - paralleltest + +# - wrapcheck # TODO: v3 Fix +# - testpackage # TODO: Fix testpackage +# - nestif # TODO: Fix nestif + +# don't enable: +# - depguard +# - dogsled +# - dupl +# - funlen +# - gochecknoinits +# - gocognit +# - gocyclo +# - godox +# - gomnd +# - lll +# - rowserrcheck +# - scopelint +# - gomodguard +# - exhaustive +# - nlreturn +# - gci +# - exhaustivestruct + +issues: + exclude-rules: + - path: _test\.go + linters: + - gocyclo + - errcheck + - dupl + - gosec + + - linters: + - errcheck + source: ".((os\\.)?std(out|err)\\..*|.*Close|.*Flush|os\\.Remove(All)?| + .*printf?|os\\.(Un)?Setenv)." + + - linters: + - stylecheck + text: "ST1003:.*(Ts|ts).*TS" + + exclude-use-default: false diff --git a/vendor/github.com/SevereCloud/vksdk/v2/.markdownlint.yml b/vendor/github.com/SevereCloud/vksdk/v2/.markdownlint.yml new file mode 100644 index 00000000..436de161 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/.markdownlint.yml @@ -0,0 +1,2 @@ +--- +no-hard-tabs: false diff --git a/vendor/github.com/SevereCloud/vksdk/v2/.travis.yml b/vendor/github.com/SevereCloud/vksdk/v2/.travis.yml new file mode 100644 index 00000000..47727020 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/.travis.yml @@ -0,0 +1,20 @@ +--- +language: go + +cache: + directories: + - $HOME/.cache/go-build + - $HOME/gopath/pkg/mod + +go: + - 1.x + +before_script: + - git fetch --depth=1 origin +refs/tags/*:refs/tags/* + - git describe --tags $(git rev-list --tags --max-count=1) --always + +script: + - go test -v -race -coverprofile=coverage.txt -covermode=atomic -p=1 ./... + +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/github.com/SevereCloud/vksdk/v2/CONTRIBUTING.md b/vendor/github.com/SevereCloud/vksdk/v2/CONTRIBUTING.md new file mode 100644 index 00000000..e78a83ea --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/CONTRIBUTING.md @@ -0,0 +1,92 @@ +# Contributing + +## Настройки + +`vksdk` написан на [Go](https://golang.org/). + +Требования: + +- [Go 1.13+](https://golang.org/doc/install) +- [golangci-lint](https://github.com/golangci/golangci-lint) +- [global .gitignore](https://help.github.com/en/articles/ignoring-files#create-a-global-gitignore) + +Сделайте fork и клонируйте `vksdk` куда угодно: + +```sh +git clone git@github.com:<your name>/vksdk.git +``` + +Создайте новую ветку + +```sh +git checkout -b <name_of_your_new_branch> +``` + +## Тестирование изменений + +Для начала проверьте ваш код с помощью +[golangci-lint](https://github.com/golangci/golangci-lint) + +```sh +golangci-lint run +``` + +Затем можно запускать тесты + +```sh +# SERVICE_TOKEN="" +# GROUP_TOKEN="" +# CLIENT_SECRET="" +# USER_TOKEN="" +# WIDGET_TOKEN="" +# CLIENT_ID="123456" +# GROUP_ID="123456" +# ACCOUNT_ID="123456" +go test ./... +``` + +Задавать токены не обязательно - тесты с их использованием будут пропущены. +**Не** рекомендуется задавать свой `USER_TOKEN`, так как тесты делают много +страшных вещей. + +Настройки для VSCode `.vscode/setting.json` + +```json +{ + "go.testEnvVars": { + "SERVICE_TOKEN": "", + "WIDGET_TOKEN": "", + "GROUP_TOKEN": "", + "CLIENT_SECRET": "", + "USER_TOKEN": "", + "CLIENT_ID": "123456", + "GROUP_ID": "123456", + "ACCOUNT_ID": "123456" + } +} +``` + +## Создание коммита + +Сообщения коммитов должны быть хорошо отформатированы, и чтобы сделать их +«стандартизированным», мы используем +[Conventional Commits](https://www.conventionalcommits.org/ru). + +```sh +git add . +git commit +``` + +## Отправьте pull request + +Отправьте изменения в ваш репозиторий + +```sh +git push origin <name_of_your_new_branch> +``` + +Затем откройте [pull request](https://github.com/SevereCloud/vksdk/pulls) +с веткой: + +- `master` если это багфикс +- `dev-v1.2.3` если это новая фича diff --git a/vendor/github.com/SevereCloud/vksdk/v2/LICENSE b/vendor/github.com/SevereCloud/vksdk/v2/LICENSE new file mode 100644 index 00000000..af30b338 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Daniil Suvorov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
\ No newline at end of file diff --git a/vendor/github.com/SevereCloud/vksdk/v2/README.md b/vendor/github.com/SevereCloud/vksdk/v2/README.md new file mode 100644 index 00000000..59224718 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/README.md @@ -0,0 +1,121 @@ +# VK SDK for Golang + +[![Build Status](https://travis-ci.com/SevereCloud/vksdk.svg?branch=master)](https://travis-ci.com/SevereCloud/vksdk) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/SevereCloud/vksdk/v2/v2)](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2?tab=subdirectories) +[![VK Developers](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/) +[![codecov](https://codecov.io/gh/SevereCloud/vksdk/branch/master/graph/badge.svg)](https://codecov.io/gh/SevereCloud/vksdk) +[![VK chat](https://img.shields.io/badge/VK%20chat-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.me/join/AJQ1d6Or8Q00Y_CSOESfbqGt) +[![release](https://img.shields.io/github/v/tag/SevereCloud/vksdk?label=release)](https://github.com/SevereCloud/vksdk/releases) +[![license](https://img.shields.io/github/license/SevereCloud/vksdk.svg?maxAge=2592000)](https://github.com/SevereCloud/vksdk/blob/master/LICENSE) + +**VK SDK for Golang** ready implementation of the main VK API functions for Go. + +[Russian documentation](https://github.com/SevereCloud/vksdk/wiki) + +## Features + +Version API 5.126. + +- [API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/api) + - 400+ methods + - Ability to change the request handler + - Ability to modify HTTP client + - Request Limiter + - Token pool +- [Callback API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/callback) + - Tracking tool for users activity in your VK communities + - Supports all events + - Auto setting callback +- [Bots Long Poll API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/longpoll-bot) + - Allows you to work with community events in real time + - Supports all events + - Ability to modify HTTP client +- [User Long Poll API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/longpoll-user) + - Allows you to work with user events in real time + - Ability to modify HTTP client +- [Streaming API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/streaming) + - Receiving public data from VK by specified keywords + - Ability to modify HTTP client +- [FOAF](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/foaf) + - Machine-readable ontology describing persons + - Works with users and groups + - The only place to get page creation date +- [VK Mini Apps](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/vkapps) + - Checking launch parameters + - Intermediate http handler +- [Payments API](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/payments) + - Processes payment notifications +- [Marusia Skills](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/marusia) + - For creating Marusia Skills + +## Install + +```bash +# go mod init mymodulename +go get github.com/SevereCloud/vksdk/v2@latest +``` + +## Use by + +- [Joe](https://github.com/go-joe/joe) adapter: <https://github.com/tdakkota/joe-vk-adapter> +- [Logrus](https://github.com/sirupsen/logrus) hook: <https://github.com/SevereCloud/vkrus> + +### Example + +```go +package main + +import ( + "context" + "log" + + "github.com/SevereCloud/vksdk/v2/api" + "github.com/SevereCloud/vksdk/v2/api/params" + "github.com/SevereCloud/vksdk/v2/events" + "github.com/SevereCloud/vksdk/v2/longpoll-bot" +) + +func main() { + token := "<TOKEN>" // use os.Getenv("TOKEN") + vk := api.NewVK(token) + + // get information about the group + group, err := vk.GroupsGetByID(nil) + if err != nil { + log.Fatal(err) + } + + // Initializing Long Poll + lp, err := longpoll.NewLongPoll(vk, group[0].ID) + if err != nil { + log.Fatal(err) + } + + // New message event + lp.MessageNew(func(_ context.Context, obj events.MessageNewObject) { + log.Printf("%d: %s", obj.Message.PeerID, obj.Message.Text) + + if obj.Message.Text == "ping" { + b := params.NewMessagesSendBuilder() + b.Message("pong") + b.RandomID(0) + b.PeerID(obj.Message.PeerID) + + _, err := vk.MessagesSend(b.Params) + if err != nil { + log.Fatal(err) + } + } + }) + + // Run Bots Long Poll + log.Println("Start Long Poll") + if err := lp.Run(); err != nil { + log.Fatal(err) + } +} +``` + +## LICENSE + +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FSevereCloud%2Fvksdk.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FSevereCloud%2Fvksdk?ref=badge_large) diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/README.md b/vendor/github.com/SevereCloud/vksdk/v2/api/README.md new file mode 100644 index 00000000..770ab025 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/README.md @@ -0,0 +1,555 @@ +# API + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/SevereCloud/vksdk/v2/api)](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/api) +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/first_guide) + +Данная библиотека поддерживает версию API **5.122**. + +## Запросы + +В начале необходимо инициализировать api с помощью [ключа доступа](https://vk.com/dev/access_token): + +```go +vk := api.NewVK("<TOKEN>") +``` + +### Запросы к API + +- `users.get` -> `vk.UsersGet(api.Params{})` +- `groups.get` с extended=1 -> `vk.GroupsGetExtended(api.Params{})` + +Список всех методов можно найти на +[данной странице](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/api?tab=doc#VK). + +Пример запроса [`users.get`](https://vk.com/dev/users.get) + +```go +users, err := vk.UsersGet(api.Params{ + "user_ids": 1, +}) +if err != nil { + log.Fatal(err) +} +``` + +### Параметры + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/SevereCloud/vksdk/v2/api/params)](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/api/params) + +Модуль params предназначен для генерации параметров запроса. + +```go +// import "github.com/SevereCloud/vksdk/v2/api/params" + +b := params.NewMessageSendBuilder() +b.PeerID(123) +b.Random(0) +b.DontParseLinks(false) +b.Message("Test message") + +res, err = api.MessageSend(b.Params) +``` + +### Обработка ошибок + +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/errors) + +Обработка ошибок полностью поддерживает методы +[go 1.13](https://blog.golang.org/go1.13-errors) + +```go +if errors.Is(err, api.ErrAuth) { + log.Println("User authorization failed") +} +``` + +```go +var e *api.Error +if errors.As(err, &e) { + switch e.Code { + case api.ErrCaptcha: + log.Println("Требуется ввод кода с картинки (Captcha)") + log.Printf("sid %s img %s", e.CaptchaSID, e.CaptchaImg) + case 1: + log.Println("Код ошибки 1") + default: + log.Printf("Ошибка %d %s", e.Code, e.Text) + } +} +``` + +Для Execute существует отдельная ошибка `ExecuteErrors` + +### Запрос любого метода + +Пример запроса [users.get](https://vk.com/dev/users.get) + +```go +// Определяем структуру, которую вернет API +var response []object.UsersUser +var err api.Error + +params := api.Params{ + "user_ids": 1, +} + +// Делаем запрос +err = vk.RequestUnmarshal("users.get", &response, params) +if err != nil { + log.Fatal(err) +} + +log.Print(response) +``` + +### Execute + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/SevereCloud/vksdk/v2/errors)](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/api#VK.Execute) +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/execute) + +Универсальный метод, который позволяет запускать последовательность других +методов, сохраняя и фильтруя промежуточные результаты. + +```go +var response struct { + Text string `json:"text"` +} + +err = vk.Execute(`return {text: "hello"};`, &response) +if err != nil { + log.Fatal(err) +} + +log.Print(response.Text) +``` + +### Обработчик запросов + +Обработчик `vk.Handler` должен возвращать структуру ответа от VK API и ошибку. +В качестве параметров принимать название метода и параметры. + +```go +vk.Handler = func(method string, params ...api.Params) (api.Response, error) { + // ... +} +``` + +Это может потребоваться, если вы можете поставить свой обработчик с +[fasthttp](https://github.com/valyala/fasthttp) и логгером. + +Стандартный обработчик использует [encoding/json](https://pkg.go.dev/net/http) +и [net/http](https://pkg.go.dev/net/http). В стандартном обработчике можно +настроить ограничитель запросов и HTTP клиент. + +#### Ограничитель запросов + +К методам API ВКонтакте (за исключением методов из секций secure и ads) с +ключом доступа пользователя или сервисным ключом доступа можно обращаться не +чаще 3 раз в секунду. Для ключа доступа сообщества ограничение составляет 20 +запросов в секунду. Если логика Вашего приложения подразумевает вызов +нескольких методов подряд, имеет смысл обратить внимание на метод execute. Он +позволяет совершить до 25 обращений к разным методам в рамках одного запроса. + +Для методов секции ads действуют собственные ограничения, ознакомиться с ними +Вы можете на [этой странице](https://vk.com/dev/ads_limits). + +Максимальное число обращений к методам секции secure зависит от числа +пользователей, установивших приложение. Если приложение установило меньше 10 +000 человек, то можно совершать 5 запросов в секунду, до 100 000 — 8 запросов, +до 1 000 000 — 20 запросов, больше 1 млн. — 35 запросов в секунду. + +Если Вы превысите частотное ограничение, сервер вернет ошибку с кодом +**6: "Too many requests per second."**. + +С помощью параметра `vk.Limit` можно установить ограничение на определенное +количество запросов в секунду + +### HTTP client + +В модуле реализована возможность изменять HTTP клиент с помощью параметра +`vk.Client` + +Пример прокси + +```go + +dialer, _ := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, proxy.Direct) +httpTransport := &http.Transport{ + Dial: dialer.Dial, +} +httpTransport.Dial = dialer.Dial + +client := &http.Client{ + Transport: httpTransport, +} + +vk.Client = client +``` + +### Ошибка с Captcha + +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/captcha_error) + +Если какое-либо действие (например, отправка сообщения) выполняется +пользователем слишком часто, то запрос к API может возвращать ошибку +"Captcha needed". При этом пользователю понадобится ввести код с изображения +и отправить запрос повторно с передачей введенного кода Captcha в параметрах +запроса. + +**Код ошибки**: 14 +**Текст ошибки**: Captcha needed + +Если возникает данная ошибка, то в сообщении об ошибке передаются также +следующие параметры: + +- `err.CaptchaSID` - идентификатор captcha +- `err.CaptchaImg` - ссылка на изображение, которое нужно показать + пользователю, чтобы он ввел текст с этого изображения. + +В этом случае следует запросить пользователя ввести текст с изображения +`err.CaptchaImg` и повторить запрос, добавив в него параметры: + +- `captcha_sid` - полученный идентификатор +- `captcha_key` - текст, который ввел пользователь + +## Загрузка файлов + +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/upload_files) + +### 1. Загрузка фотографий в альбом + +Допустимые форматы: JPG, PNG, GIF. +Файл объемом не более 50 МБ, соотношение сторон не менее 1:20 + +Загрузка фотографий в альбом для текущего пользователя: + +```go +photosPhoto, err = vk.UploadPhoto(albumID, response.Body) +``` + +Загрузка фотографий в альбом для группы: + +```go +photosPhoto, err = vk.UploadPhotoGroup(groupID, albumID, response.Body) +``` + +### 2. Загрузка фотографий на стену + +Допустимые форматы: JPG, PNG, GIF. +Файл объемом не более 50 МБ, соотношение сторон не менее 1:20 + +```go +photosPhoto, err = vk.UploadWallPhoto(response.Body) +``` + +Загрузка фотографий в альбом для группы: + +```go +photosPhoto, err = vk.UploadWallPhotoGroup(groupID, response.Body) +``` + +### 3. Загрузка главной фотографии пользователя или сообщества + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: размер не менее 200x200px, соотношение сторон от 0.25 до 3, +сумма высоты и ширины не более 14000px, файл объемом не более 50 МБ, +соотношение сторон не менее 1:20. + +Загрузка главной фотографии пользователя + +```go +photosPhoto, err = vk.UploadUserPhoto(file) +``` + +Загрузка фотографии пользователя или сообщества с миниатюрой + +```go +photosPhoto, err = vk.UploadOwnerPhoto(ownerID, squareСrop,file) +``` + +Для загрузки главной фотографии сообщества необходимо передать его идентификатор +со знаком «минус» в параметре `ownerID`. + +Дополнительно Вы можете передать параметр `squareСrop` в формате "x,y,w" (без +кавычек), где x и y — координаты верхнего правого угла миниатюры, а w — сторона +квадрата. Тогда для фотографии также будет подготовлена квадратная миниатюра. + +Загрузка фотографии пользователя или сообщества без миниатюры: + +```go +photosPhoto, err = vk.UploadOwnerPhoto(ownerID, "", file) +``` + +### 4. Загрузка фотографии в личное сообщение + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: сумма высоты и ширины не более 14000px, файл объемом +не более 50 МБ, соотношение сторон не менее 1:20. + +```go +photosPhoto, err = vk.UploadMessagesPhoto(peerID, file) +``` + +### 5. Загрузка главной фотографии для чата + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: размер не менее 200x200px, соотношение сторон от 0.25 до 3, сумма +высоты и ширины не более 14000px, файл объемом не более 50 МБ, соотношение +сторон не менее 1:20. + +Без обрезки: + +```go +messageInfo, err = vk.UploadChatPhoto(peerID, file) +``` + +С обрезкой: + +```go +messageInfo, err = vk.UploadChatPhotoCrop(peerID, cropX, cropY, cropWidth, file) +``` + +### 6. Загрузка фотографии для товара + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: минимальный размер фото — 400x400px, сумма высоты и ширины +не более 14000px, файл объемом не более 50 МБ, соотношение сторон не менее 1:20. + +Если Вы хотите загрузить основную фотографию товара, необходимо передать +параметр `mainPhoto = true`. Если фотография не основная, она не будет обрезаться. + +Без обрезки: + +```go +photosPhoto, err = vk.UploadMarketPhoto(groupID, mainPhoto, file) +``` + +Основную фотографию с обрезкой: + +```go +photosPhoto, err = vk.UploadMarketPhotoCrop(groupID, cropX, cropY, cropWidth, file) +``` + +### 7. Загрузка фотографии для подборки товаров + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: минимальный размер фото — 1280x720px, сумма высоты и ширины +не более 14000px, файл объемом не более 50 МБ, соотношение сторон не менее 1:20. + +```go +photosPhoto, err = vk.UploadMarketAlbumPhoto(groupID, file) +``` + +### 9. Загрузка видеозаписей + +Допустимые форматы: AVI, MP4, 3GP, MPEG, MOV, MP3, FLV, WMV. + +[Параметры](https://vk.com/dev/video.save) + +```go +videoUploadResponse, err = vk.UploadVideo(params, file) +``` + +После загрузки видеозапись проходит обработку и в списке видеозаписей может +появиться спустя некоторое время. + +### 10. Загрузка документов + +Допустимые форматы: любые форматы за исключением mp3 и исполняемых файлов. +Ограничения: файл объемом не более 200 МБ. + +`title` - название файла с расширением + +`tags` - метки для поиска + +`typeDoc` - тип документа. + +- doc - обычный документ; +- audio_message - голосовое сообщение + +Загрузить документ: + +```go +docsDoc, err = vk.UploadDoc(title, tags, file) +``` + +Загрузить документ в группу: + +```go +docsDoc, err = vk.UploadGroupDoc(groupID, title, tags, file) +``` + +Загрузить документ, для последующей отправки документа на стену: + +```go +docsDoc, err = vk.UploadWallDoc(title, tags, file) +``` + +Загрузить документ в группу, для последующей отправки документа на стену: + +```go +docsDoc, err = vk.UploadGroupWallDoc(groupID, title, tags, file) +``` + +Загрузить документ в личное сообщение: + +```go +docsDoc, err = vk.UploadMessagesDoc(peerID, typeDoc, title, tags, file) +``` + +### 11. Загрузка обложки сообщества + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: минимальный размер фото — 795x200px, сумма высоты и ширины +не более 14000px, файл объемом не более 50 МБ. Рекомендуемый размер: 1590x400px. +В сутки можно загрузить не более 1500 обложек. + +Необходимо указать координаты обрезки фотографии в параметрах +`cropX`, `cropY`, `cropX2`, `cropY2`. + +```go +photo, err = vk.UploadOwnerCoverPhoto(groupID, cropX, cropY, cropX2, cropY2, file) +``` + +### 12. Загрузка аудиосообщения + +Допустимые форматы: Ogg Opus. +Ограничения: sample rate 16kHz, variable bitrate 16 kbit/s, длительность +не более 5 минут. + +```go +docsDoc, err = vk.UploadMessagesDoc(peerID, "audio_message", title, tags, file) +``` + +### 13. Загрузка истории + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: сумма высоты и ширины не более 14000px, файл объемом +не более 10МБ. Формат видео: h264 video, aac audio, +максимальное разрешение 720х1280, 30fps. + +Загрузить историю с фотографией. [Параметры](https://vk.com/dev/stories.getPhotoUploadServer) + +```go +uploadInfo, err = vk.UploadStoriesPhoto(params, file) +``` + +Загрузить историю с видео. [Параметры](https://vk.com/dev/stories.getVideoUploadServer) + +```go +uploadInfo, err = vk.UploadStoriesVideo(params, file) +``` + +### Загрузка фоновой фотографии в опрос + +Допустимые форматы: JPG, PNG, GIF. +Ограничения: сумма высоты и ширины не более 14000px, файл объемом не более 50 МБ, +соотношение сторон не менее 1:20. + +```go +photosPhoto, err = vk.UploadPollsPhoto(file) +``` + +```go +photosPhoto, err = vk.UploadOwnerPollsPhoto(ownerID, file) +``` + +Для загрузки фотографии сообщества необходимо передать его идентификатор со +знаком «минус» в параметре `ownerID`. + +### Загрузка фотографии для карточки + +Для карточек используются квадратные изображения минимальным размером 400х400. +В случае загрузки неквадратного изображения, оно будет обрезано до квадратного. +Допустимые форматы: JPG, PNG, BMP, TIFF или GIF. +Ограничения: файл объемом не более 5 МБ. + +```go +photo, err = vk.UploadPrettyCardsPhoto(file) +``` + +### Загрузка обложки для формы + +Для форм сбора заявок используются прямоугольные изображения размером 1200х300. +В случае загрузки изображения другого размера, оно будет автоматически обрезано +до требуемого. +Допустимые форматы: JPG, PNG, BMP, TIFF или GIF. +Ограничения: файл объемом не более 5 МБ. + +```go +photo, err = vk.UploadLeadFormsPhoto(file) +``` + +Полученные данные можно использовать в методах +[leadForms.create](https://vk.com/dev/leadForms.create) +и +[leadForms.edit](https://vk.com/dev/leadForms.edit). + +Полученные данные можно использовать в методах +[prettyCards.create](https://vk.com/dev/prettyCards.create) +и +[prettyCards.edit](https://vk.com/dev/prettyCards.edit). + +### Загрузки фотографии в коллекцию приложения для виджетов приложений сообществ + +`imageType` (string) - тип изображения. + +Возможные значения: + +- 24x24 +- 50x50 +- 160x160 +- 160x240 +- 510x128 + +```go +image, err = vk.UploadAppImage(imageType, file) +``` + +### Загрузки фотографии в коллекцию сообщества для виджетов приложений сообществ + +`imageType` (string) - тип изображения. + +Возможные значения: + +- 24x24 +- 50x50 +- 160x160 +- 160x240 +- 510x128 + +```go +image, err = vk.UploadGroupAppImage(imageType, file) +``` + +#### Примеры + +Загрузка фотографии в альбом: + +```go +response, err := os.Open("photo.jpeg") +if err != nil { + log.Fatal(err) +} +defer response.Body.Close() + +photo, err = vk.UploadPhoto(albumID, response.Body) +if err != nil { + log.Fatal(err) +} +``` + +Загрузка фотографии в альбом из интернета: + +```go +response, err := http.Get("https://sun9-45.userapi.com/c638629/v638629852/2afba/o-dvykjSIB4.jpg") +if err != nil { + log.Fatal(err) +} +defer response.Body.Close() + +photo, err = vk.UploadPhoto(albumID, response.Body) +if err != nil { + log.Fatal(err) +} +``` diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/account.go b/vendor/github.com/SevereCloud/vksdk/v2/api/account.go new file mode 100644 index 00000000..7e38ce2b --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/account.go @@ -0,0 +1,196 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// AccountBan account.ban. +// +// https://vk.com/dev/account.ban +func (vk *VK) AccountBan(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.ban", &response, params) + return +} + +// AccountChangePasswordResponse struct. +type AccountChangePasswordResponse struct { + Token string `json:"token"` +} + +// AccountChangePassword changes a user password after access is successfully restored with the auth.restore method. +// +// https://vk.com/dev/account.changePassword +func (vk *VK) AccountChangePassword(params Params) (response AccountChangePasswordResponse, err error) { + err = vk.RequestUnmarshal("account.changePassword", &response, params) + return +} + +// AccountGetActiveOffersResponse struct. +type AccountGetActiveOffersResponse struct { + Count int `json:"count"` + Items []object.AccountOffer `json:"items"` +} + +// AccountGetActiveOffers returns a list of active ads (offers). +// If the user fulfill their conditions, he will be able to get +// the appropriate number of votes to his balance. +// +// https://vk.com/dev/account.getActiveOffers +func (vk *VK) AccountGetActiveOffers(params Params) (response AccountGetActiveOffersResponse, err error) { + err = vk.RequestUnmarshal("account.getActiveOffers", &response, params) + return +} + +// AccountGetAppPermissions gets settings of the user in this application. +// +// https://vk.com/dev/account.getAppPermissions +func (vk *VK) AccountGetAppPermissions(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.getAppPermissions", &response, params) + return +} + +// AccountGetBannedResponse struct. +type AccountGetBannedResponse struct { + Count int `json:"count"` + Items []int `json:"items"` + object.ExtendedResponse +} + +// AccountGetBanned returns a user's blacklist. +// +// https://vk.com/dev/account.getBanned +func (vk *VK) AccountGetBanned(params Params) (response AccountGetBannedResponse, err error) { + err = vk.RequestUnmarshal("account.getBanned", &response, params) + return +} + +// AccountGetCountersResponse struct. +type AccountGetCountersResponse object.AccountAccountCounters + +// AccountGetCounters returns non-null values of user counters. +// +// https://vk.com/dev/account.getCounters +func (vk *VK) AccountGetCounters(params Params) (response AccountGetCountersResponse, err error) { + err = vk.RequestUnmarshal("account.getCounters", &response, params) + return +} + +// AccountGetInfoResponse struct. +type AccountGetInfoResponse object.AccountInfo + +// AccountGetInfo returns current account info. +// +// https://vk.com/dev/account.getInfo +func (vk *VK) AccountGetInfo(params Params) (response AccountGetInfoResponse, err error) { + err = vk.RequestUnmarshal("account.getInfo", &response, params) + return +} + +// AccountGetProfileInfoResponse struct. +type AccountGetProfileInfoResponse object.AccountUserSettings + +// AccountGetProfileInfo returns the current account info. +// +// https://vk.com/dev/account.getProfileInfo +func (vk *VK) AccountGetProfileInfo(params Params) (response AccountGetProfileInfoResponse, err error) { + err = vk.RequestUnmarshal("account.getProfileInfo", &response, params) + return +} + +// AccountGetPushSettingsResponse struct. +type AccountGetPushSettingsResponse object.AccountPushSettings + +// AccountGetPushSettings account.getPushSettings Gets settings of push notifications. +// +// https://vk.com/dev/account.getPushSettings +func (vk *VK) AccountGetPushSettings(params Params) (response AccountGetPushSettingsResponse, err error) { + err = vk.RequestUnmarshal("account.getPushSettings", &response, params) + return +} + +// AccountRegisterDevice subscribes an iOS/Android/Windows/Mac based device to receive push notifications. +// +// https://vk.com/dev/account.registerDevice +func (vk *VK) AccountRegisterDevice(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.registerDevice", &response, params) + return +} + +// AccountSaveProfileInfoResponse struct. +type AccountSaveProfileInfoResponse struct { + Changed object.BaseBoolInt `json:"changed"` + NameRequest object.AccountNameRequest `json:"name_request"` +} + +// AccountSaveProfileInfo edits current profile info. +// +// https://vk.com/dev/account.saveProfileInfo +func (vk *VK) AccountSaveProfileInfo(params Params) (response AccountSaveProfileInfoResponse, err error) { + err = vk.RequestUnmarshal("account.saveProfileInfo", &response, params) + return +} + +// AccountSetInfo allows to edit the current account info. +// +// https://vk.com/dev/account.setInfo +func (vk *VK) AccountSetInfo(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setInfo", &response, params) + return +} + +// AccountSetNameInMenu sets an application screen name +// (up to 17 characters), that is shown to the user in the left menu. +// +// https://vk.com/dev/account.setNameInMenu +func (vk *VK) AccountSetNameInMenu(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setNameInMenu", &response, params) + return +} + +// AccountSetOffline marks a current user as offline. +// +// https://vk.com/dev/account.setOffline +func (vk *VK) AccountSetOffline(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setOffline", &response, params) + return +} + +// AccountSetOnline marks the current user as online for 5 minutes. +// +// https://vk.com/dev/account.setOnline +func (vk *VK) AccountSetOnline(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setOnline", &response, params) + return +} + +// AccountSetPushSettings change push settings. +// +// https://vk.com/dev/account.setPushSettings +func (vk *VK) AccountSetPushSettings(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setPushSettings", &response, params) + return +} + +// AccountSetSilenceMode mutes push notifications for the set period of time. +// +// https://vk.com/dev/account.setSilenceMode +func (vk *VK) AccountSetSilenceMode(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.setSilenceMode", &response, params) + return +} + +// AccountUnban account.unban. +// +// https://vk.com/dev/account.unban +func (vk *VK) AccountUnban(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.unban", &response, params) + return +} + +// AccountUnregisterDevice unsubscribes a device from push notifications. +// +// https://vk.com/dev/account.unregisterDevice +func (vk *VK) AccountUnregisterDevice(params Params) (response int, err error) { + err = vk.RequestUnmarshal("account.unregisterDevice", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/ads.go b/vendor/github.com/SevereCloud/vksdk/v2/api/ads.go new file mode 100644 index 00000000..529e1be4 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/ads.go @@ -0,0 +1,581 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "encoding/json" + + "github.com/SevereCloud/vksdk/v2/object" +) + +// AdsAddOfficeUsersItem struct. +type AdsAddOfficeUsersItem struct { + OK object.BaseBoolInt + Error AdsError +} + +// UnmarshalJSON func. +func (r *AdsAddOfficeUsersItem) UnmarshalJSON(data []byte) (err error) { + if r.OK.UnmarshalJSON(data) != nil { + return json.Unmarshal(data, &r.Error) + } + + return +} + +// AdsAddOfficeUsersResponse struct. +type AdsAddOfficeUsersResponse []AdsAddOfficeUsersItem + +// AdsAddOfficeUsers adds managers and/or supervisors to advertising account. +// +// https://vk.com/dev/ads.addOfficeUsers +func (vk *VK) AdsAddOfficeUsers(params Params) (response AdsAddOfficeUsersResponse, err error) { + err = vk.RequestUnmarshal("ads.addOfficeUsers", &response, params) + return +} + +// AdsCheckLinkResponse struct. +type AdsCheckLinkResponse struct { + // link status + Status object.AdsLinkStatus `json:"status"` + + // (if status = disallowed) — description of the reason + Description string `json:"description,omitempty"` + + // (if the end link differs from original and status = allowed) — end link. + RedirectURL string `json:"redirect_url,omitempty"` +} + +// AdsCheckLink allows to check the ad link. +// +// https://vk.com/dev/ads.checkLink +func (vk *VK) AdsCheckLink(params Params) (response AdsCheckLinkResponse, err error) { + err = vk.RequestUnmarshal("ads.checkLink", &response, params) + return +} + +// AdsCreateAdsResponse struct. +type AdsCreateAdsResponse []struct { + ID int `json:"id"` + AdsError +} + +// AdsCreateAds creates ads. +// +// Please note! Maximum allowed number of ads created in one request is 5. +// Minimum size of ad audience is 50 people. +// +// https://vk.com/dev/ads.createAds +func (vk *VK) AdsCreateAds(params Params) (response AdsCreateAdsResponse, err error) { + err = vk.RequestUnmarshal("ads.createAds", &response, params) + return +} + +// AdsCreateCampaignsResponse struct. +type AdsCreateCampaignsResponse []struct { + ID int `json:"id"` + AdsError +} + +// AdsCreateCampaigns creates advertising campaigns. +// +// Please note! Allowed number of campaigns created in one request is 50. +// +// https://vk.com/dev/ads.createCampaigns +func (vk *VK) AdsCreateCampaigns(params Params) (response AdsCreateCampaignsResponse, err error) { + err = vk.RequestUnmarshal("ads.createCampaigns", &response, params) + return +} + +// AdsCreateClientsResponse struct. +type AdsCreateClientsResponse []struct { + ID int `json:"id"` + AdsError +} + +// AdsCreateClients creates clients of an advertising agency. +// +// Available only for advertising agencies. +// +// Please note! Allowed number of clients created in one request is 50. +// +// https://vk.com/dev/ads.createClients +func (vk *VK) AdsCreateClients(params Params) (response AdsCreateClientsResponse, err error) { + err = vk.RequestUnmarshal("ads.createClients", &response, params) + return +} + +// AdsCreateLookalikeRequestResponse struct. +type AdsCreateLookalikeRequestResponse struct { + RequestID int `json:"request_id"` +} + +// AdsCreateLookalikeRequest creates a request to find a similar audience. +// +// https://vk.com/dev/ads.createLookalikeRequest +func (vk *VK) AdsCreateLookalikeRequest(params Params) (response AdsCreateLookalikeRequestResponse, err error) { + err = vk.RequestUnmarshal("ads.createLookalikeRequest", &response, params) + return +} + +// AdsCreateTargetGroupResponse struct. +type AdsCreateTargetGroupResponse struct { + ID int `json:"id"` +} + +// AdsCreateTargetGroup Creates a group to re-target ads for users who visited +// advertiser's site (viewed information about the product, registered, etc.). +// +// When executed successfully this method returns user accounting code on +// advertiser's site. You shall add this code to the site page, so users +// registered in VK will be added to the created target group after they visit +// this page. +// +// Use ads.importTargetContacts method to import existing user contacts to +// the group. +// +// Please note! Maximum allowed number of groups for one advertising +// account is 100. +// +// https://vk.com/dev/ads.createTargetGroup +func (vk *VK) AdsCreateTargetGroup(params Params) (response AdsCreateTargetGroupResponse, err error) { + err = vk.RequestUnmarshal("ads.createTargetGroup", &response, params) + return +} + +// AdsCreateTargetPixelResponse struct. +type AdsCreateTargetPixelResponse struct { + ID int `json:"id"` + Pixel string `json:"pixel"` +} + +// AdsCreateTargetPixel Creates retargeting pixel. +// +// Method returns pixel code for users accounting on the advertiser site. +// Authorized VK users who visited the page with pixel code on it will be +// added to retargeting audience with corresponding rules. You can also use +// Open API, ads.importTargetContacts method and loading from file. +// +// Maximum pixels number per advertising account is 25. +// +// https://vk.com/dev/ads.createTargetPixel +func (vk *VK) AdsCreateTargetPixel(params Params) (response AdsCreateTargetPixelResponse, err error) { + err = vk.RequestUnmarshal("ads.createTargetPixel", &response, params) + return +} + +// AdsDeleteAdsResponse struct. +// +// Each response is 0 — deleted successfully, or an error code. +type AdsDeleteAdsResponse []ErrorType + +// AdsDeleteAds archives ads. +// +// Warning! Maximum allowed number of ads archived in one request is 100. +// +// https://vk.com/dev/ads.deleteAds +func (vk *VK) AdsDeleteAds(params Params) (response AdsDeleteAdsResponse, err error) { + err = vk.RequestUnmarshal("ads.deleteAds", &response, params) + return +} + +// AdsDeleteCampaignsResponse struct. +// +// Each response is 0 — deleted successfully, or an error code. +type AdsDeleteCampaignsResponse []ErrorType + +// AdsDeleteCampaigns archives advertising campaigns. +// +// +// Warning! Maximum allowed number of campaigns archived in one request is 100. +// +// https://vk.com/dev/ads.deleteCampaigns +func (vk *VK) AdsDeleteCampaigns(params Params) (response AdsDeleteCampaignsResponse, err error) { + err = vk.RequestUnmarshal("ads.deleteCampaigns", &response, params) + return +} + +// AdsDeleteClientsResponse struct. +// +// Each response is 0 — deleted successfully, or an error code. +type AdsDeleteClientsResponse []ErrorType + +// AdsDeleteClients archives clients of an advertising agency. +// +// Available only for advertising agencies. +// +// Please note! Maximum allowed number of clients edited in one request is 10. +// +// https://vk.com/dev/ads.deleteClients +func (vk *VK) AdsDeleteClients(params Params) (response AdsDeleteClientsResponse, err error) { + err = vk.RequestUnmarshal("ads.deleteClients", &response, params) + return +} + +// AdsDeleteTargetGroup deletes target group. +// +// https://vk.com/dev/ads.deleteTargetGroup +func (vk *VK) AdsDeleteTargetGroup(params Params) (response int, err error) { + err = vk.RequestUnmarshal("ads.deleteTargetGroup", &response, params) + return +} + +// AdsDeleteTargetPixel deletes target pixel. +// +// https://vk.com/dev/ads.deleteTargetPixel +func (vk *VK) AdsDeleteTargetPixel(params Params) (response int, err error) { + err = vk.RequestUnmarshal("ads.deleteTargetPixel", &response, params) + return +} + +// AdsGetAccountsResponse struct. +type AdsGetAccountsResponse []object.AdsAccount + +// AdsGetAccounts returns a list of advertising accounts. +// +// https://vk.com/dev/ads.getAccounts +func (vk *VK) AdsGetAccounts(params Params) (response AdsGetAccountsResponse, err error) { + err = vk.RequestUnmarshal("ads.getAccounts", &response, params) + return +} + +// AdsGetAdsResponse struct. +type AdsGetAdsResponse []object.AdsAd + +// AdsGetAds returns a list of ads. +// +// https://vk.com/dev/ads.getAds +func (vk *VK) AdsGetAds(params Params) (response AdsGetAdsResponse, err error) { + err = vk.RequestUnmarshal("ads.getAds", &response, params) + return +} + +// AdsGetAdsLayoutResponse struct. +type AdsGetAdsLayoutResponse []object.AdsAdLayout + +// AdsGetAdsLayout returns descriptions of ad layouts. +// +// https://vk.com/dev/ads.getAdsLayout +func (vk *VK) AdsGetAdsLayout(params Params) (response AdsGetAdsLayoutResponse, err error) { + err = vk.RequestUnmarshal("ads.getAdsLayout", &response, params) + return +} + +// TODO: AdsGetAdsTargetingResponse struct. +// type AdsGetAdsTargetingResponse struct{} + +// TODO: AdsGetAdsTargeting ... +// +// https://vk.com/dev/ads.getAdsTargeting +// func (vk *VK) AdsGetAdsTargeting(params Params) (response AdsGetAdsTargetingResponse, err error) { +// err = vk.RequestUnmarshal("ads.getAdsTargeting", &response, params) +// return +// } + +// TODO: AdsGetBudgetResponse struct. +// type AdsGetBudgetResponse struct{} + +// TODO: AdsGetBudget ... +// +// https://vk.com/dev/ads.getBudget +// func (vk *VK) AdsGetBudget(params Params) (response AdsGetBudgetResponse, err error) { +// err = vk.RequestUnmarshal("ads.getBudget", &response, params) +// return +// } + +// TODO: AdsGetCampaignsResponse struct. +// type AdsGetCampaignsResponse struct{} + +// TODO: AdsGetCampaigns ... +// +// https://vk.com/dev/ads.getCampaigns +// func (vk *VK) AdsGetCampaigns(params Params) (response AdsGetCampaignsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getCampaigns", &response, params) +// return +// } + +// TODO: AdsGetCategoriesResponse struct. +// type AdsGetCategoriesResponse struct{} + +// TODO: AdsGetCategories ... +// +// https://vk.com/dev/ads.getCategories +// func (vk *VK) AdsGetCategories(params Params) (response AdsGetCategoriesResponse, err error) { +// err = vk.RequestUnmarshal("ads.getCategories", &response, params) +// return +// } + +// TODO: AdsGetClientsResponse struct. +// type AdsGetClientsResponse struct{} + +// TODO: AdsGetClients ... +// +// https://vk.com/dev/ads.getClients +// func (vk *VK) AdsGetClients(params Params) (response AdsGetClientsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getClients", &response, params) +// return +// } + +// TODO: AdsGetDemographicsResponse struct. +// type AdsGetDemographicsResponse struct{} + +// TODO: AdsGetDemographics ... +// +// https://vk.com/dev/ads.getDemographics +// func (vk *VK) AdsGetDemographics(params Params) (response AdsGetDemographicsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getDemographics", &response, params) +// return +// } + +// TODO: AdsGetFloodStatsResponse struct. +// type AdsGetFloodStatsResponse struct{} + +// TODO: AdsGetFloodStats ... +// +// https://vk.com/dev/ads.getFloodStats +// func (vk *VK) AdsGetFloodStats(params Params) (response AdsGetFloodStatsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getFloodStats", &response, params) +// return +// } + +// TODO: AdsGetLookalikeRequestsResponse struct. +// type AdsGetLookalikeRequestsResponse struct{} + +// TODO: AdsGetLookalikeRequests ... +// +// https://vk.com/dev/ads.getLookalikeRequests +// func (vk *VK) AdsGetLookalikeRequests(params Params) (response AdsGetLookalikeRequestsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getLookalikeRequests", &response, params) +// return +// } + +// AdsGetMusiciansResponse struct. +type AdsGetMusiciansResponse struct { + Items []object.BaseObjectWithName +} + +// AdsGetMusicians returns a list of musicians. +// +// https://vk.com/dev/ads.getMusicians +func (vk *VK) AdsGetMusicians(params Params) (response AdsGetMusiciansResponse, err error) { + err = vk.RequestUnmarshal("ads.getMusicians", &response, params) + return +} + +// TODO: AdsGetOfficeUsersResponse struct. +// type AdsGetOfficeUsersResponse struct{} + +// TODO: AdsGetOfficeUsers ... +// +// https://vk.com/dev/ads.getOfficeUsers +// func (vk *VK) AdsGetOfficeUsers(params Params) (response AdsGetOfficeUsersResponse, err error) { +// err = vk.RequestUnmarshal("ads.getOfficeUsers", &response, params) +// return +// } + +// TODO: AdsGetPostsReachResponse struct. +// type AdsGetPostsReachResponse struct{} + +// TODO: AdsGetPostsReach ... +// +// https://vk.com/dev/ads.getPostsReach +// func (vk *VK) AdsGetPostsReach(params Params) (response AdsGetPostsReachResponse, err error) { +// err = vk.RequestUnmarshal("ads.getPostsReach", &response, params) +// return +// } + +// TODO: AdsGetRejectionReasonResponse struct. +// type AdsGetRejectionReasonResponse struct{} + +// TODO: AdsGetRejectionReason ... +// +// https://vk.com/dev/ads.getRejectionReason +// func (vk *VK) AdsGetRejectionReason(params Params) (response AdsGetRejectionReasonResponse, err error) { +// err = vk.RequestUnmarshal("ads.getRejectionReason", &response, params) +// return +// } + +// TODO: AdsGetStatisticsResponse struct. +// type AdsGetStatisticsResponse struct{} + +// TODO: AdsGetStatistics ... +// +// https://vk.com/dev/ads.getStatistics +// func (vk *VK) AdsGetStatistics(params Params) (response AdsGetStatisticsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getStatistics", &response, params) +// return +// } + +// TODO: AdsGetSuggestionsResponse struct. +// type AdsGetSuggestionsResponse struct{} + +// TODO: AdsGetSuggestions ... +// +// https://vk.com/dev/ads.getSuggestions +// func (vk *VK) AdsGetSuggestions(params Params) (response AdsGetSuggestionsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getSuggestions", &response, params) +// return +// } + +// AdsGetTargetGroupsResponse struct. +type AdsGetTargetGroupsResponse []object.AdsTargetGroup + +// AdsGetTargetGroups returns a list of target groups. +// +// https://vk.com/dev/ads.getTargetGroups +func (vk *VK) AdsGetTargetGroups(params Params) (response AdsGetTargetGroupsResponse, err error) { + err = vk.RequestUnmarshal("ads.getTargetGroups", &response, params) + return +} + +// TODO: AdsGetTargetPixelsResponse struct. +// type AdsGetTargetPixelsResponse struct{} + +// TODO: AdsGetTargetPixels ... +// +// https://vk.com/dev/ads.getTargetPixels +// func (vk *VK) AdsGetTargetPixels(params Params) (response AdsGetTargetPixelsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getTargetPixels", &response, params) +// return +// } + +// TODO: AdsGetTargetingStatsResponse struct. +// type AdsGetTargetingStatsResponse struct{} + +// TODO: AdsGetTargetingStats ... +// +// https://vk.com/dev/ads.getTargetingStats +// func (vk *VK) AdsGetTargetingStats(params Params) (response AdsGetTargetingStatsResponse, err error) { +// err = vk.RequestUnmarshal("ads.getTargetingStats", &response, params) +// return +// } + +// TODO: AdsGetUploadURLResponse struct. +// type AdsGetUploadURLResponse struct{} + +// TODO: AdsGetUploadURL ... +// +// https://vk.com/dev/ads.getUploadURL +// func (vk *VK) AdsGetUploadURL(params Params) (response AdsGetUploadURLResponse, err error) { +// err = vk.RequestUnmarshal("ads.getUploadURL", &response, params) +// return +// } + +// TODO: AdsGetVideoUploadURLResponse struct. +// type AdsGetVideoUploadURLResponse struct{} + +// TODO: AdsGetVideoUploadURL ... +// +// https://vk.com/dev/ads.getVideoUploadURL +// func (vk *VK) AdsGetVideoUploadURL(params Params) (response AdsGetVideoUploadURLResponse, err error) { +// err = vk.RequestUnmarshal("ads.getVideoUploadURL", &response, params) +// return +// } + +// TODO: AdsImportTargetContactsResponse struct. +// type AdsImportTargetContactsResponse struct{} + +// TODO: AdsImportTargetContacts ... +// +// https://vk.com/dev/ads.importTargetContacts +// func (vk *VK) AdsImportTargetContacts(params Params) (response AdsImportTargetContactsResponse, err error) { +// err = vk.RequestUnmarshal("ads.importTargetContacts", &response, params) +// return +// } + +// TODO: AdsRemoveOfficeUsersResponse struct. +// type AdsRemoveOfficeUsersResponse struct{} + +// TODO: AdsRemoveOfficeUsers ... +// +// https://vk.com/dev/ads.removeOfficeUsers +// func (vk *VK) AdsRemoveOfficeUsers(params Params) (response AdsRemoveOfficeUsersResponse, err error) { +// err = vk.RequestUnmarshal("ads.removeOfficeUsers", &response, params) +// return +// } + +// AdsRemoveTargetContacts accepts the request to exclude the advertiser's +// contacts from the retargeting audience. +// +// The maximum allowed number of contacts to be excluded by a single +// request is 1000. +// +// Contacts are excluded within a few hours of the request. +// +// https://vk.com/dev/ads.removeTargetContacts +func (vk *VK) AdsRemoveTargetContacts(params Params) (response int, err error) { + err = vk.RequestUnmarshal("ads.removeTargetContacts", &response, params) + return +} + +// TODO: AdsSaveLookalikeRequestResultResponse struct. +// type AdsSaveLookalikeRequestResultResponse struct{} + +// TODO: AdsSaveLookalikeRequestResult ... +// +// https://vk.com/dev/ads.saveLookalikeRequestResult +// func (vk *VK) AdsSaveLookalikeRequestResult(params Params) ( +// response AdsSaveLookalikeRequestResultResponse, +// err error, +// ) { +// err = vk.RequestUnmarshal("ads.saveLookalikeRequestResult", &response, params) +// return +// } + +// TODO: AdsShareTargetGroupResponse struct. +// type AdsShareTargetGroupResponse struct{} + +// TODO: AdsShareTargetGroup ... +// +// https://vk.com/dev/ads.shareTargetGroup +// func (vk *VK) AdsShareTargetGroup(params Params) (response AdsShareTargetGroupResponse, err error) { +// err = vk.RequestUnmarshal("ads.shareTargetGroup", &response, params) +// return +// } + +// TODO: AdsUpdateAdsResponse struct. +// type AdsUpdateAdsResponse struct{} + +// TODO: AdsUpdateAds ... +// +// https://vk.com/dev/ads.updateAds +// func (vk *VK) AdsUpdateAds(params Params) (response AdsUpdateAdsResponse, err error) { +// err = vk.RequestUnmarshal("ads.updateAds", &response, params) +// return +// } + +// TODO: AdsUpdateCampaignsResponse struct. +// type AdsUpdateCampaignsResponse struct{} + +// TODO: AdsUpdateCampaigns ... +// +// https://vk.com/dev/ads.updateCampaigns +// func (vk *VK) AdsUpdateCampaigns(params Params) (response AdsUpdateCampaignsResponse, err error) { +// err = vk.RequestUnmarshal("ads.updateCampaigns", &response, params) +// return +// } + +// TODO: AdsUpdateClientsResponse struct. +// type AdsUpdateClientsResponse struct{} + +// TODO: AdsUpdateClients ... +// +// https://vk.com/dev/ads.updateClients +// func (vk *VK) AdsUpdateClients(params Params) (response AdsUpdateClientsResponse, err error) { +// err = vk.RequestUnmarshal("ads.updateClients", &response, params) +// return +// } + +// AdsUpdateTargetGroup edits target group. +// +// https://vk.com/dev/ads.updateTargetGroup +func (vk *VK) AdsUpdateTargetGroup(params Params) (response int, err error) { + err = vk.RequestUnmarshal("ads.updateTargetGroup", &response, params) + return +} + +// AdsUpdateTargetPixel edits target pixel. +// +// https://vk.com/dev/ads.updateTargetPixel +func (vk *VK) AdsUpdateTargetPixel(params Params) (response int, err error) { + err = vk.RequestUnmarshal("ads. updateTargetPixel", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/api.go b/vendor/github.com/SevereCloud/vksdk/v2/api/api.go new file mode 100644 index 00000000..56da7784 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/api.go @@ -0,0 +1,359 @@ +/* +Package api implements VK API. + +See more https://vk.com/dev/api_requests +*/ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "mime" + "net/http" + "net/url" + "reflect" + "sync" + "sync/atomic" + "time" + + "github.com/SevereCloud/vksdk/v2" + "github.com/SevereCloud/vksdk/v2/internal" + "github.com/SevereCloud/vksdk/v2/object" +) + +// Api constants. +const ( + Version = vksdk.API + MethodURL = "https://api.vk.com/method/" +) + +// VKontakte API methods (except for methods from secure and ads sections) +// with user access key or service access key can be accessed +// no more than 3 times per second. The community access key is limited +// to 20 requests per second. +// +// Maximum amount of calls to the secure section methods depends +// on the app's users amount. If an app has less than +// 10 000 users, 5 requests per second, +// up to 100 000 – 8 requests, +// up to 1 000 000 – 20 requests, +// 1 000 000+ – 35 requests. +// +// The ads section methods are subject to their own limitations, +// you can read them on this page - https://vk.com/dev/ads_limits +// +// If one of this limits is exceeded, the server will return following error: +// "Too many requests per second". (errors.TooMany). +// +// If your app's logic implies many requests in a row, check the execute method. +// It allows for up to 25 requests for different methods in a single request. +// +// In addition to restrictions on the frequency of calls, there are also +// quantitative restrictions on calling the same type of methods. +// +// After exceeding the quantitative limit, access to a particular method may +// require entering a captcha (see https://vk.com/dev/captcha_error), +// and may also be temporarily restricted (in this case, the server does +// not return a response to the call of a particular method, but handles +// any other requests without problems). +// +// If this error occurs, the following parameters are also passed in +// the error message: +// +// CaptchaSID - identifier captcha. +// +// CaptchaImg - a link to the image that you want to show the user +// to enter text from that image. +// +// In this case, you should ask the user to enter text from +// the CaptchaImg image and repeat the request by adding parameters to it: +// +// captcha_sid - the obtained identifier; +// +// captcha_key - text entered by the user. +// +// More info: https://vk.com/dev/api_requests +const ( + LimitUserToken = 3 + LimitGroupToken = 20 +) + +// VK struct. +type VK struct { + accessTokens []string + lastToken uint32 + MethodURL string + Version string + Client *http.Client + Limit int + UserAgent string + Handler func(method string, params ...Params) (Response, error) + + mux sync.Mutex + lastTime time.Time + rps int +} + +// Response struct. +type Response struct { + Response json.RawMessage `json:"response"` + Error Error `json:"error"` + ExecuteErrors ExecuteErrors `json:"execute_errors"` +} + +// NewVK returns a new VK. +// +// The VKSDK will use the http.DefaultClient. +// This means that if the http.DefaultClient is modified by other components +// of your application the modifications will be picked up by the SDK as well. +// +// In some cases this might be intended, but it is a better practice +// to create a custom HTTP Client to share explicitly through +// your application. You can configure the VKSDK to use the custom +// HTTP Client by setting the VK.Client value. +// +// This set limit 20 requests per second for one token. +func NewVK(tokens ...string) *VK { + var vk VK + + vk.accessTokens = tokens + vk.Version = Version + + vk.Handler = vk.defaultHandler + + vk.MethodURL = MethodURL + vk.Client = http.DefaultClient + vk.Limit = LimitGroupToken + vk.UserAgent = internal.UserAgent + + return &vk +} + +// getToken return next token (simple round-robin). +func (vk *VK) getToken() string { + i := atomic.AddUint32(&vk.lastToken, 1) + return vk.accessTokens[(int(i)-1)%len(vk.accessTokens)] +} + +// Params type. +type Params map[string]interface{} + +// Lang - determines the language for the data to be displayed on. For +// example country and city names. If you use a non-cyrillic language, +// cyrillic symbols will be transliterated automatically. +// Numeric format from account.getInfo is supported as well. +// +// p.Lang(object.LangRU) +// +// See all language code in module object. +func (p Params) Lang(v int) Params { + p["lang"] = v + return p +} + +// TestMode allows to send requests from a native app without switching it on +// for all users. +func (p Params) TestMode(v bool) Params { + p["test_mode"] = v + return p +} + +// CaptchaSID received ID. +// +// See https://vk.com/dev/captcha_error +func (p Params) CaptchaSID(v string) Params { + p["captcha_sid"] = v + return p +} + +// CaptchaKey text input. +// +// See https://vk.com/dev/captcha_error +func (p Params) CaptchaKey(v string) Params { + p["captcha_key"] = v + return p +} + +// Confirm parameter. +// +// See https://vk.com/dev/need_confirmation +func (p Params) Confirm(v bool) Params { + p["confirm"] = v + return p +} + +// WithContext parameter. +func (p Params) WithContext(ctx context.Context) Params { + p[":context"] = ctx + return p +} + +func buildQuery(sliceParams ...Params) (context.Context, url.Values) { + query := url.Values{} + ctx := context.Background() + + for _, params := range sliceParams { + for key, value := range params { + if key != ":context" { + query.Set(key, FmtValue(value, 0)) + } else { + ctx = value.(context.Context) + } + } + } + + return ctx, query +} + +// defaultHandler provides access to VK API methods. +func (vk *VK) defaultHandler(method string, sliceParams ...Params) (Response, error) { + u := vk.MethodURL + method + ctx, query := buildQuery(sliceParams...) + attempt := 0 + + for { + var response Response + + attempt++ + + // Rate limiting + if vk.Limit > 0 { + vk.mux.Lock() + + sleepTime := time.Second - time.Since(vk.lastTime) + if sleepTime < 0 { + vk.lastTime = time.Now() + vk.rps = 0 + } else if vk.rps == vk.Limit*len(vk.accessTokens) { + time.Sleep(sleepTime) + vk.lastTime = time.Now() + vk.rps = 0 + } + vk.rps++ + + vk.mux.Unlock() + } + + rawBody := bytes.NewBufferString(query.Encode()) + + req, err := http.NewRequestWithContext(ctx, "POST", u, rawBody) + if err != nil { + return response, err + } + + req.Header.Set("User-Agent", vk.UserAgent) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + resp, err := vk.Client.Do(req) + if err != nil { + return response, err + } + + mediatype, _, _ := mime.ParseMediaType(resp.Header.Get("Content-Type")) + if mediatype != "application/json" { + _ = resp.Body.Close() + return response, &InvalidContentType{mediatype} + } + + err = json.NewDecoder(resp.Body).Decode(&response) + if err != nil { + _ = resp.Body.Close() + return response, err + } + + _ = resp.Body.Close() + + switch response.Error.Code { + case ErrNoType: + return response, nil + case ErrTooMany: + if attempt < vk.Limit { + continue + } + + return response, &response.Error + } + + return response, &response.Error + } +} + +// Request provides access to VK API methods. +func (vk *VK) Request(method string, sliceParams ...Params) ([]byte, error) { + token := vk.getToken() + + reqParams := Params{ + "access_token": token, + "v": vk.Version, + } + + sliceParams = append(sliceParams, reqParams) + + resp, err := vk.Handler(method, sliceParams...) + + return resp.Response, err +} + +// RequestUnmarshal provides access to VK API methods. +func (vk *VK) RequestUnmarshal(method string, obj interface{}, sliceParams ...Params) error { + rawResponse, err := vk.Request(method, sliceParams...) + if err != nil { + return err + } + + return json.Unmarshal(rawResponse, &obj) +} + +func fmtReflectValue(value reflect.Value, depth int) string { + switch f := value; value.Kind() { + case reflect.Invalid: + return "" + case reflect.Bool: + return fmtBool(f.Bool()) + case reflect.Array, reflect.Slice: + s := "" + + for i := 0; i < f.Len(); i++ { + if i > 0 { + s += "," + } + + s += FmtValue(f.Index(i).Interface(), depth) + } + + return s + case reflect.Ptr: + // pointer to array or slice or struct? ok at top level + // but not embedded (avoid loops) + if depth == 0 && f.Pointer() != 0 { + switch a := f.Elem(); a.Kind() { + case reflect.Array, reflect.Slice, reflect.Struct, reflect.Map: + return FmtValue(a.Interface(), depth+1) + } + } + } + + return fmt.Sprint(value) +} + +// FmtValue return vk format string. +func FmtValue(value interface{}, depth int) string { + if value == nil { + return "" + } + + switch f := value.(type) { + case bool: + return fmtBool(f) + case object.Attachment: + return f.ToAttachment() + case object.JSONObject: + return f.ToJSON() + case reflect.Value: + return fmtReflectValue(f, depth) + } + + return fmtReflectValue(reflect.ValueOf(value), depth) +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/apps.go b/vendor/github.com/SevereCloud/vksdk/v2/api/apps.go new file mode 100644 index 00000000..892ee607 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/apps.go @@ -0,0 +1,149 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// AppsDeleteAppRequests deletes all request notifications from the current app. +// +// https://vk.com/dev/apps.deleteAppRequests +func (vk *VK) AppsDeleteAppRequests(params Params) (response int, err error) { + err = vk.RequestUnmarshal("apps.deleteAppRequests", &response, params) + return +} + +// AppsGetResponse struct. +type AppsGetResponse struct { + Count int `json:"count"` + Items []object.AppsApp `json:"items"` + object.ExtendedResponse +} + +// AppsGet returns applications data. +// +// https://vk.com/dev/apps.get +func (vk *VK) AppsGet(params Params) (response AppsGetResponse, err error) { + err = vk.RequestUnmarshal("apps.get", &response, params) + return +} + +// AppsGetCatalogResponse struct. +type AppsGetCatalogResponse struct { + Count int `json:"count"` + Items []object.AppsApp `json:"items"` + object.ExtendedResponse +} + +// AppsGetCatalog returns a list of applications (apps) available to users in the App Catalog. +// +// https://vk.com/dev/apps.getCatalog +func (vk *VK) AppsGetCatalog(params Params) (response AppsGetCatalogResponse, err error) { + err = vk.RequestUnmarshal("apps.getCatalog", &response, params) + return +} + +// AppsGetFriendsListResponse struct. +type AppsGetFriendsListResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// AppsGetFriendsList creates friends list for requests and invites in current app. +// +// extended=0 +// +// https://vk.com/dev/apps.getFriendsList +func (vk *VK) AppsGetFriendsList(params Params) (response AppsGetFriendsListResponse, err error) { + err = vk.RequestUnmarshal("apps.getFriendsList", &response, params, Params{"extended": false}) + + return +} + +// AppsGetFriendsListExtendedResponse struct. +type AppsGetFriendsListExtendedResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// AppsGetFriendsListExtended creates friends list for requests and invites in current app. +// +// extended=1 +// +// https://vk.com/dev/apps.getFriendsList +func (vk *VK) AppsGetFriendsListExtended(params Params) (response AppsGetFriendsListExtendedResponse, err error) { + err = vk.RequestUnmarshal("apps.getFriendsList", &response, params, Params{"extended": true}) + + return +} + +// AppsGetLeaderboardResponse struct. +type AppsGetLeaderboardResponse struct { + Count int `json:"count"` + Items []object.AppsLeaderboard `json:"items"` +} + +// AppsGetLeaderboard returns players rating in the game. +// +// extended=0 +// +// https://vk.com/dev/apps.getLeaderboard +func (vk *VK) AppsGetLeaderboard(params Params) (response AppsGetLeaderboardResponse, err error) { + err = vk.RequestUnmarshal("apps.getLeaderboard", &response, params, Params{"extended": false}) + + return +} + +// AppsGetLeaderboardExtendedResponse struct. +type AppsGetLeaderboardExtendedResponse struct { + Count int `json:"count"` + Items []struct { + Score int `json:"score"` + UserID int `json:"user_id"` + } `json:"items"` + Profiles []object.UsersUser `json:"profiles"` +} + +// AppsGetLeaderboardExtended returns players rating in the game. +// +// extended=1 +// +// https://vk.com/dev/apps.getLeaderboard +func (vk *VK) AppsGetLeaderboardExtended(params Params) (response AppsGetLeaderboardExtendedResponse, err error) { + err = vk.RequestUnmarshal("apps.getLeaderboard", &response, params, Params{"extended": true}) + + return +} + +// AppsGetScopesResponse struct. +type AppsGetScopesResponse struct { + Count int `json:"count"` + Items []object.AppsScope `json:"items"` +} + +// AppsGetScopes ... +// +// TODO: write docs. +// +// https://vk.com/dev/apps.getScopes +func (vk *VK) AppsGetScopes(params Params) (response AppsGetScopesResponse, err error) { + err = vk.RequestUnmarshal("apps.getScopes", &response, params) + return +} + +// AppsGetScore returns user score in app. +// +// NOTE: vk wtf!? +// +// https://vk.com/dev/apps.getScore +func (vk *VK) AppsGetScore(params Params) (response string, err error) { + err = vk.RequestUnmarshal("apps.getScore", &response, params) + return +} + +// AppsSendRequest sends a request to another user in an app that uses VK authorization. +// +// https://vk.com/dev/apps.sendRequest +func (vk *VK) AppsSendRequest(params Params) (response int, err error) { + err = vk.RequestUnmarshal("apps.sendRequest", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/appwidgets.go b/vendor/github.com/SevereCloud/vksdk/v2/api/appwidgets.go new file mode 100644 index 00000000..5500d0e2 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/appwidgets.go @@ -0,0 +1,100 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// AppWidgetsGetAppImageUploadServerResponse struct. +type AppWidgetsGetAppImageUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// AppWidgetsGetAppImageUploadServer returns a URL for uploading a +// photo to the app collection for community app widgets. +// +// https://vk.com/dev/appWidgets.getAppImageUploadServer +func (vk *VK) AppWidgetsGetAppImageUploadServer(params Params) ( + response AppWidgetsGetAppImageUploadServerResponse, + err error, +) { + err = vk.RequestUnmarshal("appWidgets.getAppImageUploadServer", &response, params) + return +} + +// AppWidgetsGetAppImagesResponse struct. +type AppWidgetsGetAppImagesResponse struct { + Count int `json:"count"` + Items []object.AppWidgetsImage `json:"items"` +} + +// AppWidgetsGetAppImages returns an app collection of images for community app widgets. +// +// https://vk.com/dev/appWidgets.getAppImages +func (vk *VK) AppWidgetsGetAppImages(params Params) (response AppWidgetsGetAppImagesResponse, err error) { + err = vk.RequestUnmarshal("appWidgets.getAppImages", &response, params) + return +} + +// AppWidgetsGetGroupImageUploadServerResponse struct. +type AppWidgetsGetGroupImageUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// AppWidgetsGetGroupImageUploadServer returns a URL for uploading +// a photo to the community collection for community app widgets. +// +// https://vk.com/dev/appWidgets.getGroupImageUploadServer +func (vk *VK) AppWidgetsGetGroupImageUploadServer(params Params) ( + response AppWidgetsGetGroupImageUploadServerResponse, + err error, +) { + err = vk.RequestUnmarshal("appWidgets.getGroupImageUploadServer", &response, params) + return +} + +// AppWidgetsGetGroupImagesResponse struct. +type AppWidgetsGetGroupImagesResponse struct { + Count int `json:"count"` + Items []object.AppWidgetsImage `json:"items"` +} + +// AppWidgetsGetGroupImages returns a community collection of images for community app widgets. +// +// https://vk.com/dev/appWidgets.getGroupImages +func (vk *VK) AppWidgetsGetGroupImages(params Params) (response AppWidgetsGetGroupImagesResponse, err error) { + err = vk.RequestUnmarshal("appWidgets.getGroupImages", &response, params) + return +} + +// AppWidgetsGetImagesByID returns an image for community app widgets by its ID. +// +// https://vk.com/dev/appWidgets.getImagesById +func (vk *VK) AppWidgetsGetImagesByID(params Params) (response object.AppWidgetsImage, err error) { + err = vk.RequestUnmarshal("appWidgets.getImagesById", &response, params) + return +} + +// AppWidgetsSaveAppImage allows to save image into app collection for community app widgets. +// +// https://vk.com/dev/appWidgets.saveAppImage +func (vk *VK) AppWidgetsSaveAppImage(params Params) (response object.AppWidgetsImage, err error) { + err = vk.RequestUnmarshal("appWidgets.saveAppImage", &response, params) + return +} + +// AppWidgetsSaveGroupImage allows to save image into community collection for community app widgets. +// +// https://vk.com/dev/appWidgets.saveGroupImage +func (vk *VK) AppWidgetsSaveGroupImage(params Params) (response object.AppWidgetsImage, err error) { + err = vk.RequestUnmarshal("appWidgets.saveGroupImage", &response, params) + return +} + +// AppWidgetsUpdate allows to update community app widget. +// +// https://vk.com/dev/appWidgets.update +func (vk *VK) AppWidgetsUpdate(params Params) (response int, err error) { + err = vk.RequestUnmarshal("appWidgets.update", &response, params) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/auth.go b/vendor/github.com/SevereCloud/vksdk/v2/api/auth.go new file mode 100644 index 00000000..f927a6ff --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/auth.go @@ -0,0 +1,26 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +// AuthCheckPhone checks a user's phone number for correctness. +// +// https://vk.com/dev/auth.checkPhone +// +// Deprecated: This method is deprecated and may be disabled soon, please avoid +// using it. +func (vk *VK) AuthCheckPhone(params Params) (response int, err error) { + err = vk.RequestUnmarshal("auth.checkPhone", &response, params) + return +} + +// AuthRestoreResponse struct. +type AuthRestoreResponse struct { + Success int `json:"success"` + SID string `json:"sid"` +} + +// AuthRestore allows to restore account access using a code received via SMS. +// +// https://vk.com/dev/auth.restore +func (vk *VK) AuthRestore(params Params) (response AuthRestoreResponse, err error) { + err = vk.RequestUnmarshal("auth.restore", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/board.go b/vendor/github.com/SevereCloud/vksdk/v2/api/board.go new file mode 100644 index 00000000..82ddd5c0 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/board.go @@ -0,0 +1,173 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// BoardAddTopic creates a new topic on a community's discussion board. +// +// https://vk.com/dev/board.addTopic +func (vk *VK) BoardAddTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.addTopic", &response, params) + return +} + +// BoardCloseTopic closes a topic on a community's discussion board so that comments cannot be posted. +// +// https://vk.com/dev/board.closeTopic +func (vk *VK) BoardCloseTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.closeTopic", &response, params) + return +} + +// BoardCreateComment adds a comment on a topic on a community's discussion board. +// +// https://vk.com/dev/board.createComment +func (vk *VK) BoardCreateComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.createComment", &response, params) + return +} + +// BoardDeleteComment deletes a comment on a topic on a community's discussion board. +// +// https://vk.com/dev/board.deleteComment +func (vk *VK) BoardDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.deleteComment", &response, params) + return +} + +// BoardDeleteTopic deletes a topic from a community's discussion board. +// +// https://vk.com/dev/board.deleteTopic +func (vk *VK) BoardDeleteTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.deleteTopic", &response, params) + return +} + +// BoardEditComment edits a comment on a topic on a community's discussion board. +// +// https://vk.com/dev/board.editComment +func (vk *VK) BoardEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.editComment", &response, params) + return +} + +// BoardEditTopic edits the title of a topic on a community's discussion board. +// +// https://vk.com/dev/board.editTopic +func (vk *VK) BoardEditTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.editTopic", &response, params) + return +} + +// BoardFixTopic pins a topic (fixes its place) to the top of a community's discussion board. +// +// https://vk.com/dev/board.fixTopic +func (vk *VK) BoardFixTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.fixTopic", &response, params) + return +} + +// BoardGetCommentsResponse struct. +type BoardGetCommentsResponse struct { + Count int `json:"count"` + Items []object.BoardTopicComment `json:"items"` + Poll object.BoardTopicPoll `json:"poll"` + RealOffset int `json:"real_offset"` +} + +// BoardGetComments returns a list of comments on a topic on a community's discussion board. +// +// extended=0 +// +// https://vk.com/dev/board.getComments +func (vk *VK) BoardGetComments(params Params) (response BoardGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("board.getComments", &response, params, Params{"extended": false}) + + return +} + +// BoardGetCommentsExtendedResponse struct. +type BoardGetCommentsExtendedResponse struct { + Count int `json:"count"` + Items []object.BoardTopicComment `json:"items"` + Poll object.BoardTopicPoll `json:"poll"` + RealOffset int `json:"real_offset"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` +} + +// BoardGetCommentsExtended returns a list of comments on a topic on a community's discussion board. +// +// extended=1 +// +// https://vk.com/dev/board.getComments +func (vk *VK) BoardGetCommentsExtended(params Params) (response BoardGetCommentsExtendedResponse, err error) { + err = vk.RequestUnmarshal("board.getComments", &response, params, Params{"extended": true}) + + return +} + +// BoardGetTopicsResponse struct. +type BoardGetTopicsResponse struct { + Count int `json:"count"` + Items []object.BoardTopic `json:"items"` + DefaultOrder float64 `json:"default_order"` // BUG(VK): default_order int https://vk.com/bug136682 + CanAddTopics object.BaseBoolInt `json:"can_add_topics"` +} + +// BoardGetTopics returns a list of topics on a community's discussion board. +// +// extended=0 +// +// https://vk.com/dev/board.getTopics +func (vk *VK) BoardGetTopics(params Params) (response BoardGetTopicsResponse, err error) { + err = vk.RequestUnmarshal("board.getTopics", &response, params, Params{"extended": false}) + + return +} + +// BoardGetTopicsExtendedResponse struct. +type BoardGetTopicsExtendedResponse struct { + Count int `json:"count"` + Items []object.BoardTopic `json:"items"` + DefaultOrder float64 `json:"default_order"` // BUG(VK): default_order int https://vk.com/bug136682 + CanAddTopics object.BaseBoolInt `json:"can_add_topics"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` +} + +// BoardGetTopicsExtended returns a list of topics on a community's discussion board. +// +// extended=1 +// +// https://vk.com/dev/board.getTopics +func (vk *VK) BoardGetTopicsExtended(params Params) (response BoardGetTopicsExtendedResponse, err error) { + err = vk.RequestUnmarshal("board.getTopics", &response, params, Params{"extended": true}) + + return +} + +// BoardOpenTopic re-opens a previously closed topic on a community's discussion board. +// +// https://vk.com/dev/board.openTopic +func (vk *VK) BoardOpenTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.openTopic", &response, params) + return +} + +// BoardRestoreComment restores a comment deleted from a topic on a community's discussion board. +// +// https://vk.com/dev/board.restoreComment +func (vk *VK) BoardRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.restoreComment", &response, params) + return +} + +// BoardUnfixTopic unpins a pinned topic from the top of a community's discussion board. +// +// https://vk.com/dev/board.unfixTopic +func (vk *VK) BoardUnfixTopic(params Params) (response int, err error) { + err = vk.RequestUnmarshal("board.unfixTopic", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/captcha.go b/vendor/github.com/SevereCloud/vksdk/v2/api/captcha.go new file mode 100644 index 00000000..4abd1f8a --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/captcha.go @@ -0,0 +1,7 @@ +package api + +// CaptchaForce api method. +func (vk *VK) CaptchaForce(params Params) (response int, err error) { + err = vk.RequestUnmarshal("captcha.force", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/database.go b/vendor/github.com/SevereCloud/vksdk/v2/api/database.go new file mode 100644 index 00000000..9a199762 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/database.go @@ -0,0 +1,163 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// DatabaseGetChairsResponse struct. +type DatabaseGetChairsResponse struct { + Count int `json:"count"` + Items []object.BaseObject `json:"items"` +} + +// DatabaseGetChairs returns list of chairs on a specified faculty. +// +// https://vk.com/dev/database.getChairs +func (vk *VK) DatabaseGetChairs(params Params) (response DatabaseGetChairsResponse, err error) { + err = vk.RequestUnmarshal("database.getChairs", &response, params) + return +} + +// DatabaseGetCitiesResponse struct. +type DatabaseGetCitiesResponse struct { + Count int `json:"count"` + Items []object.DatabaseCity `json:"items"` +} + +// DatabaseGetCities returns a list of cities. +// +// https://vk.com/dev/database.getCities +func (vk *VK) DatabaseGetCities(params Params) (response DatabaseGetCitiesResponse, err error) { + err = vk.RequestUnmarshal("database.getCities", &response, params) + return +} + +// DatabaseGetCitiesByIDResponse struct. +type DatabaseGetCitiesByIDResponse []object.DatabaseCity + +// DatabaseGetCitiesByID returns information about cities by their IDs. +// +// https://vk.com/dev/database.getCitiesByID +func (vk *VK) DatabaseGetCitiesByID(params Params) (response DatabaseGetCitiesByIDResponse, err error) { + err = vk.RequestUnmarshal("database.getCitiesById", &response, params) + return +} + +// DatabaseGetCountriesResponse struct. +type DatabaseGetCountriesResponse struct { + Count int `json:"count"` + Items []object.BaseObject `json:"items"` +} + +// DatabaseGetCountries returns a list of countries. +// +// https://vk.com/dev/database.getCountries +func (vk *VK) DatabaseGetCountries(params Params) (response DatabaseGetCountriesResponse, err error) { + err = vk.RequestUnmarshal("database.getCountries", &response, params) + return +} + +// DatabaseGetCountriesByIDResponse struct. +type DatabaseGetCountriesByIDResponse []object.BaseObject + +// DatabaseGetCountriesByID returns information about countries by their IDs. +// +// https://vk.com/dev/database.getCountriesByID +func (vk *VK) DatabaseGetCountriesByID(params Params) (response DatabaseGetCountriesByIDResponse, err error) { + err = vk.RequestUnmarshal("database.getCountriesById", &response, params) + return +} + +// DatabaseGetFacultiesResponse struct. +type DatabaseGetFacultiesResponse struct { + Count int `json:"count"` + Items []object.DatabaseFaculty `json:"items"` +} + +// DatabaseGetFaculties returns a list of faculties (i.e., university departments). +// +// https://vk.com/dev/database.getFaculties +func (vk *VK) DatabaseGetFaculties(params Params) (response DatabaseGetFacultiesResponse, err error) { + err = vk.RequestUnmarshal("database.getFaculties", &response, params) + return +} + +// DatabaseGetMetroStationsResponse struct. +type DatabaseGetMetroStationsResponse struct { + Count int `json:"count"` + Items []object.DatabaseMetroStation `json:"items"` +} + +// DatabaseGetMetroStations returns the list of metro stations. +// +// https://vk.com/dev/database.getMetroStations +func (vk *VK) DatabaseGetMetroStations(params Params) (response DatabaseGetMetroStationsResponse, err error) { + err = vk.RequestUnmarshal("database.getMetroStations", &response, params) + return +} + +// DatabaseGetMetroStationsByIDResponse struct. +type DatabaseGetMetroStationsByIDResponse []object.DatabaseMetroStation + +// DatabaseGetMetroStationsByID returns information about one or several metro stations by their identifiers. +// +// https://vk.com/dev/database.getMetroStationsById +func (vk *VK) DatabaseGetMetroStationsByID(params Params) (response DatabaseGetMetroStationsByIDResponse, err error) { + err = vk.RequestUnmarshal("database.getMetroStationsById", &response, params) + return +} + +// DatabaseGetRegionsResponse struct. +type DatabaseGetRegionsResponse struct { + Count int `json:"count"` + Items []object.DatabaseRegion `json:"items"` +} + +// DatabaseGetRegions returns a list of regions. +// +// https://vk.com/dev/database.getRegions +func (vk *VK) DatabaseGetRegions(params Params) (response DatabaseGetRegionsResponse, err error) { + err = vk.RequestUnmarshal("database.getRegions", &response, params) + return +} + +// DatabaseGetSchoolClassesResponse struct. +type DatabaseGetSchoolClassesResponse [][]interface{} + +// DatabaseGetSchoolClasses returns a list of school classes specified for the country. +// +// BUG(VK): database.getSchoolClasses bad return. +// +// https://vk.com/dev/database.getSchoolClasses +func (vk *VK) DatabaseGetSchoolClasses(params Params) (response DatabaseGetSchoolClassesResponse, err error) { + err = vk.RequestUnmarshal("database.getSchoolClasses", &response, params) + return +} + +// DatabaseGetSchoolsResponse struct. +type DatabaseGetSchoolsResponse struct { + Count int `json:"count"` + Items []object.DatabaseSchool `json:"items"` +} + +// DatabaseGetSchools returns a list of schools. +// +// https://vk.com/dev/database.getSchools +func (vk *VK) DatabaseGetSchools(params Params) (response DatabaseGetSchoolsResponse, err error) { + err = vk.RequestUnmarshal("database.getSchools", &response, params) + return +} + +// DatabaseGetUniversitiesResponse struct. +type DatabaseGetUniversitiesResponse struct { + Count int `json:"count"` + Items []object.DatabaseUniversity `json:"items"` +} + +// DatabaseGetUniversities returns a list of higher education institutions. +// +// https://vk.com/dev/database.getUniversities +func (vk *VK) DatabaseGetUniversities(params Params) (response DatabaseGetUniversitiesResponse, err error) { + err = vk.RequestUnmarshal("database.getUniversities", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/docs.go b/vendor/github.com/SevereCloud/vksdk/v2/api/docs.go new file mode 100644 index 00000000..48605dae --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/docs.go @@ -0,0 +1,137 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// DocsAdd copies a document to a user's or community's document list. +// +// https://vk.com/dev/docs.add +func (vk *VK) DocsAdd(params Params) (response int, err error) { + err = vk.RequestUnmarshal("docs.add", &response, params) + return +} + +// DocsDelete deletes a user or community document. +// +// https://vk.com/dev/docs.delete +func (vk *VK) DocsDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("docs.delete", &response, params) + return +} + +// DocsEdit edits a document. +// +// https://vk.com/dev/docs.edit +func (vk *VK) DocsEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("docs.edit", &response, params) + return +} + +// DocsGetResponse struct. +type DocsGetResponse struct { + Count int `json:"count"` + Items []object.DocsDoc `json:"items"` +} + +// DocsGet returns detailed information about user or community documents. +// +// https://vk.com/dev/docs.get +func (vk *VK) DocsGet(params Params) (response DocsGetResponse, err error) { + err = vk.RequestUnmarshal("docs.get", &response, params) + return +} + +// DocsGetByIDResponse struct. +type DocsGetByIDResponse []object.DocsDoc + +// DocsGetByID returns information about documents by their IDs. +// +// https://vk.com/dev/docs.getById +func (vk *VK) DocsGetByID(params Params) (response DocsGetByIDResponse, err error) { + err = vk.RequestUnmarshal("docs.getById", &response, params) + return +} + +// DocsGetMessagesUploadServerResponse struct. +type DocsGetMessagesUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// DocsGetMessagesUploadServer returns the server address for document upload. +// +// https://vk.com/dev/docs.getMessagesUploadServer +func (vk *VK) DocsGetMessagesUploadServer(params Params) (response DocsGetMessagesUploadServerResponse, err error) { + err = vk.RequestUnmarshal("docs.getMessagesUploadServer", &response, params) + return +} + +// DocsGetTypesResponse struct. +type DocsGetTypesResponse struct { + Count int `json:"count"` + Items []object.DocsDocTypes `json:"items"` +} + +// DocsGetTypes returns documents types available for current user. +// +// https://vk.com/dev/docs.getTypes +func (vk *VK) DocsGetTypes(params Params) (response DocsGetTypesResponse, err error) { + err = vk.RequestUnmarshal("docs.getTypes", &response, params) + return +} + +// DocsGetUploadServerResponse struct. +type DocsGetUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// DocsGetUploadServer returns the server address for document upload. +// +// https://vk.com/dev/docs.getUploadServer +func (vk *VK) DocsGetUploadServer(params Params) (response DocsGetUploadServerResponse, err error) { + err = vk.RequestUnmarshal("docs.getUploadServer", &response, params) + return +} + +// DocsGetWallUploadServerResponse struct. +type DocsGetWallUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// DocsGetWallUploadServer returns the server address for document upload onto a user's or community's wall. +// +// https://vk.com/dev/docs.getWallUploadServer +func (vk *VK) DocsGetWallUploadServer(params Params) (response DocsGetWallUploadServerResponse, err error) { + err = vk.RequestUnmarshal("docs.getWallUploadServer", &response, params) + return +} + +// DocsSaveResponse struct. +type DocsSaveResponse struct { + Type string `json:"type"` + AudioMessage object.MessagesAudioMessage `json:"audio_message"` + Doc object.DocsDoc `json:"doc"` + Graffiti object.MessagesGraffiti `json:"graffiti"` +} + +// DocsSave saves a document after uploading it to a server. +// +// https://vk.com/dev/docs.save +func (vk *VK) DocsSave(params Params) (response DocsSaveResponse, err error) { + err = vk.RequestUnmarshal("docs.save", &response, params) + return +} + +// DocsSearchResponse struct. +type DocsSearchResponse struct { + Count int `json:"count"` + Items []object.DocsDoc `json:"items"` +} + +// DocsSearch returns a list of documents matching the search criteria. +// +// https://vk.com/dev/docs.search +func (vk *VK) DocsSearch(params Params) (response DocsSearchResponse, err error) { + err = vk.RequestUnmarshal("docs.search", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/donut.go b/vendor/github.com/SevereCloud/vksdk/v2/api/donut.go new file mode 100644 index 00000000..d6a13837 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/donut.go @@ -0,0 +1,49 @@ +package api + +import "github.com/SevereCloud/vksdk/v2/object" + +// DonutGetFriendsResponse struct. +type DonutGetFriendsResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// DonutGetFriends method. +// +// https://vk.com/dev/donut.getFriends +func (vk *VK) DonutGetFriends(params Params) (response DonutGetFriendsResponse, err error) { + err = vk.RequestUnmarshal("donut.getFriends", &response, params) + return +} + +// DonutGetSubscription method. +// +// https://vk.com/dev/donut.getSubscription +func (vk *VK) DonutGetSubscription(params Params) (response object.DonutDonatorSubscriptionInfo, err error) { + err = vk.RequestUnmarshal("donut.getSubscription", &response, params) + return +} + +// DonutGetSubscriptionsResponse struct. +type DonutGetSubscriptionsResponse struct { + Subscriptions []object.DonutDonatorSubscriptionInfo `json:"subscriptions"` + Count int `json:"count"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` +} + +// DonutGetSubscriptions method. +// +// https://vk.com/dev/donut.getSubscriptions +func (vk *VK) DonutGetSubscriptions(params Params) (response DonutGetSubscriptionsResponse, err error) { + err = vk.RequestUnmarshal("donut.getSubscriptions", &response, params) + return +} + +// DonutIsDon method. +// +// https://vk.com/dev/donut.isDon +func (vk *VK) DonutIsDon(params Params) (response int, err error) { + err = vk.RequestUnmarshal("donut.isDon", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/downloadedGames.go b/vendor/github.com/SevereCloud/vksdk/v2/api/downloadedGames.go new file mode 100644 index 00000000..cd03cfdb --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/downloadedGames.go @@ -0,0 +1,19 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// DownloadedGamesGetPaidStatusResponse struct. +type DownloadedGamesGetPaidStatusResponse struct { + IsPaid object.BaseBoolInt `json:"is_paid"` +} + +// DownloadedGamesGetPaidStatus method. +// +// https://vk.com/dev/downloadedGames.getPaidStatus +func (vk *VK) DownloadedGamesGetPaidStatus(params Params) (response DownloadedGamesGetPaidStatusResponse, err error) { + err = vk.RequestUnmarshal("downloadedGames.getPaidStatus", &response, params, Params{"extended": false}) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/errors.go b/vendor/github.com/SevereCloud/vksdk/v2/api/errors.go new file mode 100644 index 00000000..a852e7d9 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/errors.go @@ -0,0 +1,927 @@ +package api + +import ( + "errors" + "fmt" + + "github.com/SevereCloud/vksdk/v2/object" +) + +// ErrorType is the type of an error. +type ErrorType int + +// Error returns the message of a ErrorType. +func (e ErrorType) Error() string { + return fmt.Sprintf("api: error with code %d", e) +} + +// Error codes. See https://vk.com/dev/errors +const ( + ErrNoType ErrorType = 0 // NoType error + + // Unknown error occurred + // + // Try again later. + ErrUnknown ErrorType = 1 + + // Application is disabled. Enable your application or use test mode + // + // You need to switch on the app in Settings + // https://vk.com/editapp?id={Your API_ID} + // or use the test mode (test_mode=1). + ErrDisabled ErrorType = 2 + + // Unknown method passed. + // + // Check the method name: http://vk.com/dev/methods + ErrMethod ErrorType = 3 + ErrSignature ErrorType = 4 // Incorrect signature + + // User authorization failed + // + // Make sure that you use a correct authorization type. + ErrAuth ErrorType = 5 + + // Too many requests per second + // + // Decrease the request frequency or use the execute method. + // More details on frequency limits here: + // https://vk.com/dev/api_requests + ErrTooMany ErrorType = 6 + + // Permission to perform this action is denied + // + // Make sure that your have received required permissions during the + // authorization. + // You can do it with the account.getAppPermissions method. + // https://vk.com/dev/permissions + ErrPermission ErrorType = 7 + + // Invalid request + // + // Check the request syntax and used parameters list (it can be found on + // a method description page). + ErrRequest ErrorType = 8 + + // Flood control + // + // You need to decrease the count of identical requests. For more efficient + // work you may use execute. + ErrFlood ErrorType = 9 + + // Internal server error + // + // Try again later. + ErrServer ErrorType = 10 + + // In test mode application should be disabled or user should be authorized + // + // Switch the app off in Settings: + // + // https://vk.com/editapp?id={Your API_ID} + // + ErrEnabledInTest ErrorType = 11 + + // Unable to compile code. + ErrCompile ErrorType = 12 + + // Runtime error occurred during code invocation. + ErrRuntime ErrorType = 13 + + // Captcha needed. + // + // See https://vk.com/dev/captcha_error + ErrCaptcha ErrorType = 14 + + // Access denied + // + // Make sure that you use correct identifiers and the content is available + // for the user in the full version of the site. + ErrAccess ErrorType = 15 + + // HTTP authorization failed + // + // To avoid this error check if a user has the 'Use secure connection' + // option enabled with the account.getInfo method. + ErrAuthHTTPS ErrorType = 16 + + // Validation required + // + // Make sure that you don't use a token received with + // http://vk.com/dev/auth_mobile for a request from the server. + // It's restricted. + // + // https://vk.com/dev/need_validation + ErrAuthValidation ErrorType = 17 + ErrUserDeleted ErrorType = 18 // User was deleted or banned + ErrBlocked ErrorType = 19 // Content blocked + + // Permission to perform this action is denied for non-standalone + // applications. + ErrMethodPermission ErrorType = 20 + + // Permission to perform this action is allowed only for standalone and + // OpenAPI applications. + ErrMethodAds ErrorType = 21 + ErrUpload ErrorType = 22 // Upload error + + // This method was disabled. + // + // All the methods available now are listed here: http://vk.com/dev/methods + ErrMethodDisabled ErrorType = 23 + + // Confirmation required + // + // In some cases VK requires to request action confirmation from the user + // (for Standalone apps only). + // + // Following parameter is transmitted with the error message as well: + // + // confirmation_text – text of the message to be shown in the default + // confirmation window. + // + // The app should display the default confirmation window + // with text from confirmation_text and two buttons: "Continue" and + // "Cancel". + // If user confirms the action repeat the request with an extra parameter: + // + // confirm = 1. + // + // https://vk.com/dev/need_confirmation + ErrNeedConfirmation ErrorType = 24 + ErrNeedTokenConfirmation ErrorType = 25 // Token confirmation required + ErrGroupAuth ErrorType = 27 // Group authorization failed + ErrAppAuth ErrorType = 28 // Application authorization failed + + // Rate limit reached. + // + // More details on rate limits here: https://vk.com/dev/data_limits + ErrRateLimit ErrorType = 29 + ErrPrivateProfile ErrorType = 30 // This profile is private + + // Method execution was interrupted due to timeout. + ErrExecutionTimeout ErrorType = 36 + + // User was banned. + ErrUserBanned ErrorType = 37 + + // Unknown application. + ErrUnknownApplication ErrorType = 38 + + // Unknown user. + ErrUnknownUser ErrorType = 39 + + // Unknown group. + ErrUnknownGroup ErrorType = 40 + + // One of the parameters specified was missing or invalid + // + // Check the required parameters list and their format on a method + // description page. + ErrParam ErrorType = 100 + + // Invalid application API ID + // + // Find the app in the administrated list in settings: + // http://vk.com/apps?act=settings + // And set the correct API_ID in the request. + ErrParamAPIID ErrorType = 101 + ErrLimits ErrorType = 103 // Out of limits + ErrNotFound ErrorType = 104 // Not found + ErrSaveFile ErrorType = 105 // Couldn't save file + ErrActionFailed ErrorType = 106 // Unable to process action + + // Invalid user id + // + // Make sure that you use a correct id. You can get an id using a screen + // name with the utils.resolveScreenName method. + ErrParamUserID ErrorType = 113 + ErrParamAlbumID ErrorType = 114 // Invalid album id + ErrParamServer ErrorType = 118 // Invalid server + ErrParamTitle ErrorType = 119 // Invalid title + ErrParamPhotos ErrorType = 122 // Invalid photos + ErrParamHash ErrorType = 121 // Invalid hash + ErrParamPhoto ErrorType = 129 // Invalid photo + ErrParamGroupID ErrorType = 125 // Invalid group id + ErrParamPageID ErrorType = 140 // Page not found + ErrAccessPage ErrorType = 141 // Access to page denied + + // The mobile number of the user is unknown. + ErrMobileNotActivated ErrorType = 146 + + // Application has insufficient funds. + ErrInsufficientFunds ErrorType = 147 + + // Access to the menu of the user denied. + ErrAccessMenu ErrorType = 148 + + // Invalid timestamp + // + // You may get a correct value with the utils.getServerTime method. + ErrParamTimestamp ErrorType = 150 + ErrFriendsListID ErrorType = 171 // Invalid list id + + // Reached the maximum number of lists. + ErrFriendsListLimit ErrorType = 173 + + // Cannot add user himself as friend. + ErrFriendsAddYourself ErrorType = 174 + + // Cannot add this user to friends as they have put you on their blacklist. + ErrFriendsAddInEnemy ErrorType = 175 + + // Cannot add this user to friends as you put him on blacklist. + ErrFriendsAddEnemy ErrorType = 176 + + // Cannot add this user to friends as user not found. + ErrFriendsAddNotFound ErrorType = 177 + ErrParamNoteID ErrorType = 180 // Note not found + ErrAccessNote ErrorType = 181 // Access to note denied + ErrAccessNoteComment ErrorType = 182 // You can't comment this note + ErrAccessComment ErrorType = 183 // Access to comment denied + + // Access to album denied + // + // Make sure you use correct ids (owner_id is always positive for users, + // negative for communities) and the current user has access to the + // requested content in the full version of the site. + ErrAccessAlbum ErrorType = 200 + + // Access to audio denied + // + // Make sure you use correct ids (owner_id is always positive for users, + // negative for communities) and the current user has access to the + // requested content in the full version of the site. + ErrAccessAudio ErrorType = 201 + + // Access to group denied + // + // Make sure that the current user is a member or admin of the community + // (for closed and private groups and events). + ErrAccessGroup ErrorType = 203 + + // Access denied. + ErrAccessVideo ErrorType = 204 + + // Access denied. + ErrAccessMarket ErrorType = 205 + + // Access to wall's post denied. + ErrWallAccessPost ErrorType = 210 + + // Access to wall's comment denied. + ErrWallAccessComment ErrorType = 211 + + // Access to post comments denied. + ErrWallAccessReplies ErrorType = 212 + + // Access to status replies denied. + ErrWallAccessAddReply ErrorType = 213 + + // Access to adding post denied. + ErrWallAddPost ErrorType = 214 + + // Advertisement post was recently added. + ErrWallAdsPublished ErrorType = 219 + + // Too many recipients. + ErrWallTooManyRecipients ErrorType = 220 + + // User disabled track name broadcast. + ErrStatusNoAudio ErrorType = 221 + + // Hyperlinks are forbidden. + ErrWallLinksForbidden ErrorType = 222 + + // Too many replies. + ErrWallReplyOwnerFlood ErrorType = 223 + + // Too many ads posts. + ErrWallAdsPostLimitReached ErrorType = 224 + + // Donut is disabled. + ErrDonutDisabled ErrorType = 225 + + // Reaction can not be applied to the object. + ErrLikesReactionCanNotBeApplied ErrorType = 232 + + // Access to poll denied. + ErrPollsAccess ErrorType = 250 + + // Invalid answer id. + ErrPollsAnswerID ErrorType = 252 + + // Invalid poll id. + ErrPollsPollID ErrorType = 251 + + // Access denied, please vote first. + ErrPollsAccessWithoutVote ErrorType = 253 + + // Access to the groups list is denied due to the user's privacy settings. + ErrAccessGroups ErrorType = 260 + + // This album is full + // + // You need to delete the odd objects from the album or use another album. + ErrAlbumFull ErrorType = 300 + ErrAlbumsLimit ErrorType = 302 // Albums number limit is reached + + // Permission denied. You must enable votes processing in application + // settings + // + // Check the app settings: + // + // http://vk.com/editapp?id={Your API_ID}§ion=payments + // + ErrVotesPermission ErrorType = 500 + + // Not enough votes. + ErrVotes ErrorType = 503 + + // Not enough money on owner's balance. + ErrNotEnoughMoney ErrorType = 504 + + // Permission denied. You have no access to operations specified with + // given object(s). + ErrAdsPermission ErrorType = 600 + + // Permission denied. You have requested too many actions this day. Try + // later. + ErrWeightedFlood ErrorType = 601 + + // Some part of the request has not been completed. + ErrAdsPartialSuccess ErrorType = 602 + + // Some ads error occurred. + ErrAdsSpecific ErrorType = 603 + + // Invalid domain. + ErrAdsDomainInvalid ErrorType = 604 + + // Domain is forbidden. + ErrAdsDomainForbidden ErrorType = 605 + + // Domain is reserved. + ErrAdsDomainReserved ErrorType = 606 + + // Domain is occupied. + ErrAdsDomainOccupied ErrorType = 607 + + // Domain is active. + ErrAdsDomainActive ErrorType = 608 + + // Domain app is invalid. + ErrAdsDomainAppInvalid ErrorType = 609 + + // Domain app is forbidden. + ErrAdsDomainAppForbidden ErrorType = 610 + + // Application must be verified. + ErrAdsApplicationMustBeVerified ErrorType = 611 + + // Application must be in domains list of site of ad unit. + ErrAdsApplicationMustBeInDomainsList ErrorType = 612 + + // Application is blocked. + ErrAdsApplicationBlocked ErrorType = 613 + + // Domain of type specified is forbidden in current office type. + ErrAdsDomainTypeForbiddenInCurrentOffice ErrorType = 614 + + // Domain group is invalid. + ErrAdsDomainGroupInvalid ErrorType = 615 + + // Domain group is forbidden. + ErrAdsDomainGroupForbidden ErrorType = 616 + + // Domain app is blocked. + ErrAdsDomainAppBlocked ErrorType = 617 + + // Domain group is not open. + ErrAdsDomainGroupNotOpen ErrorType = 618 + + // Domain group is not possible to be joined to adsweb. + ErrAdsDomainGroupNotPossibleJoined ErrorType = 619 + + // Domain group is blocked. + ErrAdsDomainGroupBlocked ErrorType = 620 + + // Domain group has restriction: links are forbidden. + ErrAdsDomainGroupLinksForbidden ErrorType = 621 + + // Domain group has restriction: excluded from search. + ErrAdsDomainGroupExcludedFromSearch ErrorType = 622 + + // Domain group has restriction: cover is forbidden. + ErrAdsDomainGroupCoverForbidden ErrorType = 623 + + // Domain group has wrong category. + ErrAdsDomainGroupWrongCategory ErrorType = 624 + + // Domain group has wrong name. + ErrAdsDomainGroupWrongName ErrorType = 625 + + // Domain group has low posts reach. + ErrAdsDomainGroupLowPostsReach ErrorType = 626 + + // Domain group has wrong class. + ErrAdsDomainGroupWrongClass ErrorType = 627 + + // Domain group is created recently. + ErrAdsDomainGroupCreatedRecently ErrorType = 628 + + // Object deleted. + ErrAdsObjectDeleted ErrorType = 629 + + // Lookalike request with same source already in progress. + ErrAdsLookalikeRequestAlreadyInProgress ErrorType = 630 + + // Max count of lookalike requests per day reached. + ErrAdsLookalikeRequestsLimit ErrorType = 631 + + // Given audience is too small. + ErrAdsAudienceTooSmall ErrorType = 632 + + // Given audience is too large. + ErrAdsAudienceTooLarge ErrorType = 633 + + // Lookalike request audience save already in progress. + ErrAdsLookalikeAudienceSaveAlreadyInProgress ErrorType = 634 + + // Max count of lookalike request audience saves per day reached. + ErrAdsLookalikeSavesLimit ErrorType = 635 + + // Max count of retargeting groups reached. + ErrAdsRetargetingGroupsLimit ErrorType = 636 + + // Domain group has active nemesis punishment. + ErrAdsDomainGroupActiveNemesisPunishment ErrorType = 637 + + // Cannot edit creator role. + ErrGroupChangeCreator ErrorType = 700 + + // User should be in club. + ErrGroupNotInClub ErrorType = 701 + + // Too many officers in club. + ErrGroupTooManyOfficers ErrorType = 702 + + // You need to enable 2FA for this action. + ErrGroupNeed2fa ErrorType = 703 + + // User needs to enable 2FA for this action. + ErrGroupHostNeed2fa ErrorType = 704 + + // Too many addresses in club. + ErrGroupTooManyAddresses ErrorType = 706 + + // "Application is not installed in community. + ErrGroupAppIsNotInstalledInCommunity ErrorType = 711 + + // Invite link is invalid - expired, deleted or not exists. + ErrGroupInvalidInviteLink ErrorType = 714 + + // This video is already added. + ErrVideoAlreadyAdded ErrorType = 800 + + // Comments for this video are closed. + ErrVideoCommentsClosed ErrorType = 801 + + // Can't send messages for users from blacklist. + ErrMessagesUserBlocked ErrorType = 900 + + // Can't send messages for users without permission. + ErrMessagesDenySend ErrorType = 901 + + // Can't send messages to this user due to their privacy settings. + ErrMessagesPrivacy ErrorType = 902 + + // Value of ts or pts is too old. + ErrMessagesTooOldPts ErrorType = 907 + + // Value of ts or pts is too new. + ErrMessagesTooNewPts ErrorType = 908 + + // Can't edit this message, because it's too old. + ErrMessagesEditExpired ErrorType = 909 + + // Can't sent this message, because it's too big. + ErrMessagesTooBig ErrorType = 910 + + // Keyboard format is invalid. + ErrMessagesKeyboardInvalid ErrorType = 911 + + // This is a chat bot feature, change this status in settings. + ErrMessagesChatBotFeature ErrorType = 912 + + // Too many forwarded messages. + ErrMessagesTooLongForwards ErrorType = 913 + + // Message is too long. + ErrMessagesTooLongMessage ErrorType = 914 + + // You don't have access to this chat. + ErrMessagesChatUserNoAccess ErrorType = 917 + + // You can't see invite link for this chat. + ErrMessagesCantSeeInviteLink ErrorType = 919 + + // Can't edit this kind of message. + ErrMessagesEditKindDisallowed ErrorType = 920 + + // Can't forward these messages. + ErrMessagesCantFwd ErrorType = 921 + + // Can't delete this message for everybody. + ErrMessagesCantDeleteForAll ErrorType = 924 + + // You are not admin of this chat. + ErrMessagesChatNotAdmin ErrorType = 925 + + // Chat does not exist. + ErrMessagesChatNotExist ErrorType = 927 + + // You can't change invite link for this chat. + ErrMessagesCantChangeInviteLink ErrorType = 931 + + // Your community can't interact with this peer. + ErrMessagesGroupPeerAccess ErrorType = 932 + + // User not found in chat. + ErrMessagesChatUserNotInChat ErrorType = 935 + + // Contact not found. + ErrMessagesContactNotFound ErrorType = 936 + + // Message request already send. + ErrMessagesMessageRequestAlreadySend ErrorType = 939 + + // Too many posts in messages. + ErrMessagesTooManyPosts ErrorType = 940 + + // Cannot pin one-time story. + ErrMessagesCantPinOneTimeStory ErrorType = 942 + + // Cannot use this intent. + ErrMessagesCantUseIntent ErrorType = 943 + + // Limits overflow for this intent. + ErrMessagesLimitIntent ErrorType = 944 + + // Chat was disabled. + ErrMessagesChatDisabled ErrorType = 945 + + // Chat not support. + ErrMessagesChatNotSupported ErrorType = 946 + + // Can't add user to chat, because user has no access to group. + ErrMessagesMemberAccessToGroupDenied ErrorType = 947 + + // Can't edit pinned message yet. + ErrMessagesEditPinned ErrorType = 949 + + // Can't send message, reply timed out. + ErrMessagesReplyTimedOut ErrorType = 950 + + // Invalid phone number. + ErrParamPhone ErrorType = 1000 + + // This phone number is used by another user. + ErrPhoneAlreadyUsed ErrorType = 1004 + + // Too many auth attempts, try again later. + ErrAuthFloodError ErrorType = 1105 + + // Processing.. Try later. + ErrAuthDelay ErrorType = 1112 + + // Invalid document id. + ErrParamDocID ErrorType = 1150 + + // Access to document deleting is denied. + ErrParamDocDeleteAccess ErrorType = 1151 + + // Invalid document title. + ErrParamDocTitle ErrorType = 1152 + + // Access to document is denied. + ErrParamDocAccess ErrorType = 1153 + + // Original photo was changed. + ErrPhotoChanged ErrorType = 1160 + + // Too many feed lists. + ErrTooManyLists ErrorType = 1170 + + // This achievement is already unlocked. + ErrAppsAlreadyUnlocked ErrorType = 1251 + + // Subscription not found. + ErrAppsSubscriptionNotFound ErrorType = 1256 + + // Subscription is in invalid status. + ErrAppsSubscriptionInvalidStatus ErrorType = 1257 + + // Invalid screen name. + ErrInvalidAddress ErrorType = 1260 + + // Catalog is not available for this user. + ErrCommunitiesCatalogDisabled ErrorType = 1310 + + // Catalog categories are not available for this user. + ErrCommunitiesCategoriesDisabled ErrorType = 1311 + + // Too late for restore. + ErrMarketRestoreTooLate ErrorType = 1400 + + // Comments for this market are closed. + ErrMarketCommentsClosed ErrorType = 1401 + + // Album not found. + ErrMarketAlbumNotFound ErrorType = 1402 + + // Item not found. + ErrMarketItemNotFound ErrorType = 1403 + + // Item already added to album. + ErrMarketItemAlreadyAdded ErrorType = 1404 + + // Too many items. + ErrMarketTooManyItems ErrorType = 1405 + + // Too many items in album. + ErrMarketTooManyItemsInAlbum ErrorType = 1406 + + // Too many albums. + ErrMarketTooManyAlbums ErrorType = 1407 + + // Item has bad links in description. + ErrMarketItemHasBadLinks ErrorType = 1408 + + // Shop not enabled. + ErrMarketShopNotEnabled ErrorType = 1409 + + // Variant not found. + ErrMarketVariantNotFound ErrorType = 1416 + + // Property not found. + ErrMarketPropertyNotFound ErrorType = 1417 + + // Grouping must have two or more items. + ErrMarketGroupingMustContainMoreThanOneItem ErrorType = 1425 + + // Item must have distinct properties. + ErrMarketGroupingItemsMustHaveDistinctProperties ErrorType = 1426 + + // Cart is empty. + ErrMarketOrdersNoCartItems ErrorType = 1427 + + // Specify width, length, height and weight all together. + ErrMarketInvalidDimensions ErrorType = 1429 + + // VK Pay status can not be changed. + ErrMarketCantChangeVkpayStatus ErrorType = 1430 + + // Market was already enabled in this group. + ErrMarketShopAlreadyEnabled ErrorType = 1431 + + // Market was already disabled in this group. + ErrMarketShopAlreadyDisabled ErrorType = 1432 + + // Invalid image crop format. + ErrMarketPhotosCropInvalidFormat ErrorType = 1433 + + // Crop bottom right corner is outside of the image. + ErrMarketPhotosCropOverflow ErrorType = 1434 + + // Crop size is less than the minimum. + ErrMarketPhotosCropSizeTooLow ErrorType = 1435 + + // Cart is empty. + ErrMarketCartEmpty ErrorType = 1427 + + // Specify width, length, height and weight all together. + ErrMarketSpecifyDimensions ErrorType = 1429 + + // VK Pay status can not be changed. + ErrVKPayStatus ErrorType = 1430 + + // Market was already enabled in this group. + ErrMarketAlreadyEnabled ErrorType = 1431 + + // Market was already disabled in this group. + ErrMarketAlreadyDisabled ErrorType = 1432 + + // Story has already expired. + ErrStoryExpired ErrorType = 1600 + + // Incorrect reply privacy. + ErrStoryIncorrectReplyPrivacy ErrorType = 1602 + + // Card not found. + ErrPrettyCardsCardNotFound ErrorType = 1900 + + // Too many cards. + ErrPrettyCardsTooManyCards ErrorType = 1901 + + // Card is connected to post. + ErrPrettyCardsCardIsConnectedToPost ErrorType = 1902 + + // Servers number limit is reached. + ErrCallbackServersLimit ErrorType = 2000 + + // Specified link is incorrect (can't find source). + ErrWallCheckLinkCantDetermineSource ErrorType = 3102 + + // Recaptcha needed. + ErrRecaptcha ErrorType = 3300 + + // Phone validation needed. + ErrPhoneValidation ErrorType = 3301 + + // Password validation needed. + ErrPasswordValidation ErrorType = 3302 + + // Otp app validation needed. + ErrOtpAppValidation ErrorType = 3303 + + // Email confirmation needed. + ErrEmailConfirmation ErrorType = 3304 + + // Assert votes. + ErrAssertVotes ErrorType = 3305 + + // Token extension required. + ErrTokenExtension ErrorType = 3609 + + // User is deactivated. + ErrUserDeactivated ErrorType = 3610 + + // Service is deactivated for user. + ErrServiceDeactivated ErrorType = 3611 + + // Can't set AliExpress tag to this type of object. + ErrAliExpressTag ErrorType = 3800 +) + +// ErrorSubtype is the subtype of an error. +type ErrorSubtype int + +// Error returns the message of a ErrorSubtype. +func (e ErrorSubtype) Error() string { + return fmt.Sprintf("api: error with subcode %d", e) +} + +// Error struct VK. +type Error struct { + Code ErrorType `json:"error_code"` + Subcode ErrorSubtype `json:"error_subcode"` + Message string `json:"error_msg"` + Text string `json:"error_text"` + CaptchaSID string `json:"captcha_sid"` + CaptchaImg string `json:"captcha_img"` + + // In some cases VK requires to request action confirmation from the user + // (for Standalone apps only). Following error will be returned: + // + // Error code: 24 + // Error text: Confirmation required + // + // Following parameter is transmitted with the error message as well: + // + // confirmation_text – text of the message to be shown in the default + // confirmation window. + // + // The app should display the default confirmation window with text from + // confirmation_text and two buttons: "Continue" and "Cancel". If user + // confirms the action repeat the request with an extra parameter: + // confirm = 1. + // + // See https://vk.com/dev/need_confirmation + ConfirmationText string `json:"confirmation_text"` + + // In some cases VK requires a user validation procedure. . As a result + // starting from API version 5.0 (for the older versions captcha_error + // will be requested) following error will be returned as a reply to any + // API request: + // + // Error code: 17 + // Error text: Validation Required + // + // Following parameter is transmitted with an error message: + // redirect_uri – a special address to open in a browser to pass the + // validation procedure. + // + // After passing the validation a user will be redirected to the service + // page: + // + // https://oauth.vk.com/blank.html#{Data required for validation} + // + // In case of successful validation following parameters will be + // transmitted after #: + // + // https://oauth.vk.com/blank.html#success=1&access_token={NEW USER TOKEN}&user_id={USER ID} + // + // If a token was not received by https a new secret will be transmitted + // as well. + // + // In case of unsuccessful validation following address is transmitted: + // + // https://oauth.vk.com/blank.html#fail=1 + // + // See https://vk.com/dev/need_validation + RedirectURI string `json:"redirect_uri"` + RequestParams []object.BaseRequestParam `json:"request_params"` +} + +// Error returns the message of a Error. +func (e Error) Error() string { + return "api: " + e.Message +} + +// Is unwraps its first argument sequentially looking for an error that matches +// the second. +func (e Error) Is(target error) bool { + var tError *Error + if errors.As(target, &tError) { + return e.Code == tError.Code && e.Message == tError.Message + } + + var tErrorType ErrorType + if errors.As(target, &tErrorType) { + return e.Code == tErrorType + } + + return false +} + +// ExecuteError struct. +// +// TODO: v3 Code is ErrorType. +type ExecuteError struct { + Method string `json:"method"` + Code int `json:"error_code"` + Msg string `json:"error_msg"` +} + +// ExecuteErrors type. +type ExecuteErrors []ExecuteError + +// Error returns the message of a ExecuteErrors. +func (e ExecuteErrors) Error() string { + return fmt.Sprintf("api: execute errors (%d)", len(e)) +} + +// InvalidContentType type. +type InvalidContentType struct { + ContentType string +} + +// Error returns the message of a InvalidContentType. +func (e InvalidContentType) Error() string { + return "api: invalid content-type" +} + +// UploadError type. +type UploadError struct { + Err string `json:"error"` + Code int `json:"error_code"` + Descr string `json:"error_descr"` + IsLogged bool `json:"error_is_logged"` +} + +// Error returns the message of a UploadError. +func (e UploadError) Error() string { + if e.Err != "" { + return "api: " + e.Err + } + + return fmt.Sprintf("api: upload code %d", e.Code) +} + +// AdsError struct. +type AdsError struct { + Code ErrorType `json:"error_code"` + Desc string `json:"error_desc"` +} + +// Error returns the message of a AdsError. +func (e AdsError) Error() string { + return "api: " + e.Desc +} + +// Is unwraps its first argument sequentially looking for an error that matches +// the second. +func (e AdsError) Is(target error) bool { + var tAdsError *AdsError + if errors.As(target, &tAdsError) { + return e.Code == tAdsError.Code && e.Desc == tAdsError.Desc + } + + var tErrorType ErrorType + if errors.As(target, &tErrorType) { + return e.Code == tErrorType + } + + return false +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/execute.go b/vendor/github.com/SevereCloud/vksdk/v2/api/execute.go new file mode 100644 index 00000000..5bee205a --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/execute.go @@ -0,0 +1,52 @@ +package api + +import "encoding/json" + +// ExecuteWithArgs a universal method for calling a sequence of other methods +// while saving and filtering interim results. +// +// The Args map variable allows you to retrieve the parameters passed during +// the request and avoids code formatting. +// +// return Args.code; // return parameter "code" +// return Args.v; // return parameter "v" +// +// https://vk.com/dev/execute +func (vk *VK) ExecuteWithArgs(code string, params Params, obj interface{}) error { + token := vk.getToken() + + reqParams := Params{ + "code": code, + "access_token": token, + "v": vk.Version, + } + + resp, err := vk.Handler("execute", params, reqParams) + + jsonErr := json.Unmarshal(resp.Response, &obj) + if jsonErr != nil { + return jsonErr + } + + if resp.ExecuteErrors != nil { + return &resp.ExecuteErrors + } + + return err +} + +// Execute a universal method for calling a sequence of other methods while +// saving and filtering interim results. +// +// https://vk.com/dev/execute +func (vk *VK) Execute(code string, obj interface{}) error { + return vk.ExecuteWithArgs(code, Params{}, obj) +} + +func fmtBool(value bool) string { + if value { + return "1" + } + + return "0" +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/fave.go b/vendor/github.com/SevereCloud/vksdk/v2/api/fave.go new file mode 100644 index 00000000..5690aab8 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/fave.go @@ -0,0 +1,231 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// FaveAddArticle adds a link to user faves. +// +// https://vk.com/dev/fave.addArticle +func (vk *VK) FaveAddArticle(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addArticle", &response, params) + return +} + +// FaveAddLink adds a link to user faves. +// +// https://vk.com/dev/fave.addLink +func (vk *VK) FaveAddLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addLink", &response, params) + return +} + +// FaveAddPage method. +// +// https://vk.com/dev/fave.addPage +func (vk *VK) FaveAddPage(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addPage", &response, params) + return +} + +// FaveAddPost method. +// +// https://vk.com/dev/fave.addPost +func (vk *VK) FaveAddPost(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addPost", &response, params) + return +} + +// FaveAddProduct method. +// +// https://vk.com/dev/fave.addProduct +func (vk *VK) FaveAddProduct(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addProduct", &response, params) + return +} + +// FaveAddTagResponse struct. +type FaveAddTagResponse object.FaveTag + +// FaveAddTag method. +// +// https://vk.com/dev/fave.addTag +func (vk *VK) FaveAddTag(params Params) (response FaveAddTagResponse, err error) { + err = vk.RequestUnmarshal("fave.addTag", &response, params) + return +} + +// FaveAddVideo method. +// +// https://vk.com/dev/fave.addVideo +func (vk *VK) FaveAddVideo(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.addVideo", &response, params) + return +} + +// FaveEditTag method. +// +// https://vk.com/dev/fave.editTag +func (vk *VK) FaveEditTag(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.editTag", &response, params) + return +} + +// FaveGetResponse struct. +type FaveGetResponse struct { + Count int `json:"count"` + Items []object.FaveItem `json:"items"` +} + +// FaveGet method. +// +// extended=0 +// +// https://vk.com/dev/fave.get +func (vk *VK) FaveGet(params Params) (response FaveGetResponse, err error) { + err = vk.RequestUnmarshal("fave.get", &response, params, Params{"extended": false}) + + return +} + +// FaveGetExtendedResponse struct. +type FaveGetExtendedResponse struct { + Count int `json:"count"` + Items []object.FaveItem `json:"items"` + object.ExtendedResponse +} + +// FaveGetExtended method. +// +// extended=1 +// +// https://vk.com/dev/fave.get +func (vk *VK) FaveGetExtended(params Params) (response FaveGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("fave.get", &response, params, Params{"extended": true}) + + return +} + +// FaveGetPagesResponse struct. +type FaveGetPagesResponse struct { + Count int `json:"count"` + Items []object.FavePage `json:"items"` +} + +// FaveGetPages method. +// +// https://vk.com/dev/fave.getPages +func (vk *VK) FaveGetPages(params Params) (response FaveGetPagesResponse, err error) { + err = vk.RequestUnmarshal("fave.getPages", &response, params) + return +} + +// FaveGetTagsResponse struct. +type FaveGetTagsResponse struct { + Count int `json:"count"` + Items []object.FaveTag `json:"items"` +} + +// FaveGetTags method. +// +// https://vk.com/dev/fave.getTags +func (vk *VK) FaveGetTags(params Params) (response FaveGetTagsResponse, err error) { + err = vk.RequestUnmarshal("fave.getTags", &response, params) + return +} + +// FaveMarkSeen method. +// +// https://vk.com/dev/fave.markSeen +func (vk *VK) FaveMarkSeen(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.markSeen", &response, params) + return +} + +// FaveRemoveArticle method. +// +// https://vk.com/dev/fave.removeArticle +func (vk *VK) FaveRemoveArticle(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removeArticle", &response, params) + return +} + +// FaveRemoveLink removes link from the user's faves. +// +// https://vk.com/dev/fave.removeLink +func (vk *VK) FaveRemoveLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removeLink", &response, params) + return +} + +// FaveRemovePage method. +// +// https://vk.com/dev/fave.removePage +func (vk *VK) FaveRemovePage(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removePage", &response, params) + return +} + +// FaveRemovePost method. +// +// https://vk.com/dev/fave.removePost +func (vk *VK) FaveRemovePost(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removePost", &response, params) + return +} + +// FaveRemoveProduct method. +// +// https://vk.com/dev/fave.removeProduct +func (vk *VK) FaveRemoveProduct(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removeProduct", &response, params) + return +} + +// FaveRemoveTag method. +// +// https://vk.com/dev/fave.removeTag +func (vk *VK) FaveRemoveTag(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removeTag", &response, params) + return +} + +// FaveRemoveVideo method. +// +// https://vk.com/dev/fave.removeVideo +func (vk *VK) FaveRemoveVideo(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.removeVideo", &response, params) + return +} + +// FaveReorderTags method. +// +// https://vk.com/dev/fave.reorderTags +func (vk *VK) FaveReorderTags(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.reorderTags", &response, params) + return +} + +// FaveSetPageTags method. +// +// https://vk.com/dev/fave.setPageTags +func (vk *VK) FaveSetPageTags(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.setPageTags", &response, params) + return +} + +// FaveSetTags method. +// +// https://vk.com/dev/fave.setTags +func (vk *VK) FaveSetTags(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.setTags", &response, params) + return +} + +// FaveTrackPageInteraction method. +// +// https://vk.com/dev/fave.trackPageInteraction +func (vk *VK) FaveTrackPageInteraction(params Params) (response int, err error) { + err = vk.RequestUnmarshal("fave.trackPageInteraction", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/friends.go b/vendor/github.com/SevereCloud/vksdk/v2/api/friends.go new file mode 100644 index 00000000..07cfc7d7 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/friends.go @@ -0,0 +1,295 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// FriendsAdd approves or creates a friend request. +// +// https://vk.com/dev/friends.add +func (vk *VK) FriendsAdd(params Params) (response int, err error) { + err = vk.RequestUnmarshal("friends.add", &response, params) + return +} + +// FriendsAddListResponse struct. +type FriendsAddListResponse struct { + ListID int `json:"list_id"` +} + +// FriendsAddList creates a new friend list for the current user. +// +// https://vk.com/dev/friends.addList +func (vk *VK) FriendsAddList(params Params) (response FriendsAddListResponse, err error) { + err = vk.RequestUnmarshal("friends.addList", &response, params) + return +} + +// FriendsAreFriendsResponse struct. +type FriendsAreFriendsResponse []object.FriendsFriendStatus + +// FriendsAreFriends checks the current user's friendship status with other specified users. +// +// https://vk.com/dev/friends.areFriends +func (vk *VK) FriendsAreFriends(params Params) (response FriendsAreFriendsResponse, err error) { + err = vk.RequestUnmarshal("friends.areFriends", &response, params) + return +} + +// FriendsDeleteResponse struct. +type FriendsDeleteResponse struct { + Success object.BaseBoolInt `json:"success"` + FriendDeleted object.BaseBoolInt `json:"friend_deleted"` + OutRequestDeleted object.BaseBoolInt `json:"out_request_deleted"` + InRequestDeleted object.BaseBoolInt `json:"in_request_deleted"` + SuggestionDeleted object.BaseBoolInt `json:"suggestion_deleted"` +} + +// FriendsDelete declines a friend request or deletes a user from the current user's friend list. +// +// https://vk.com/dev/friends.delete +func (vk *VK) FriendsDelete(params Params) (response FriendsDeleteResponse, err error) { + err = vk.RequestUnmarshal("friends.delete", &response, params) + return +} + +// FriendsDeleteAllRequests marks all incoming friend requests as viewed. +// +// https://vk.com/dev/friends.deleteAllRequests +func (vk *VK) FriendsDeleteAllRequests(params Params) (response int, err error) { + err = vk.RequestUnmarshal("friends.deleteAllRequests", &response, params) + return +} + +// FriendsDeleteList deletes a friend list of the current user. +// +// https://vk.com/dev/friends.deleteList +func (vk *VK) FriendsDeleteList(params Params) (response int, err error) { + err = vk.RequestUnmarshal("friends.deleteList", &response, params) + return +} + +// FriendsEdit edits the friend lists of the selected user. +// +// https://vk.com/dev/friends.edit +func (vk *VK) FriendsEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("friends.edit", &response, params) + return +} + +// FriendsEditList edits a friend list of the current user. +// +// https://vk.com/dev/friends.editList +func (vk *VK) FriendsEditList(params Params) (response int, err error) { + err = vk.RequestUnmarshal("friends.editList", &response, params) + return +} + +// FriendsGetResponse struct. +type FriendsGetResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// FriendsGet returns a list of user IDs or detailed information about a user's friends. +// +// https://vk.com/dev/friends.get +func (vk *VK) FriendsGet(params Params) (response FriendsGetResponse, err error) { + err = vk.RequestUnmarshal("friends.get", &response, params) + return +} + +// FriendsGetFieldsResponse struct. +type FriendsGetFieldsResponse struct { + Count int `json:"count"` + Items []object.FriendsUserXtrLists `json:"items"` +} + +// FriendsGetFields returns a list of user IDs or detailed information about a user's friends. +// +// https://vk.com/dev/friends.get +func (vk *VK) FriendsGetFields(params Params) (response FriendsGetFieldsResponse, err error) { + reqParams := make(Params) + if v, prs := params["fields"]; v == "" || !prs { + reqParams["fields"] = "id" + } + + err = vk.RequestUnmarshal("friends.get", &response, params, reqParams) + + return +} + +// FriendsGetAppUsersResponse struct. +type FriendsGetAppUsersResponse []int + +// FriendsGetAppUsers returns a list of IDs of the current user's friends who installed the application. +// +// https://vk.com/dev/friends.getAppUsers +func (vk *VK) FriendsGetAppUsers(params Params) (response FriendsGetAppUsersResponse, err error) { + err = vk.RequestUnmarshal("friends.getAppUsers", &response, params) + return +} + +// FriendsGetByPhonesResponse struct. +type FriendsGetByPhonesResponse []object.FriendsUserXtrPhone + +// FriendsGetByPhones returns a list of the current user's friends +// whose phone numbers, validated or specified in a profile, are in a given list. +// +// https://vk.com/dev/friends.getByPhones +func (vk *VK) FriendsGetByPhones(params Params) (response FriendsGetByPhonesResponse, err error) { + err = vk.RequestUnmarshal("friends.getByPhones", &response, params) + return +} + +// FriendsGetListsResponse struct. +type FriendsGetListsResponse struct { + Count int `json:"count"` + Items []object.FriendsFriendsList `json:"items"` +} + +// FriendsGetLists returns a list of the user's friend lists. +// +// https://vk.com/dev/friends.getLists +func (vk *VK) FriendsGetLists(params Params) (response FriendsGetListsResponse, err error) { + err = vk.RequestUnmarshal("friends.getLists", &response, params) + return +} + +// FriendsGetMutualResponse struct. +type FriendsGetMutualResponse []int + +// FriendsGetMutual returns a list of user IDs of the mutual friends of two users. +// +// https://vk.com/dev/friends.getMutual +func (vk *VK) FriendsGetMutual(params Params) (response FriendsGetMutualResponse, err error) { + err = vk.RequestUnmarshal("friends.getMutual", &response, params) + return +} + +// FriendsGetOnline returns a list of user IDs of a user's friends who are online. +// +// online_mobile=0 +// +// https://vk.com/dev/friends.getOnline +func (vk *VK) FriendsGetOnline(params Params) (response []int, err error) { + err = vk.RequestUnmarshal("friends.getOnline", &response, params, Params{"online_mobile": false}) + + return +} + +// FriendsGetOnlineOnlineMobileResponse struct. +type FriendsGetOnlineOnlineMobileResponse struct { + Online []int `json:"online"` + OnlineMobile []int `json:"online_mobile"` +} + +// FriendsGetOnlineOnlineMobile returns a list of user IDs of a user's friends who are online. +// +// online_mobile=1 +// +// https://vk.com/dev/friends.getOnline +func (vk *VK) FriendsGetOnlineOnlineMobile(params Params) (response FriendsGetOnlineOnlineMobileResponse, err error) { + err = vk.RequestUnmarshal("friends.getOnline", &response, params, Params{"online_mobile": true}) + + return +} + +// FriendsGetRecentResponse struct. +type FriendsGetRecentResponse []int + +// FriendsGetRecent returns a list of user IDs of the current user's recently added friends. +// +// https://vk.com/dev/friends.getRecent +func (vk *VK) FriendsGetRecent(params Params) (response FriendsGetRecentResponse, err error) { + err = vk.RequestUnmarshal("friends.getRecent", &response, params) + return +} + +// FriendsGetRequestsResponse struct. +type FriendsGetRequestsResponse struct { + Count int `json:"count"` // Total requests number + Items []int `json:"items"` +} + +// FriendsGetRequests returns information about the current user's incoming and outgoing friend requests. +// +// https://vk.com/dev/friends.getRequests +func (vk *VK) FriendsGetRequests(params Params) (response FriendsGetRequestsResponse, err error) { + reqParams := Params{ + "need_mutual": false, + "extended": false, + } + + err = vk.RequestUnmarshal("friends.getRequests", &response, params, reqParams) + + return +} + +// FriendsGetRequestsNeedMutualResponse struct. +type FriendsGetRequestsNeedMutualResponse struct { + Count int `json:"count"` // Total requests number + Items []object.FriendsRequests `json:"items"` +} + +// FriendsGetRequestsNeedMutual returns information about the current user's incoming and outgoing friend requests. +// +// https://vk.com/dev/friends.getRequests +func (vk *VK) FriendsGetRequestsNeedMutual(params Params) (response FriendsGetRequestsNeedMutualResponse, err error) { + reqParams := Params{ + "extended": false, + "need_mutual": true, + } + + err = vk.RequestUnmarshal("friends.getRequests", &response, params, reqParams) + + return +} + +// FriendsGetRequestsExtendedResponse struct. +type FriendsGetRequestsExtendedResponse struct { + Count int `json:"count"` + Items []object.FriendsRequestsXtrMessage `json:"items"` +} + +// FriendsGetRequestsExtended returns information about the current user's incoming and outgoing friend requests. +// +// https://vk.com/dev/friends.getRequests +func (vk *VK) FriendsGetRequestsExtended(params Params) (response FriendsGetRequestsExtendedResponse, err error) { + reqParams := Params{ + "need_mutual": false, + "extended": true, + } + + err = vk.RequestUnmarshal("friends.getRequests", &response, params, reqParams) + + return +} + +// FriendsGetSuggestionsResponse struct. +type FriendsGetSuggestionsResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// FriendsGetSuggestions returns a list of profiles of users whom the current user may know. +// +// https://vk.com/dev/friends.getSuggestions +func (vk *VK) FriendsGetSuggestions(params Params) (response FriendsGetSuggestionsResponse, err error) { + err = vk.RequestUnmarshal("friends.getSuggestions", &response, params) + return +} + +// FriendsSearchResponse struct. +type FriendsSearchResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// FriendsSearch returns a list of friends matching the search criteria. +// +// https://vk.com/dev/friends.search +func (vk *VK) FriendsSearch(params Params) (response FriendsSearchResponse, err error) { + err = vk.RequestUnmarshal("friends.search", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/gifts.go b/vendor/github.com/SevereCloud/vksdk/v2/api/gifts.go new file mode 100644 index 00000000..cdcddd94 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/gifts.go @@ -0,0 +1,32 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import "github.com/SevereCloud/vksdk/v2/object" + +// GiftsGetResponse struct. +type GiftsGetResponse struct { + Count int `json:"count"` + Items []object.GiftsGift `json:"items"` +} + +// GiftsGet returns a list of user gifts. +// +// https://vk.com/dev/gifts.get +func (vk *VK) GiftsGet(params Params) (response GiftsGetResponse, err error) { + err = vk.RequestUnmarshal("gifts.get", &response, params) + return +} + +// GiftsGetCatalogResponse struct. +type GiftsGetCatalogResponse []struct { + Name string `json:"name"` + Title string `json:"title"` + Items []object.GiftsGift `json:"items"` +} + +// GiftsGetCatalog returns catalog. +// +// https://vk.com/dev/gifts.get +func (vk *VK) GiftsGetCatalog(params Params) (response GiftsGetCatalogResponse, err error) { + err = vk.RequestUnmarshal("gifts.getCatalog", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/groups.go b/vendor/github.com/SevereCloud/vksdk/v2/api/groups.go new file mode 100644 index 00000000..72c4143f --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/groups.go @@ -0,0 +1,712 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// GroupsAddAddressResponse struct. +type GroupsAddAddressResponse object.GroupsAddress + +// GroupsAddAddress groups.addAddress. +// +// https://vk.com/dev/groups.addAddress +func (vk *VK) GroupsAddAddress(params Params) (response GroupsAddAddressResponse, err error) { + err = vk.RequestUnmarshal("groups.addAddress", &response, params) + return +} + +// GroupsAddCallbackServerResponse struct. +type GroupsAddCallbackServerResponse struct { + ServerID int `json:"server_id"` +} + +// GroupsAddCallbackServer callback API server to the community. +// +// https://vk.com/dev/groups.addCallbackServer +func (vk *VK) GroupsAddCallbackServer(params Params) (response GroupsAddCallbackServerResponse, err error) { + err = vk.RequestUnmarshal("groups.addCallbackServer", &response, params) + return +} + +// GroupsAddLinkResponse struct. +type GroupsAddLinkResponse object.GroupsGroupLink + +// GroupsAddLink allows to add a link to the community. +// +// https://vk.com/dev/groups.addLink +func (vk *VK) GroupsAddLink(params Params) (response GroupsAddLinkResponse, err error) { + err = vk.RequestUnmarshal("groups.addLink", &response, params) + return +} + +// GroupsApproveRequest allows to approve join request to the community. +// +// https://vk.com/dev/groups.approveRequest +func (vk *VK) GroupsApproveRequest(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.approveRequest", &response, params) + return +} + +// GroupsBan adds a user or a group to the community blacklist. +// +// https://vk.com/dev/groups.ban +func (vk *VK) GroupsBan(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.ban", &response, params) + return +} + +// GroupsCreateResponse struct. +type GroupsCreateResponse object.GroupsGroup + +// GroupsCreate creates a new community. +// +// https://vk.com/dev/groups.create +func (vk *VK) GroupsCreate(params Params) (response GroupsCreateResponse, err error) { + err = vk.RequestUnmarshal("groups.create", &response, params) + return +} + +// GroupsDeleteAddress groups.deleteAddress. +// +// https://vk.com/dev/groups.deleteAddress +func (vk *VK) GroupsDeleteAddress(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.deleteAddress", &response, params) + return +} + +// GroupsDeleteCallbackServer callback API server from the community. +// +// https://vk.com/dev/groups.deleteCallbackServer +func (vk *VK) GroupsDeleteCallbackServer(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.deleteCallbackServer", &response, params) + return +} + +// GroupsDeleteLink allows to delete a link from the community. +// +// https://vk.com/dev/groups.deleteLink +func (vk *VK) GroupsDeleteLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.deleteLink", &response, params) + return +} + +// GroupsDisableOnline disables "online" status in the community. +// +// https://vk.com/dev/groups.disableOnline +func (vk *VK) GroupsDisableOnline(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.disableOnline", &response, params) + return +} + +// GroupsEdit edits a community. +// +// https://vk.com/dev/groups.edit +func (vk *VK) GroupsEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.edit", &response, params) + return +} + +// GroupsEditAddressResponse struct. +type GroupsEditAddressResponse object.GroupsAddress + +// GroupsEditAddress groups.editAddress. +// +// https://vk.com/dev/groups.editAddress +func (vk *VK) GroupsEditAddress(params Params) (response GroupsEditAddressResponse, err error) { + err = vk.RequestUnmarshal("groups.editAddress", &response, params) + return +} + +// GroupsEditCallbackServer edits Callback API server in the community. +// +// https://vk.com/dev/groups.editCallbackServer +func (vk *VK) GroupsEditCallbackServer(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.editCallbackServer", &response, params) + return +} + +// GroupsEditLink allows to edit a link in the community. +// +// https://vk.com/dev/groups.editLink +func (vk *VK) GroupsEditLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.editLink", &response, params) + return +} + +// GroupsEditManager allows to add, remove or edit the community manager . +// +// https://vk.com/dev/groups.editManager +func (vk *VK) GroupsEditManager(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.editManager", &response, params) + return +} + +// GroupsEnableOnline enables "online" status in the community. +// +// https://vk.com/dev/groups.enableOnline +func (vk *VK) GroupsEnableOnline(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.enableOnline", &response, params) + return +} + +// GroupsGetResponse struct. +type GroupsGetResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// GroupsGet returns a list of the communities to which a user belongs. +// +// extended=0 +// +// https://vk.com/dev/groups.get +func (vk *VK) GroupsGet(params Params) (response GroupsGetResponse, err error) { + err = vk.RequestUnmarshal("groups.get", &response, params, Params{"extended": false}) + + return +} + +// GroupsGetExtendedResponse struct. +type GroupsGetExtendedResponse struct { + Count int `json:"count"` + Items []object.GroupsGroup `json:"items"` +} + +// GroupsGetExtended returns a list of the communities to which a user belongs. +// +// extended=1 +// +// https://vk.com/dev/groups.get +func (vk *VK) GroupsGetExtended(params Params) (response GroupsGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("groups.get", &response, params, Params{"extended": true}) + + return +} + +// GroupsGetAddressesResponse struct. +type GroupsGetAddressesResponse struct { + Count int `json:"count"` + Items []object.GroupsAddress `json:"items"` +} + +// GroupsGetAddresses groups.getAddresses. +// +// https://vk.com/dev/groups.getAddresses +func (vk *VK) GroupsGetAddresses(params Params) (response GroupsGetAddressesResponse, err error) { + err = vk.RequestUnmarshal("groups.getAddresses", &response, params) + return +} + +// GroupsGetBannedResponse struct. +type GroupsGetBannedResponse struct { + Count int `json:"count"` + Items []object.GroupsOwnerXtrBanInfo `json:"items"` +} + +// GroupsGetBanned returns a list of users on a community blacklist. +// +// https://vk.com/dev/groups.getBanned +func (vk *VK) GroupsGetBanned(params Params) (response GroupsGetBannedResponse, err error) { + err = vk.RequestUnmarshal("groups.getBanned", &response, params) + return +} + +// GroupsGetByIDResponse struct. +type GroupsGetByIDResponse []object.GroupsGroup + +// GroupsGetByID returns information about communities by their IDs. +// +// https://vk.com/dev/groups.getById +func (vk *VK) GroupsGetByID(params Params) (response GroupsGetByIDResponse, err error) { + err = vk.RequestUnmarshal("groups.getById", &response, params) + return +} + +// GroupsGetCallbackConfirmationCodeResponse struct. +type GroupsGetCallbackConfirmationCodeResponse struct { + Code string `json:"code"` +} + +// GroupsGetCallbackConfirmationCode returns Callback API confirmation code for the community. +// +// https://vk.com/dev/groups.getCallbackConfirmationCode +func (vk *VK) GroupsGetCallbackConfirmationCode(params Params) ( + response GroupsGetCallbackConfirmationCodeResponse, + err error, +) { + err = vk.RequestUnmarshal("groups.getCallbackConfirmationCode", &response, params) + return +} + +// GroupsGetCallbackServersResponse struct. +type GroupsGetCallbackServersResponse struct { + Count int `json:"count"` + Items []object.GroupsCallbackServer `json:"items"` +} + +// GroupsGetCallbackServers receives a list of Callback API servers from the community. +// +// https://vk.com/dev/groups.getCallbackServers +func (vk *VK) GroupsGetCallbackServers(params Params) (response GroupsGetCallbackServersResponse, err error) { + err = vk.RequestUnmarshal("groups.getCallbackServers", &response, params) + return +} + +// GroupsGetCallbackSettingsResponse struct. +type GroupsGetCallbackSettingsResponse object.GroupsCallbackSettings + +// GroupsGetCallbackSettings returns Callback API notifications settings. +// +// BUG(VK): MessageEdit always 0 https://vk.com/bugtracker?act=show&id=86762 +// +// https://vk.com/dev/groups.getCallbackSettings +func (vk *VK) GroupsGetCallbackSettings(params Params) (response GroupsGetCallbackSettingsResponse, err error) { + err = vk.RequestUnmarshal("groups.getCallbackSettings", &response, params) + return +} + +// GroupsGetCatalogResponse struct. +type GroupsGetCatalogResponse struct { + Count int `json:"count"` + Items []object.GroupsGroup `json:"items"` +} + +// GroupsGetCatalog returns communities list for a catalog category. +// +// https://vk.com/dev/groups.getCatalog +func (vk *VK) GroupsGetCatalog(params Params) (response GroupsGetCatalogResponse, err error) { + err = vk.RequestUnmarshal("groups.getCatalog", &response, params) + return +} + +// GroupsGetCatalogInfoResponse struct. +type GroupsGetCatalogInfoResponse struct { + Enabled object.BaseBoolInt `json:"enabled"` + Categories []object.GroupsGroupCategory `json:"categories"` +} + +// GroupsGetCatalogInfo returns categories list for communities catalog. +// +// extended=0 +// +// https://vk.com/dev/groups.getCatalogInfo +func (vk *VK) GroupsGetCatalogInfo(params Params) (response GroupsGetCatalogInfoResponse, err error) { + err = vk.RequestUnmarshal("groups.getCatalogInfo", &response, params, Params{"extended": false}) + + return +} + +// GroupsGetCatalogInfoExtendedResponse struct. +type GroupsGetCatalogInfoExtendedResponse struct { + Enabled object.BaseBoolInt `json:"enabled"` + Categories []object.GroupsGroupCategoryFull `json:"categories"` +} + +// GroupsGetCatalogInfoExtended returns categories list for communities catalog. +// +// extended=1 +// +// https://vk.com/dev/groups.getCatalogInfo +func (vk *VK) GroupsGetCatalogInfoExtended(params Params) (response GroupsGetCatalogInfoExtendedResponse, err error) { + err = vk.RequestUnmarshal("groups.getCatalogInfo", &response, params, Params{"extended": true}) + + return +} + +// GroupsGetInvitedUsersResponse struct. +type GroupsGetInvitedUsersResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// GroupsGetInvitedUsers returns invited users list of a community. +// +// https://vk.com/dev/groups.getInvitedUsers +func (vk *VK) GroupsGetInvitedUsers(params Params) (response GroupsGetInvitedUsersResponse, err error) { + err = vk.RequestUnmarshal("groups.getInvitedUsers", &response, params) + return +} + +// GroupsGetInvitesResponse struct. +type GroupsGetInvitesResponse struct { + Count int `json:"count"` + Items []object.GroupsGroupXtrInvitedBy `json:"items"` +} + +// GroupsGetInvites returns a list of invitations to join communities and events. +// +// https://vk.com/dev/groups.getInvites +func (vk *VK) GroupsGetInvites(params Params) (response GroupsGetInvitesResponse, err error) { + err = vk.RequestUnmarshal("groups.getInvites", &response, params) + return +} + +// GroupsGetInvitesExtendedResponse struct. +type GroupsGetInvitesExtendedResponse struct { + Count int `json:"count"` + Items []object.GroupsGroupXtrInvitedBy `json:"items"` + object.ExtendedResponse +} + +// GroupsGetInvitesExtended returns a list of invitations to join communities and events. +// +// https://vk.com/dev/groups.getInvites +func (vk *VK) GroupsGetInvitesExtended(params Params) (response GroupsGetInvitesExtendedResponse, err error) { + err = vk.RequestUnmarshal("groups.getInvites", &response, params) + return +} + +// GroupsGetLongPollServerResponse struct. +type GroupsGetLongPollServerResponse object.GroupsLongPollServer + +// GroupsGetLongPollServer returns data for Bots Long Poll API connection. +// +// https://vk.com/dev/groups.getLongPollServer +func (vk *VK) GroupsGetLongPollServer(params Params) (response GroupsGetLongPollServerResponse, err error) { + err = vk.RequestUnmarshal("groups.getLongPollServer", &response, params) + return +} + +// GroupsGetLongPollSettingsResponse struct. +type GroupsGetLongPollSettingsResponse object.GroupsLongPollSettings + +// GroupsGetLongPollSettings returns Bots Long Poll API settings. +// +// https://vk.com/dev/groups.getLongPollSettings +func (vk *VK) GroupsGetLongPollSettings(params Params) (response GroupsGetLongPollSettingsResponse, err error) { + err = vk.RequestUnmarshal("groups.getLongPollSettings", &response, params) + return +} + +// GroupsGetMembersResponse struct. +type GroupsGetMembersResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// GroupsGetMembers returns a list of community members. +// +// https://vk.com/dev/groups.getMembers +func (vk *VK) GroupsGetMembers(params Params) (response GroupsGetMembersResponse, err error) { + err = vk.RequestUnmarshal("groups.getMembers", &response, params, Params{"filter": ""}) + + return +} + +// GroupsGetMembersFieldsResponse struct. +type GroupsGetMembersFieldsResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// GroupsGetMembersFields returns a list of community members. +// +// https://vk.com/dev/groups.getMembers +func (vk *VK) GroupsGetMembersFields(params Params) (response GroupsGetMembersFieldsResponse, err error) { + reqParams := make(Params) + if v, prs := params["fields"]; v == "" || !prs { + reqParams["fields"] = "id" + } + + err = vk.RequestUnmarshal("groups.getMembers", &response, params, reqParams) + + return +} + +// GroupsGetMembersFilterManagersResponse struct. +type GroupsGetMembersFilterManagersResponse struct { + Count int `json:"count"` + Items []object.GroupsMemberRoleXtrUsersUser `json:"items"` +} + +// GroupsGetMembersFilterManagers returns a list of community members. +// +// filter=managers +// +// https://vk.com/dev/groups.getMembers +func (vk *VK) GroupsGetMembersFilterManagers(params Params) ( + response GroupsGetMembersFilterManagersResponse, + err error, +) { + err = vk.RequestUnmarshal("groups.getMembers", &response, params, Params{"filter": "managers"}) + + return +} + +// GroupsGetOnlineStatusResponse struct. +type GroupsGetOnlineStatusResponse object.GroupsOnlineStatus + +// GroupsGetOnlineStatus returns a community's online status. +// +// https://vk.com/dev/groups.getOnlineStatus +func (vk *VK) GroupsGetOnlineStatus(params Params) (response GroupsGetOnlineStatusResponse, err error) { + err = vk.RequestUnmarshal("groups.getOnlineStatus", &response, params) + return +} + +// GroupsGetRequestsResponse struct. +type GroupsGetRequestsResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// GroupsGetRequests returns a list of requests to the community. +// +// https://vk.com/dev/groups.getRequests +func (vk *VK) GroupsGetRequests(params Params) (response GroupsGetRequestsResponse, err error) { + err = vk.RequestUnmarshal("groups.getRequests", &response, params, Params{"fields": ""}) + + return +} + +// GroupsGetRequestsFieldsResponse struct. +type GroupsGetRequestsFieldsResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// GroupsGetRequestsFields returns a list of requests to the community. +// +// https://vk.com/dev/groups.getRequests +func (vk *VK) GroupsGetRequestsFields(params Params) (response GroupsGetRequestsFieldsResponse, err error) { + reqParams := make(Params) + if v, prs := params["fields"]; v == "" || !prs { + reqParams["fields"] = "id" + } + + err = vk.RequestUnmarshal("groups.getRequests", &response, params, reqParams) + + return +} + +// GroupsGetSettingsResponse struct. +type GroupsGetSettingsResponse object.GroupsGroupSettings + +// GroupsGetSettings returns community settings. +// +// https://vk.com/dev/groups.getSettings +func (vk *VK) GroupsGetSettings(params Params) (response GroupsGetSettingsResponse, err error) { + err = vk.RequestUnmarshal("groups.getSettings", &response, params) + return +} + +// GroupsGetTagListResponse struct. +type GroupsGetTagListResponse []object.GroupsTag + +// GroupsGetTagList returns community tags list. +// +// https://vk.com/dev/groups.getTagList +func (vk *VK) GroupsGetTagList(params Params) (response GroupsGetTagListResponse, err error) { + err = vk.RequestUnmarshal("groups.getTagList", &response, params) + return +} + +// GroupsGetTokenPermissionsResponse struct. +type GroupsGetTokenPermissionsResponse object.GroupsTokenPermissions + +// GroupsGetTokenPermissions returns permissions scope for the community's access_token. +// +// https://vk.com/dev/groups.getTokenPermissions +func (vk *VK) GroupsGetTokenPermissions(params Params) (response GroupsGetTokenPermissionsResponse, err error) { + err = vk.RequestUnmarshal("groups.getTokenPermissions", &response, params) + return +} + +// GroupsInvite allows to invite friends to the community. +// +// https://vk.com/dev/groups.invite +func (vk *VK) GroupsInvite(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.invite", &response, params) + return +} + +// GroupsIsMember returns information specifying whether a user is a member of a community. +// +// extended=0 +// +// https://vk.com/dev/groups.isMember +func (vk *VK) GroupsIsMember(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.isMember", &response, params, Params{"extended": false}) + + return +} + +// GroupsIsMemberExtendedResponse struct. +type GroupsIsMemberExtendedResponse struct { + Invitation object.BaseBoolInt `json:"invitation"` // Information whether user has been invited to the group + Member object.BaseBoolInt `json:"member"` // Information whether user is a member of the group + Request object.BaseBoolInt `json:"request"` // Information whether user has send request to the group + CanInvite object.BaseBoolInt `json:"can_invite"` // Information whether user can be invite + CanRecall object.BaseBoolInt `json:"can_recall"` // Information whether user's invite to the group can be recalled +} + +// GroupsIsMemberExtended returns information specifying whether a user is a member of a community. +// +// extended=1 +// +// https://vk.com/dev/groups.isMember +func (vk *VK) GroupsIsMemberExtended(params Params) (response GroupsIsMemberExtendedResponse, err error) { + err = vk.RequestUnmarshal("groups.isMember", &response, params, Params{"extended": true}) + + return +} + +// GroupsIsMemberUserIDsExtendedResponse struct. +type GroupsIsMemberUserIDsExtendedResponse []object.GroupsMemberStatusFull + +// GroupsIsMemberUserIDsExtended returns information specifying whether a user is a member of a community. +// +// extended=1 +// need user_ids +// +// https://vk.com/dev/groups.isMember +func (vk *VK) GroupsIsMemberUserIDsExtended(params Params) (response GroupsIsMemberUserIDsExtendedResponse, err error) { + err = vk.RequestUnmarshal("groups.isMember", &response, params, Params{"extended": true}) + + return +} + +// GroupsIsMemberUserIDsResponse struct. +type GroupsIsMemberUserIDsResponse []object.GroupsMemberStatus + +// GroupsIsMemberUserIDs returns information specifying whether a user is a member of a community. +// +// extended=0 +// need user_ids +// +// https://vk.com/dev/groups.isMember +func (vk *VK) GroupsIsMemberUserIDs(params Params) (response GroupsIsMemberUserIDsResponse, err error) { + err = vk.RequestUnmarshal("groups.isMember", &response, params, Params{"extended": false}) + + return +} + +// GroupsJoin with this method you can join the group or public page, and also confirm your participation in an event. +// +// https://vk.com/dev/groups.join +func (vk *VK) GroupsJoin(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.join", &response, params) + return +} + +// GroupsLeave with this method you can leave a group, public page, or event. +// +// https://vk.com/dev/groups.leave +func (vk *VK) GroupsLeave(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.leave", &response, params) + return +} + +// GroupsRemoveUser removes a user from the community. +// +// https://vk.com/dev/groups.removeUser +func (vk *VK) GroupsRemoveUser(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.removeUser", &response, params) + return +} + +// GroupsReorderLink allows to reorder links in the community. +// +// https://vk.com/dev/groups.reorderLink +func (vk *VK) GroupsReorderLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.reorderLink", &response, params) + return +} + +// GroupsSearchResponse struct. +type GroupsSearchResponse struct { + Count int `json:"count"` + Items []object.GroupsGroup `json:"items"` +} + +// GroupsSearch returns a list of communities matching the search criteria. +// +// https://vk.com/dev/groups.search +func (vk *VK) GroupsSearch(params Params) (response GroupsSearchResponse, err error) { + err = vk.RequestUnmarshal("groups.search", &response, params) + return +} + +// GroupsSetCallbackSettings allow to set notifications settings for Callback API. +// +// https://vk.com/dev/groups.setCallbackSettings +func (vk *VK) GroupsSetCallbackSettings(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.setCallbackSettings", &response, params) + return +} + +// GroupsSetLongPollSettings allows to set Bots Long Poll API settings in the community. +// +// https://vk.com/dev/groups.setLongPollSettings +func (vk *VK) GroupsSetLongPollSettings(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.setLongPollSettings", &response, params) + return +} + +// GroupsSetSettings sets community settings. +// +// https://vk.com/dev/groups.setSettings +func (vk *VK) GroupsSetSettings(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.setSettings", &response, params) + return +} + +// GroupsSetUserNote allows to create or edit a note about a user as part +// of the user's correspondence with the community. +// +// https://vk.com/dev/groups.setUserNote +func (vk *VK) GroupsSetUserNote(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.setUserNote", &response, params) + return +} + +// GroupsTagAdd allows to add a new tag to the community. +// +// https://vk.com/dev/groups.tagAdd +func (vk *VK) GroupsTagAdd(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.tagAdd", &response, params) + return +} + +// GroupsTagBind allows to "bind" and "unbind" community tags to conversations. +// +// https://vk.com/dev/groups.tagBind +func (vk *VK) GroupsTagBind(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.tagBind", &response, params) + return +} + +// GroupsTagDelete allows to remove a community tag +// +// The remote tag will be automatically "unbind" from all conversations to +// which it was "bind" earlier. +// +// https://vk.com/dev/groups.tagDelete +func (vk *VK) GroupsTagDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.tagDelete", &response, params) + return +} + +// GroupsTagUpdate allows to change an existing tag. +// +// https://vk.com/dev/groups.tagUpdate +func (vk *VK) GroupsTagUpdate(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.tagUpdate", &response, params) + return +} + +// GroupsToggleMarket method. +// +// https://vk.com/dev/groups.toggleMarket +func (vk *VK) GroupsToggleMarket(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.toggleMarket", &response, params) + return +} + +// GroupsUnban groups.unban. +// +// https://vk.com/dev/groups.unban +func (vk *VK) GroupsUnban(params Params) (response int, err error) { + err = vk.RequestUnmarshal("groups.unban", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/leadforms.go b/vendor/github.com/SevereCloud/vksdk/v2/api/leadforms.go new file mode 100644 index 00000000..a79c5cd3 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/leadforms.go @@ -0,0 +1,89 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// LeadFormsCreateResponse struct. +type LeadFormsCreateResponse struct { + FormID int `json:"form_id"` + URL string `json:"url"` +} + +// LeadFormsCreate leadForms.create. +// +// https://vk.com/dev/leadForms.create +func (vk *VK) LeadFormsCreate(params Params) (response LeadFormsCreateResponse, err error) { + err = vk.RequestUnmarshal("leadForms.create", &response, params) + return +} + +// LeadFormsDeleteResponse struct. +type LeadFormsDeleteResponse struct { + FormID int `json:"form_id"` +} + +// LeadFormsDelete leadForms.delete. +// +// https://vk.com/dev/leadForms.delete +func (vk *VK) LeadFormsDelete(params Params) (response LeadFormsDeleteResponse, err error) { + err = vk.RequestUnmarshal("leadForms.delete", &response, params) + return +} + +// LeadFormsGetResponse struct. +type LeadFormsGetResponse object.LeadFormsForm + +// LeadFormsGet leadForms.get. +// +// https://vk.com/dev/leadForms.get +func (vk *VK) LeadFormsGet(params Params) (response LeadFormsGetResponse, err error) { + err = vk.RequestUnmarshal("leadForms.get", &response, params) + return +} + +// LeadFormsGetLeadsResponse struct. +type LeadFormsGetLeadsResponse struct { + Leads []object.LeadFormsLead `json:"leads"` +} + +// LeadFormsGetLeads leadForms.getLeads. +// +// https://vk.com/dev/leadForms.getLeads +func (vk *VK) LeadFormsGetLeads(params Params) (response LeadFormsGetLeadsResponse, err error) { + err = vk.RequestUnmarshal("leadForms.getLeads", &response, params) + return +} + +// LeadFormsGetUploadURL leadForms.getUploadURL. +// +// https://vk.com/dev/leadForms.getUploadURL +func (vk *VK) LeadFormsGetUploadURL(params Params) (response string, err error) { + err = vk.RequestUnmarshal("leadForms.getUploadURL", &response, params) + return +} + +// LeadFormsListResponse struct. +type LeadFormsListResponse []object.LeadFormsForm + +// LeadFormsList leadForms.list. +// +// https://vk.com/dev/leadForms.list +func (vk *VK) LeadFormsList(params Params) (response LeadFormsListResponse, err error) { + err = vk.RequestUnmarshal("leadForms.list", &response, params) + return +} + +// LeadFormsUpdateResponse struct. +type LeadFormsUpdateResponse struct { + FormID int `json:"form_id"` + URL string `json:"url"` +} + +// LeadFormsUpdate leadForms.update. +// +// https://vk.com/dev/leadForms.update +func (vk *VK) LeadFormsUpdate(params Params) (response LeadFormsUpdateResponse, err error) { + err = vk.RequestUnmarshal("leadForms.update", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/leads.go b/vendor/github.com/SevereCloud/vksdk/v2/api/leads.go new file mode 100644 index 00000000..e01e7a92 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/leads.go @@ -0,0 +1,74 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// LeadsCheckUserResponse struct. +type LeadsCheckUserResponse object.LeadsChecked + +// LeadsCheckUser checks if the user can start the lead. +// +// https://vk.com/dev/leads.checkUser +func (vk *VK) LeadsCheckUser(params Params) (response LeadsCheckUserResponse, err error) { + err = vk.RequestUnmarshal("leads.checkUser", &response, params) + return +} + +// LeadsCompleteResponse struct. +type LeadsCompleteResponse object.LeadsComplete + +// LeadsComplete completes the lead started by user. +// +// https://vk.com/dev/leads.complete +func (vk *VK) LeadsComplete(params Params) (response LeadsCompleteResponse, err error) { + err = vk.RequestUnmarshal("leads.complete", &response, params) + return +} + +// LeadsGetStatsResponse struct. +type LeadsGetStatsResponse object.LeadsLead + +// LeadsGetStats returns lead stats data. +// +// https://vk.com/dev/leads.getStats +func (vk *VK) LeadsGetStats(params Params) (response LeadsGetStatsResponse, err error) { + err = vk.RequestUnmarshal("leads.getStats", &response, params) + return +} + +// LeadsGetUsersResponse struct. +type LeadsGetUsersResponse object.LeadsEntry + +// LeadsGetUsers returns a list of last user actions for the offer. +// +// https://vk.com/dev/leads.getUsers +func (vk *VK) LeadsGetUsers(params Params) (response LeadsGetUsersResponse, err error) { + err = vk.RequestUnmarshal("leads.getUsers", &response, params) + return +} + +// LeadsMetricHitResponse struct. +type LeadsMetricHitResponse struct { + Result object.BaseBoolInt `json:"result"` // Information whether request has been processed successfully + RedirectLink string `json:"redirect_link"` // Redirect link +} + +// LeadsMetricHit counts the metric event. +// +// https://vk.com/dev/leads.metricHit +func (vk *VK) LeadsMetricHit(params Params) (response LeadsMetricHitResponse, err error) { + err = vk.RequestUnmarshal("leads.metricHit", &response, params) + return +} + +// LeadsStartResponse struct. +type LeadsStartResponse object.LeadsStart + +// LeadsStart creates new session for the user passing the offer. +// +// https://vk.com/dev/leads.start +func (vk *VK) LeadsStart(params Params) (response LeadsStartResponse, err error) { + err = vk.RequestUnmarshal("leads.start", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/likes.go b/vendor/github.com/SevereCloud/vksdk/v2/api/likes.go new file mode 100644 index 00000000..047c2935 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/likes.go @@ -0,0 +1,79 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// LikesAddResponse struct. +type LikesAddResponse struct { + Likes int `json:"likes"` +} + +// LikesAdd adds the specified object to the Likes list of the current user. +// +// https://vk.com/dev/likes.add +func (vk *VK) LikesAdd(params Params) (response LikesAddResponse, err error) { + err = vk.RequestUnmarshal("likes.add", &response, params) + return +} + +// LikesDeleteResponse struct. +type LikesDeleteResponse struct { + Likes int `json:"likes"` +} + +// LikesDelete deletes the specified object from the Likes list of the current user. +// +// https://vk.com/dev/likes.delete +func (vk *VK) LikesDelete(params Params) (response LikesDeleteResponse, err error) { + err = vk.RequestUnmarshal("likes.delete", &response, params) + return +} + +// LikesGetListResponse struct. +type LikesGetListResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// LikesGetList likes.getList returns a list of IDs of users who added the specified object to their Likes list. +// +// extended=0 +// +// https://vk.com/dev/likes.getList +func (vk *VK) LikesGetList(params Params) (response LikesGetListResponse, err error) { + err = vk.RequestUnmarshal("likes.getList", &response, params, Params{"extended": false}) + + return +} + +// LikesGetListExtendedResponse struct. +type LikesGetListExtendedResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// LikesGetListExtended likes.getList returns a list of IDs of users who added the specified object to their Likes list. +// +// extended=1 +// +// https://vk.com/dev/likes.getList +func (vk *VK) LikesGetListExtended(params Params) (response LikesGetListExtendedResponse, err error) { + err = vk.RequestUnmarshal("likes.getList", &response, params, Params{"extended": true}) + + return +} + +// LikesIsLikedResponse struct. +type LikesIsLikedResponse struct { + Liked object.BaseBoolInt `json:"liked"` + Copied object.BaseBoolInt `json:"copied"` +} + +// LikesIsLiked checks for the object in the Likes list of the specified user. +// +// https://vk.com/dev/likes.isLiked +func (vk *VK) LikesIsLiked(params Params) (response LikesIsLikedResponse, err error) { + err = vk.RequestUnmarshal("likes.isLiked", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/market.go b/vendor/github.com/SevereCloud/vksdk/v2/api/market.go new file mode 100644 index 00000000..dc140a86 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/market.go @@ -0,0 +1,319 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// MarketAddResponse struct. +type MarketAddResponse struct { + MarketItemID int `json:"market_item_id"` // Item ID +} + +// MarketAdd adds a new item to the market. +// +// https://vk.com/dev/market.add +func (vk *VK) MarketAdd(params Params) (response MarketAddResponse, err error) { + err = vk.RequestUnmarshal("market.add", &response, params) + return +} + +// MarketAddAlbumResponse struct. +type MarketAddAlbumResponse struct { + MarketAlbumID int `json:"market_album_id"` // Album ID +} + +// MarketAddAlbum creates new collection of items. +// +// https://vk.com/dev/market.addAlbum +func (vk *VK) MarketAddAlbum(params Params) (response MarketAddAlbumResponse, err error) { + err = vk.RequestUnmarshal("market.addAlbum", &response, params) + return +} + +// MarketAddToAlbum adds an item to one or multiple collections. +// +// https://vk.com/dev/market.addToAlbum +func (vk *VK) MarketAddToAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.addToAlbum", &response, params) + return +} + +// MarketCreateComment creates a new comment for an item. +// +// https://vk.com/dev/market.createComment +func (vk *VK) MarketCreateComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.createComment", &response, params) + return +} + +// MarketDelete deletes an item. +// +// https://vk.com/dev/market.delete +func (vk *VK) MarketDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.delete", &response, params) + return +} + +// MarketDeleteAlbum deletes a collection of items. +// +// https://vk.com/dev/market.deleteAlbum +func (vk *VK) MarketDeleteAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.deleteAlbum", &response, params) + return +} + +// MarketDeleteComment deletes an item's comment. +// +// https://vk.com/dev/market.deleteComment +func (vk *VK) MarketDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.deleteComment", &response, params) + return +} + +// MarketEdit edits an item. +// +// https://vk.com/dev/market.edit +func (vk *VK) MarketEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.edit", &response, params) + return +} + +// MarketEditAlbum edits a collection of items. +// +// https://vk.com/dev/market.editAlbum +func (vk *VK) MarketEditAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.editAlbum", &response, params) + return +} + +// MarketEditComment changes item comment's text. +// +// https://vk.com/dev/market.editComment +func (vk *VK) MarketEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.editComment", &response, params) + return +} + +// MarketEditOrder edits an order. +// +// https://vk.com/dev/market.editOrder +func (vk *VK) MarketEditOrder(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.editOrder", &response, params) + return +} + +// MarketGetResponse struct. +type MarketGetResponse struct { + Count int `json:"count"` + Items []object.MarketMarketItem `json:"items"` +} + +// MarketGet returns items list for a community. +// +// https://vk.com/dev/market.get +func (vk *VK) MarketGet(params Params) (response MarketGetResponse, err error) { + err = vk.RequestUnmarshal("market.get", &response, params) + return +} + +// MarketGetAlbumByIDResponse struct. +type MarketGetAlbumByIDResponse struct { + Count int `json:"count"` + Items []object.MarketMarketAlbum `json:"items"` +} + +// MarketGetAlbumByID returns items album's data. +// +// https://vk.com/dev/market.getAlbumById +func (vk *VK) MarketGetAlbumByID(params Params) (response MarketGetAlbumByIDResponse, err error) { + err = vk.RequestUnmarshal("market.getAlbumById", &response, params) + return +} + +// MarketGetAlbumsResponse struct. +type MarketGetAlbumsResponse struct { + Count int `json:"count"` + Items []object.MarketMarketAlbum `json:"items"` +} + +// MarketGetAlbums returns community's collections list. +// +// https://vk.com/dev/market.getAlbums +func (vk *VK) MarketGetAlbums(params Params) (response MarketGetAlbumsResponse, err error) { + err = vk.RequestUnmarshal("market.getAlbums", &response, params) + return +} + +// MarketGetByIDResponse struct. +type MarketGetByIDResponse struct { + Count int `json:"count"` + Items []object.MarketMarketItem `json:"items"` +} + +// MarketGetByID returns information about market items by their iDs. +// +// https://vk.com/dev/market.getById +func (vk *VK) MarketGetByID(params Params) (response MarketGetByIDResponse, err error) { + err = vk.RequestUnmarshal("market.getById", &response, params) + return +} + +// MarketGetCategoriesResponse struct. +type MarketGetCategoriesResponse struct { + Count int `json:"count"` + Items []object.MarketMarketCategory `json:"items"` +} + +// MarketGetCategories returns a list of market categories. +// +// https://vk.com/dev/market.getCategories +func (vk *VK) MarketGetCategories(params Params) (response MarketGetCategoriesResponse, err error) { + err = vk.RequestUnmarshal("market.getCategories", &response, params) + return +} + +// MarketGetCommentsResponse struct. +type MarketGetCommentsResponse struct { + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` +} + +// MarketGetComments returns comments list for an item. +// +// extended=0 +// +// https://vk.com/dev/market.getComments +func (vk *VK) MarketGetComments(params Params) (response MarketGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("market.getComments", &response, params, Params{"extended": false}) + + return +} + +// MarketGetCommentsExtendedResponse struct. +type MarketGetCommentsExtendedResponse struct { + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` + object.ExtendedResponse +} + +// MarketGetCommentsExtended returns comments list for an item. +// +// extended=1 +// +// https://vk.com/dev/market.getComments +func (vk *VK) MarketGetCommentsExtended(params Params) (response MarketGetCommentsExtendedResponse, err error) { + err = vk.RequestUnmarshal("market.getComments", &response, params, Params{"extended": true}) + + return +} + +// MarketGetGroupOrdersResponse struct. +type MarketGetGroupOrdersResponse struct { + Count int `json:"count"` + Items []object.MarketOrder `json:"items"` +} + +// MarketGetGroupOrders returns community's orders list. +// +// https://vk.com/dev/market.getGroupOrders +func (vk *VK) MarketGetGroupOrders(params Params) (response MarketGetGroupOrdersResponse, err error) { + err = vk.RequestUnmarshal("market.getGroupOrders", &response, params) + return +} + +// MarketGetOrderByIDResponse struct. +type MarketGetOrderByIDResponse struct { + Order object.MarketOrder `json:"order"` +} + +// MarketGetOrderByID returns order by id. +// +// https://vk.com/dev/market.getOrderById +func (vk *VK) MarketGetOrderByID(params Params) (response MarketGetOrderByIDResponse, err error) { + err = vk.RequestUnmarshal("market.getOrderById", &response, params) + return +} + +// MarketGetOrderItemsResponse struct. +type MarketGetOrderItemsResponse struct { + Count int `json:"count"` + Items []object.MarketOrderItem `json:"items"` +} + +// MarketGetOrderItems returns items of an order. +// +// https://vk.com/dev/market.getOrderItems +func (vk *VK) MarketGetOrderItems(params Params) (response MarketGetOrderItemsResponse, err error) { + err = vk.RequestUnmarshal("market.getOrderItems", &response, params) + return +} + +// MarketRemoveFromAlbum removes an item from one or multiple collections. +// +// https://vk.com/dev/market.removeFromAlbum +func (vk *VK) MarketRemoveFromAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.removeFromAlbum", &response, params) + return +} + +// MarketReorderAlbums reorders the collections list. +// +// https://vk.com/dev/market.reorderAlbums +func (vk *VK) MarketReorderAlbums(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.reorderAlbums", &response, params) + return +} + +// MarketReorderItems changes item place in a collection. +// +// https://vk.com/dev/market.reorderItems +func (vk *VK) MarketReorderItems(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.reorderItems", &response, params) + return +} + +// MarketReport sends a complaint to the item. +// +// https://vk.com/dev/market.report +func (vk *VK) MarketReport(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.report", &response, params) + return +} + +// MarketReportComment sends a complaint to the item's comment. +// +// https://vk.com/dev/market.reportComment +func (vk *VK) MarketReportComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.reportComment", &response, params) + return +} + +// MarketRestore restores recently deleted item. +// +// https://vk.com/dev/market.restore +func (vk *VK) MarketRestore(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.restore", &response, params) + return +} + +// MarketRestoreComment restores a recently deleted comment. +// +// https://vk.com/dev/market.restoreComment +func (vk *VK) MarketRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("market.restoreComment", &response, params) + return +} + +// MarketSearchResponse struct. +type MarketSearchResponse struct { + Count int `json:"count"` + Items []object.MarketMarketItem `json:"items"` +} + +// MarketSearch searches market items in a community's catalog. +// +// https://vk.com/dev/market.search +func (vk *VK) MarketSearch(params Params) (response MarketSearchResponse, err error) { + err = vk.RequestUnmarshal("market.search", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/messages.go b/vendor/github.com/SevereCloud/vksdk/v2/api/messages.go new file mode 100644 index 00000000..0a8f5613 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/messages.go @@ -0,0 +1,616 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// MessagesAddChatUser adds a new user to a chat. +// +// https://vk.com/dev/messages.addChatUser +func (vk *VK) MessagesAddChatUser(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.addChatUser", &response, params) + return +} + +// MessagesAllowMessagesFromGroup allows sending messages from community to the current user. +// +// https://vk.com/dev/messages.allowMessagesFromGroup +func (vk *VK) MessagesAllowMessagesFromGroup(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.allowMessagesFromGroup", &response, params) + return +} + +// MessagesCreateChat creates a chat with several participants. +// +// https://vk.com/dev/messages.createChat +func (vk *VK) MessagesCreateChat(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.createChat", &response, params) + return +} + +// MessagesDeleteResponse struct. +type MessagesDeleteResponse map[string]int + +// MessagesDelete deletes one or more messages. +// +// https://vk.com/dev/messages.delete +func (vk *VK) MessagesDelete(params Params) (response MessagesDeleteResponse, err error) { + err = vk.RequestUnmarshal("messages.delete", &response, params) + return +} + +// MessagesDeleteChatPhotoResponse struct. +type MessagesDeleteChatPhotoResponse struct { + MessageID int `json:"message_id"` + Chat object.MessagesChat `json:"chat"` +} + +// MessagesDeleteChatPhoto deletes a chat's cover picture. +// +// https://vk.com/dev/messages.deleteChatPhoto +func (vk *VK) MessagesDeleteChatPhoto(params Params) (response MessagesDeleteChatPhotoResponse, err error) { + err = vk.RequestUnmarshal("messages.deleteChatPhoto", &response, params) + return +} + +// MessagesDeleteConversationResponse struct. +type MessagesDeleteConversationResponse struct { + LastDeletedID int `json:"last_deleted_id"` // Id of the last message, that was deleted +} + +// MessagesDeleteConversation deletes private messages in a conversation. +// +// https://vk.com/dev/messages.deleteConversation +func (vk *VK) MessagesDeleteConversation(params Params) (response MessagesDeleteConversationResponse, err error) { + err = vk.RequestUnmarshal("messages.deleteConversation", &response, params) + return +} + +// MessagesDenyMessagesFromGroup denies sending message from community to the current user. +// +// https://vk.com/dev/messages.denyMessagesFromGroup +func (vk *VK) MessagesDenyMessagesFromGroup(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.denyMessagesFromGroup", &response, params) + return +} + +// MessagesEdit edits the message. +// +// https://vk.com/dev/messages.edit +func (vk *VK) MessagesEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.edit", &response, params) + return +} + +// MessagesEditChat edits the title of a chat. +// +// https://vk.com/dev/messages.editChat +func (vk *VK) MessagesEditChat(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.editChat", &response, params) + return +} + +// MessagesGetByConversationMessageIDResponse struct. +type MessagesGetByConversationMessageIDResponse struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + object.ExtendedResponse +} + +// MessagesGetByConversationMessageID messages.getByConversationMessageId. +// +// https://vk.com/dev/messages.getByConversationMessageId +func (vk *VK) MessagesGetByConversationMessageID(params Params) ( + response MessagesGetByConversationMessageIDResponse, + err error, +) { + err = vk.RequestUnmarshal("messages.getByConversationMessageId", &response, params) + return +} + +// MessagesGetByIDResponse struct. +type MessagesGetByIDResponse struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` +} + +// MessagesGetByID returns messages by their IDs. +// +// extended=0 +// +// https://vk.com/dev/messages.getById +func (vk *VK) MessagesGetByID(params Params) (response MessagesGetByIDResponse, err error) { + err = vk.RequestUnmarshal("messages.getById", &response, params, Params{"extended": false}) + + return +} + +// MessagesGetByIDExtendedResponse struct. +type MessagesGetByIDExtendedResponse struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + object.ExtendedResponse +} + +// MessagesGetByIDExtended returns messages by their IDs. +// +// extended=1 +// +// https://vk.com/dev/messages.getById +func (vk *VK) MessagesGetByIDExtended(params Params) (response MessagesGetByIDExtendedResponse, err error) { + err = vk.RequestUnmarshal("messages.getById", &response, params, Params{"extended": true}) + + return +} + +// MessagesGetChatResponse struct. +type MessagesGetChatResponse object.MessagesChat + +// MessagesGetChat returns information about a chat. +// +// https://vk.com/dev/messages.getChat +func (vk *VK) MessagesGetChat(params Params) (response MessagesGetChatResponse, err error) { + err = vk.RequestUnmarshal("messages.getChat", &response, params) + return +} + +// MessagesGetChatChatIDsResponse struct. +type MessagesGetChatChatIDsResponse []object.MessagesChat + +// MessagesGetChatChatIDs returns information about a chat. +// +// https://vk.com/dev/messages.getChat +func (vk *VK) MessagesGetChatChatIDs(params Params) (response MessagesGetChatChatIDsResponse, err error) { + err = vk.RequestUnmarshal("messages.getChat", &response, params) + return +} + +// MessagesGetChatPreviewResponse struct. +type MessagesGetChatPreviewResponse struct { + Preview object.MessagesChatPreview `json:"preview"` + object.ExtendedResponse +} + +// MessagesGetChatPreview allows to receive chat preview by the invitation link. +// +// https://vk.com/dev/messages.getChatPreview +func (vk *VK) MessagesGetChatPreview(params Params) (response MessagesGetChatPreviewResponse, err error) { + err = vk.RequestUnmarshal("messages.getChatPreview", &response, params) + return +} + +// MessagesGetConversationMembersResponse struct. +type MessagesGetConversationMembersResponse struct { + Items []struct { + MemberID int `json:"member_id"` + JoinDate int `json:"join_date"` + InvitedBy int `json:"invited_by"` + IsOwner object.BaseBoolInt `json:"is_owner,omitempty"` + IsAdmin object.BaseBoolInt `json:"is_admin,omitempty"` + CanKick object.BaseBoolInt `json:"can_kick,omitempty"` + } `json:"items"` + Count int `json:"count"` + ChatRestrictions struct { + OnlyAdminsInvite object.BaseBoolInt `json:"only_admins_invite"` + OnlyAdminsEditPin object.BaseBoolInt `json:"only_admins_edit_pin"` + OnlyAdminsEditInfo object.BaseBoolInt `json:"only_admins_edit_info"` + AdminsPromoteUsers object.BaseBoolInt `json:"admins_promote_users"` + } `json:"chat_restrictions"` + object.ExtendedResponse +} + +// MessagesGetConversationMembers returns a list of IDs of users participating in a conversation. +// +// https://vk.com/dev/messages.getConversationMembers +func (vk *VK) MessagesGetConversationMembers(params Params) ( + response MessagesGetConversationMembersResponse, + err error, +) { + err = vk.RequestUnmarshal("messages.getConversationMembers", &response, params) + return +} + +// MessagesGetConversationsResponse struct. +type MessagesGetConversationsResponse struct { + Count int `json:"count"` + Items []object.MessagesConversationWithMessage `json:"items"` + UnreadCount int `json:"unread_count"` + object.ExtendedResponse +} + +// MessagesGetConversations returns a list of conversations. +// +// https://vk.com/dev/messages.getConversations +func (vk *VK) MessagesGetConversations(params Params) (response MessagesGetConversationsResponse, err error) { + err = vk.RequestUnmarshal("messages.getConversations", &response, params) + return +} + +// MessagesGetConversationsByIDResponse struct. +type MessagesGetConversationsByIDResponse struct { + Count int `json:"count"` + Items []object.MessagesConversation `json:"items"` +} + +// MessagesGetConversationsByID returns conversations by their IDs. +// +// extended=0 +// +// https://vk.com/dev/messages.getConversationsById +func (vk *VK) MessagesGetConversationsByID(params Params) (response MessagesGetConversationsByIDResponse, err error) { + err = vk.RequestUnmarshal("messages.getConversationsById", &response, params, Params{"extended": false}) + + return +} + +// MessagesGetConversationsByIDExtendedResponse struct. +type MessagesGetConversationsByIDExtendedResponse struct { + Count int `json:"count"` + Items []object.MessagesConversation `json:"items"` + object.ExtendedResponse +} + +// MessagesGetConversationsByIDExtended returns conversations by their IDs. +// +// extended=1 +// +// https://vk.com/dev/messages.getConversationsById +func (vk *VK) MessagesGetConversationsByIDExtended(params Params) ( + response MessagesGetConversationsByIDExtendedResponse, + err error, +) { + err = vk.RequestUnmarshal("messages.getConversationsById", &response, params, Params{"extended": true}) + + return +} + +// MessagesGetHistoryResponse struct. +type MessagesGetHistoryResponse struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + + // extended=1 + object.ExtendedResponse + + // extended=1 + Conversations []object.MessagesConversation `json:"conversations,omitempty"` + + // Deprecated: use .Conversations.InRead + InRead int `json:"in_read,omitempty"` + // Deprecated: use .Conversations.OutRead + OutRead int `json:"out_read,omitempty"` +} + +// MessagesGetHistory returns message history for the specified user or group chat. +// +// https://vk.com/dev/messages.getHistory +func (vk *VK) MessagesGetHistory(params Params) (response MessagesGetHistoryResponse, err error) { + err = vk.RequestUnmarshal("messages.getHistory", &response, params) + return +} + +// MessagesGetHistoryAttachmentsResponse struct. +type MessagesGetHistoryAttachmentsResponse struct { + Items []object.MessagesHistoryAttachment `json:"items"` + NextFrom string `json:"next_from"` + object.ExtendedResponse +} + +// MessagesGetHistoryAttachments returns media files from the dialog or group chat. +// +// https://vk.com/dev/messages.getHistoryAttachments +func (vk *VK) MessagesGetHistoryAttachments(params Params) (response MessagesGetHistoryAttachmentsResponse, err error) { + err = vk.RequestUnmarshal("messages.getHistoryAttachments", &response, params) + return +} + +// MessagesGetImportantMessagesResponse struct. +type MessagesGetImportantMessagesResponse struct { + Messages struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + } `json:"messages"` + Conversations []object.MessagesConversation `json:"conversations"` + object.ExtendedResponse +} + +// MessagesGetImportantMessages messages.getImportantMessages. +// +// https://vk.com/dev/messages.getImportantMessages +func (vk *VK) MessagesGetImportantMessages(params Params) (response MessagesGetImportantMessagesResponse, err error) { + err = vk.RequestUnmarshal("messages.getImportantMessages", &response, params) + return +} + +// MessagesGetIntentUsersResponse struct. +type MessagesGetIntentUsersResponse struct { + Count int `json:"count"` + Items []int `json:"items"` + Profiles []object.MessagesMessage `json:"profiles,omitempty"` +} + +// MessagesGetIntentUsers method. +// +// https://vk.com/dev/messages.getIntentUsers +func (vk *VK) MessagesGetIntentUsers(params Params) (response MessagesGetIntentUsersResponse, err error) { + err = vk.RequestUnmarshal("messages.getIntentUsers", &response, params) + return +} + +// MessagesGetInviteLinkResponse struct. +type MessagesGetInviteLinkResponse struct { + Link string `json:"link"` +} + +// MessagesGetInviteLink receives a link to invite a user to the chat. +// +// https://vk.com/dev/messages.getInviteLink +func (vk *VK) MessagesGetInviteLink(params Params) (response MessagesGetInviteLinkResponse, err error) { + err = vk.RequestUnmarshal("messages.getInviteLink", &response, params) + return +} + +// MessagesGetLastActivityResponse struct. +type MessagesGetLastActivityResponse object.MessagesLastActivity + +// MessagesGetLastActivity returns a user's current status and date of last activity. +// +// https://vk.com/dev/messages.getLastActivity +func (vk *VK) MessagesGetLastActivity(params Params) (response MessagesGetLastActivityResponse, err error) { + err = vk.RequestUnmarshal("messages.getLastActivity", &response, params) + return +} + +// MessagesGetLongPollHistoryResponse struct. +type MessagesGetLongPollHistoryResponse struct { + History [][]int `json:"history"` + Groups []object.GroupsGroup `json:"groups"` + Messages struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + } `json:"messages"` + Profiles []object.UsersUser `json:"profiles"` + // Chats struct {} `json:"chats"` + NewPTS int `json:"new_pts"` + FromPTS int `json:"from_pts"` + More object.BaseBoolInt `json:"chats"` + Conversations []object.MessagesConversation `json:"conversations"` +} + +// MessagesGetLongPollHistory returns updates in user's private messages. +// +// https://vk.com/dev/messages.getLongPollHistory +func (vk *VK) MessagesGetLongPollHistory(params Params) (response MessagesGetLongPollHistoryResponse, err error) { + err = vk.RequestUnmarshal("messages.getLongPollHistory", &response, params) + return +} + +// MessagesGetLongPollServerResponse struct. +type MessagesGetLongPollServerResponse object.MessagesLongPollParams + +// MessagesGetLongPollServer returns data required for connection to a Long Poll server. +// +// https://vk.com/dev/messages.getLongPollServer +func (vk *VK) MessagesGetLongPollServer(params Params) (response MessagesGetLongPollServerResponse, err error) { + err = vk.RequestUnmarshal("messages.getLongPollServer", &response, params) + return +} + +// MessagesIsMessagesFromGroupAllowedResponse struct. +type MessagesIsMessagesFromGroupAllowedResponse struct { + IsAllowed object.BaseBoolInt `json:"is_allowed"` +} + +// MessagesIsMessagesFromGroupAllowed returns information whether +// sending messages from the community to current user is allowed. +// +// https://vk.com/dev/messages.isMessagesFromGroupAllowed +func (vk *VK) MessagesIsMessagesFromGroupAllowed(params Params) ( + response MessagesIsMessagesFromGroupAllowedResponse, + err error, +) { + err = vk.RequestUnmarshal("messages.isMessagesFromGroupAllowed", &response, params) + return +} + +// MessagesJoinChatByInviteLinkResponse struct. +type MessagesJoinChatByInviteLinkResponse struct { + ChatID int `json:"chat_id"` +} + +// MessagesJoinChatByInviteLink allows to enter the chat by the invitation link. +// +// https://vk.com/dev/messages.joinChatByInviteLink +func (vk *VK) MessagesJoinChatByInviteLink(params Params) (response MessagesJoinChatByInviteLinkResponse, err error) { + err = vk.RequestUnmarshal("messages.joinChatByInviteLink", &response, params) + return +} + +// MessagesMarkAsAnsweredConversation messages.markAsAnsweredConversation. +// +// https://vk.com/dev/messages.markAsAnsweredConversation +func (vk *VK) MessagesMarkAsAnsweredConversation(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.markAsAnsweredConversation", &response, params) + return +} + +// MessagesMarkAsImportantResponse struct. +type MessagesMarkAsImportantResponse []int + +// MessagesMarkAsImportant marks and un marks messages as important (starred). +// +// https://vk.com/dev/messages.markAsImportant +func (vk *VK) MessagesMarkAsImportant(params Params) (response MessagesMarkAsImportantResponse, err error) { + err = vk.RequestUnmarshal("messages.markAsImportant", &response, params) + return +} + +// MessagesMarkAsImportantConversation messages.markAsImportantConversation. +// +// https://vk.com/dev/messages.markAsImportantConversation +func (vk *VK) MessagesMarkAsImportantConversation(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.markAsImportantConversation", &response, params) + return +} + +// MessagesMarkAsRead marks messages as read. +// +// https://vk.com/dev/messages.markAsRead +func (vk *VK) MessagesMarkAsRead(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.markAsRead", &response, params) + return +} + +// MessagesPinResponse struct. +type MessagesPinResponse object.MessagesMessage + +// MessagesPin messages.pin. +// +// https://vk.com/dev/messages.pin +func (vk *VK) MessagesPin(params Params) (response MessagesPinResponse, err error) { + err = vk.RequestUnmarshal("messages.pin", &response, params) + return +} + +// MessagesRemoveChatUser allows the current user to leave a chat or, if the +// current user started the chat, allows the user to remove another user from +// the chat. +// +// https://vk.com/dev/messages.removeChatUser +func (vk *VK) MessagesRemoveChatUser(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.removeChatUser", &response, params) + return +} + +// MessagesRestore restores a deleted message. +// +// https://vk.com/dev/messages.restore +func (vk *VK) MessagesRestore(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.restore", &response, params) + return +} + +// MessagesSearchResponse struct. +type MessagesSearchResponse struct { + Count int `json:"count"` + Items []object.MessagesMessage `json:"items"` + object.ExtendedResponse + Conversations []object.MessagesConversation `json:"conversations,omitempty"` +} + +// MessagesSearch returns a list of the current user's private messages that match search criteria. +// +// https://vk.com/dev/messages.search +func (vk *VK) MessagesSearch(params Params) (response MessagesSearchResponse, err error) { + err = vk.RequestUnmarshal("messages.search", &response, params) + return +} + +// MessagesSearchConversationsResponse struct. +type MessagesSearchConversationsResponse struct { + Count int `json:"count"` + Items []object.MessagesConversation `json:"items"` + object.ExtendedResponse +} + +// MessagesSearchConversations returns a list of conversations that match search criteria. +// +// https://vk.com/dev/messages.searchConversations +func (vk *VK) MessagesSearchConversations(params Params) (response MessagesSearchConversationsResponse, err error) { + err = vk.RequestUnmarshal("messages.searchConversations", &response, params) + return +} + +// MessagesSend sends a message. +// +// For user_ids or peer_ids parameters, use MessagesSendUserIDs. +// +// https://vk.com/dev/messages.send +func (vk *VK) MessagesSend(params Params) (response int, err error) { + reqParams := Params{ + "user_ids": "", + "peer_ids": "", + } + + err = vk.RequestUnmarshal("messages.send", &response, params, reqParams) + + return +} + +// MessagesSendUserIDsResponse struct. +// +// TODO: v3 rename MessagesSendPeerIDsResponse - user_ids outdated. +type MessagesSendUserIDsResponse []struct { + PeerID int `json:"peer_id"` + MessageID int `json:"message_id"` + ConversationMessageID int `json:"conversation_message_id"` + Error Error `json:"error"` +} + +// MessagesSendPeerIDs sends a message. +// +// need peer_ids; +// +// https://vk.com/dev/messages.send +func (vk *VK) MessagesSendPeerIDs(params Params) (response MessagesSendUserIDsResponse, err error) { + err = vk.RequestUnmarshal("messages.send", &response, params) + return +} + +// MessagesSendUserIDs sends a message. +// +// need user_ids or peer_ids; +// +// https://vk.com/dev/messages.send +// +// Deprecated: user_ids outdated, use MessagesSendPeerIDs. +func (vk *VK) MessagesSendUserIDs(params Params) (response MessagesSendUserIDsResponse, err error) { + return vk.MessagesSendPeerIDs(params) +} + +// MessagesSendMessageEventAnswer method. +// +// https://vk.com/dev/messages.sendMessageEventAnswer +func (vk *VK) MessagesSendMessageEventAnswer(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.sendMessageEventAnswer", &response, params) + return +} + +// MessagesSendSticker sends a message. +// +// https://vk.com/dev/messages.sendSticker +func (vk *VK) MessagesSendSticker(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.sendSticker", &response, params, Params{"user_ids": ""}) + + return +} + +// MessagesSetActivity changes the status of a user as typing in a conversation. +// +// https://vk.com/dev/messages.setActivity +func (vk *VK) MessagesSetActivity(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.setActivity", &response, params) + return +} + +// MessagesSetChatPhotoResponse struct. +type MessagesSetChatPhotoResponse struct { + MessageID int `json:"message_id"` + Chat object.MessagesChat `json:"chat"` +} + +// MessagesSetChatPhoto sets a previously-uploaded picture as the cover picture of a chat. +// +// https://vk.com/dev/messages.setChatPhoto +func (vk *VK) MessagesSetChatPhoto(params Params) (response MessagesSetChatPhotoResponse, err error) { + err = vk.RequestUnmarshal("messages.setChatPhoto", &response, params) + return +} + +// MessagesUnpin messages.unpin. +// +// https://vk.com/dev/messages.unpin +func (vk *VK) MessagesUnpin(params Params) (response int, err error) { + err = vk.RequestUnmarshal("messages.unpin", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/newsfeed.go b/vendor/github.com/SevereCloud/vksdk/v2/api/newsfeed.go new file mode 100644 index 00000000..36ce1453 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/newsfeed.go @@ -0,0 +1,230 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// NewsfeedAddBan prevents news from specified users and communities +// from appearing in the current user's newsfeed. +// +// https://vk.com/dev/newsfeed.addBan +func (vk *VK) NewsfeedAddBan(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.addBan", &response, params) + return +} + +// NewsfeedDeleteBan allows news from previously banned users and +// communities to be shown in the current user's newsfeed. +// +// https://vk.com/dev/newsfeed.deleteBan +func (vk *VK) NewsfeedDeleteBan(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.deleteBan", &response, params) + return +} + +// NewsfeedDeleteList the method allows you to delete a custom news list. +// +// https://vk.com/dev/newsfeed.deleteList +func (vk *VK) NewsfeedDeleteList(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.deleteList", &response, params) + return +} + +// NewsfeedGetResponse struct. +type NewsfeedGetResponse struct { + Items []object.NewsfeedNewsfeedItem `json:"items"` + object.ExtendedResponse + NextFrom string `json:"next_from"` +} + +// NewsfeedGet returns data required to show newsfeed for the current user. +// +// https://vk.com/dev/newsfeed.get +func (vk *VK) NewsfeedGet(params Params) (response NewsfeedGetResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.get", &response, params) + return +} + +// NewsfeedGetBannedResponse struct. +type NewsfeedGetBannedResponse struct { + Members []int `json:"members"` + Groups []int `json:"groups"` +} + +// NewsfeedGetBanned returns a list of users and communities banned from the current user's newsfeed. +// +// extended=0 +// +// https://vk.com/dev/newsfeed.getBanned +func (vk *VK) NewsfeedGetBanned(params Params) (response NewsfeedGetBannedResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getBanned", &response, params, Params{"extended": false}) + + return +} + +// NewsfeedGetBannedExtendedResponse struct. +type NewsfeedGetBannedExtendedResponse struct { + object.ExtendedResponse +} + +// NewsfeedGetBannedExtended returns a list of users and communities banned from the current user's newsfeed. +// +// extended=1 +// +// https://vk.com/dev/newsfeed.getBanned +func (vk *VK) NewsfeedGetBannedExtended(params Params) (response NewsfeedGetBannedExtendedResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getBanned", &response, params, Params{"extended": true}) + + return +} + +// NewsfeedGetCommentsResponse struct. +type NewsfeedGetCommentsResponse struct { + Items []object.NewsfeedNewsfeedItem `json:"items"` + object.ExtendedResponse + NextFrom string `json:"next_from"` +} + +// NewsfeedGetComments returns a list of comments in the current user's newsfeed. +// +// https://vk.com/dev/newsfeed.getComments +func (vk *VK) NewsfeedGetComments(params Params) (response NewsfeedGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getComments", &response, params) + return +} + +// NewsfeedGetListsResponse struct. +type NewsfeedGetListsResponse struct { + Count int `json:"count"` + Items []struct { + ID int `json:"id"` + Title string `json:"title"` + NoReposts int `json:"no_reposts"` + SourceIDs []int `json:"source_ids"` + } `json:"items"` +} + +// NewsfeedGetLists returns a list of newsfeeds followed by the current user. +// +// https://vk.com/dev/newsfeed.getLists +func (vk *VK) NewsfeedGetLists(params Params) (response NewsfeedGetListsResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getLists", &response, params) + return +} + +// NewsfeedGetMentionsResponse struct. +type NewsfeedGetMentionsResponse struct { + Count int `json:"count"` + Items []object.WallWallpostToID `json:"items"` +} + +// NewsfeedGetMentions returns a list of posts on user walls in which the current user is mentioned. +// +// https://vk.com/dev/newsfeed.getMentions +func (vk *VK) NewsfeedGetMentions(params Params) (response NewsfeedGetMentionsResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getMentions", &response, params) + return +} + +// NewsfeedGetRecommendedResponse struct. +type NewsfeedGetRecommendedResponse struct { + Items []object.NewsfeedNewsfeedItem `json:"items"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` + NextOffset string `json:"next_offset"` + NextFrom string `json:"next_from"` +} + +// NewsfeedGetRecommended returns a list of newsfeeds recommended to the current user. +// +// https://vk.com/dev/newsfeed.getRecommended +func (vk *VK) NewsfeedGetRecommended(params Params) (response NewsfeedGetRecommendedResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getRecommended", &response, params) + return +} + +// NewsfeedGetSuggestedSourcesResponse struct. +type NewsfeedGetSuggestedSourcesResponse struct { + Count int `json:"count"` + Items []object.GroupsGroup `json:"items"` // FIXME: GroupsGroup + UsersUser +} + +// NewsfeedGetSuggestedSources returns communities and users that current user is suggested to follow. +// +// https://vk.com/dev/newsfeed.getSuggestedSources +func (vk *VK) NewsfeedGetSuggestedSources(params Params) (response NewsfeedGetSuggestedSourcesResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.getSuggestedSources", &response, params) + return +} + +// NewsfeedIgnoreItem hides an item from the newsfeed. +// +// https://vk.com/dev/newsfeed.ignoreItem +func (vk *VK) NewsfeedIgnoreItem(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.ignoreItem", &response, params) + return +} + +// NewsfeedSaveList creates and edits user newsfeed lists. +// +// https://vk.com/dev/newsfeed.saveList +func (vk *VK) NewsfeedSaveList(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.saveList", &response, params) + return +} + +// NewsfeedSearchResponse struct. +type NewsfeedSearchResponse struct { + Items []object.WallWallpost `json:"items"` + Count int `json:"count"` + TotalCount int `json:"total_count"` + NextFrom string `json:"next_from"` +} + +// NewsfeedSearch returns search results by statuses. +// +// extended=0 +// +// https://vk.com/dev/newsfeed.search +func (vk *VK) NewsfeedSearch(params Params) (response NewsfeedSearchResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.search", &response, params, Params{"extended": false}) + + return +} + +// NewsfeedSearchExtendedResponse struct. +type NewsfeedSearchExtendedResponse struct { + Items []object.WallWallpost `json:"items"` + Count int `json:"count"` + TotalCount int `json:"total_count"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` + NextFrom string `json:"next_from"` +} + +// NewsfeedSearchExtended returns search results by statuses. +// +// extended=1 +// +// https://vk.com/dev/newsfeed.search +func (vk *VK) NewsfeedSearchExtended(params Params) (response NewsfeedSearchExtendedResponse, err error) { + err = vk.RequestUnmarshal("newsfeed.search", &response, params, Params{"extended": true}) + + return +} + +// NewsfeedUnignoreItem returns a hidden item to the newsfeed. +// +// https://vk.com/dev/newsfeed.unignoreItem +func (vk *VK) NewsfeedUnignoreItem(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.unignoreItem", &response, params) + return +} + +// NewsfeedUnsubscribe unsubscribes the current user from specified newsfeeds. +// +// https://vk.com/dev/newsfeed.unsubscribe +func (vk *VK) NewsfeedUnsubscribe(params Params) (response int, err error) { + err = vk.RequestUnmarshal("newsfeed.unsubscribe", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/notes.go b/vendor/github.com/SevereCloud/vksdk/v2/api/notes.go new file mode 100644 index 00000000..dd0d4f5e --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/notes.go @@ -0,0 +1,100 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// NotesAdd creates a new note for the current user. +// +// https://vk.com/dev/notes.add +func (vk *VK) NotesAdd(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.add", &response, params) + return +} + +// NotesCreateComment adds a new comment on a note. +// +// https://vk.com/dev/notes.createComment +func (vk *VK) NotesCreateComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.createComment", &response, params) + return +} + +// NotesDelete deletes a note of the current user. +// +// https://vk.com/dev/notes.delete +func (vk *VK) NotesDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.delete", &response, params) + return +} + +// NotesDeleteComment deletes a comment on a note. +// +// https://vk.com/dev/notes.deleteComment +func (vk *VK) NotesDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.deleteComment", &response, params) + return +} + +// NotesEdit edits a note of the current user. +// +// https://vk.com/dev/notes.edit +func (vk *VK) NotesEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.edit", &response, params) + return +} + +// NotesEditComment edits a comment on a note. +// +// https://vk.com/dev/notes.editComment +func (vk *VK) NotesEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.editComment", &response, params) + return +} + +// NotesGetResponse struct. +type NotesGetResponse struct { + Count int `json:"count"` + Items []object.NotesNote `json:"items"` +} + +// NotesGet returns a list of notes created by a user. +// +// https://vk.com/dev/notes.get +func (vk *VK) NotesGet(params Params) (response NotesGetResponse, err error) { + err = vk.RequestUnmarshal("notes.get", &response, params) + return +} + +// NotesGetByIDResponse struct. +type NotesGetByIDResponse object.NotesNote + +// NotesGetByID returns a note by its ID. +// +// https://vk.com/dev/notes.getById +func (vk *VK) NotesGetByID(params Params) (response NotesGetByIDResponse, err error) { + err = vk.RequestUnmarshal("notes.getById", &response, params) + return +} + +// NotesGetCommentsResponse struct. +type NotesGetCommentsResponse struct { + Count int `json:"count"` + Items []object.NotesNoteComment `json:"items"` +} + +// NotesGetComments returns a list of comments on a note. +// +// https://vk.com/dev/notes.getComments +func (vk *VK) NotesGetComments(params Params) (response NotesGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("notes.getComments", &response, params) + return +} + +// NotesRestoreComment restores a deleted comment on a note. +// +// https://vk.com/dev/notes.restoreComment +func (vk *VK) NotesRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notes.restoreComment", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/notifications.go b/vendor/github.com/SevereCloud/vksdk/v2/api/notifications.go new file mode 100644 index 00000000..8630a1d2 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/notifications.go @@ -0,0 +1,54 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// NotificationsGetResponse struct. +type NotificationsGetResponse struct { + Count int `json:"count"` + Items []object.NotificationsNotification `json:"items"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` + Photos []object.PhotosPhoto `json:"photos"` + Videos []object.VideoVideo `json:"videos"` + Apps []object.AppsApp `json:"apps"` + LastViewed int `json:"last_viewed"` + NextFrom string `json:"next_from"` + TTL int `json:"ttl"` +} + +// NotificationsGet returns a list of notifications about other users' feedback to the current user's wall posts. +// +// https://vk.com/dev/notifications.get +func (vk *VK) NotificationsGet(params Params) (response NotificationsGetResponse, err error) { + err = vk.RequestUnmarshal("notifications.get", &response, params) + return +} + +// NotificationsMarkAsViewed resets the counter of new notifications +// about other users' feedback to the current user's wall posts. +// +// https://vk.com/dev/notifications.markAsViewed +func (vk *VK) NotificationsMarkAsViewed(params Params) (response int, err error) { + err = vk.RequestUnmarshal("notifications.markAsViewed", &response, params) + return +} + +// NotificationsSendMessageResponse struct. +type NotificationsSendMessageResponse []struct { + UserID int `json:"user_id"` + Status object.BaseBoolInt `json:"status"` + Error struct { + Code int `json:"code"` + Description string `json:"description"` + } `json:"error"` +} + +// NotificationsSendMessage sends notification to the VK Apps user. +// +// https://vk.com/dev/notifications.sendMessage +func (vk *VK) NotificationsSendMessage(params Params) (response NotificationsSendMessageResponse, err error) { + err = vk.RequestUnmarshal("notifications.sendMessage", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/orders.go b/vendor/github.com/SevereCloud/vksdk/v2/api/orders.go new file mode 100644 index 00000000..35dfac42 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/orders.go @@ -0,0 +1,90 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// OrdersCancelSubscription allows to cancel subscription. +// +// https://vk.com/dev/orders.cancelSubscription +func (vk *VK) OrdersCancelSubscription(params Params) (response int, err error) { + err = vk.RequestUnmarshal("orders.cancelSubscription", &response, params) + return +} + +// OrdersChangeStateResponse struct. +type OrdersChangeStateResponse string // New state + +// OrdersChangeState changes order status. +// +// https://vk.com/dev/orders.changeState +func (vk *VK) OrdersChangeState(params Params) (response OrdersChangeStateResponse, err error) { + err = vk.RequestUnmarshal("orders.changeState", &response, params) + return +} + +// OrdersGetResponse struct. +type OrdersGetResponse []object.OrdersOrder + +// OrdersGet returns a list of orders. +// +// https://vk.com/dev/orders.get +func (vk *VK) OrdersGet(params Params) (response OrdersGetResponse, err error) { + err = vk.RequestUnmarshal("orders.get", &response, params) + return +} + +// OrdersGetAmountResponse struct. +type OrdersGetAmountResponse []object.OrdersAmount + +// OrdersGetAmount returns the cost of votes in the user's consent. +// +// https://vk.com/dev/orders.getAmount +func (vk *VK) OrdersGetAmount(params Params) (response OrdersGetAmountResponse, err error) { + err = vk.RequestUnmarshal("orders.getAmount", &response, params) + return +} + +// OrdersGetByIDResponse struct. +type OrdersGetByIDResponse []object.OrdersOrder + +// OrdersGetByID returns information about orders by their IDs. +// +// https://vk.com/dev/orders.getByID +func (vk *VK) OrdersGetByID(params Params) (response OrdersGetByIDResponse, err error) { + err = vk.RequestUnmarshal("orders.getById", &response, params) + return +} + +// OrdersGetUserSubscriptionByIDResponse struct. +type OrdersGetUserSubscriptionByIDResponse object.OrdersSubscription + +// OrdersGetUserSubscriptionByID allows to get subscription by its ID. +// +// https://vk.com/dev/orders.getUserSubscriptionById +func (vk *VK) OrdersGetUserSubscriptionByID(params Params) (response OrdersGetUserSubscriptionByIDResponse, err error) { + err = vk.RequestUnmarshal("orders.getUserSubscriptionById", &response, params) + return +} + +// OrdersGetUserSubscriptionsResponse struct. +type OrdersGetUserSubscriptionsResponse struct { + Count int `json:"count"` // Total number + Items []object.OrdersSubscription `json:"items"` +} + +// OrdersGetUserSubscriptions allows to get user's active subscriptions. +// +// https://vk.com/dev/orders.getUserSubscriptions +func (vk *VK) OrdersGetUserSubscriptions(params Params) (response OrdersGetUserSubscriptionsResponse, err error) { + err = vk.RequestUnmarshal("orders.getUserSubscriptions", &response, params) + return +} + +// OrdersUpdateSubscription allows to update subscription price. +// +// https://vk.com/dev/orders.updateSubscription +func (vk *VK) OrdersUpdateSubscription(params Params) (response int, err error) { + err = vk.RequestUnmarshal("orders.updateSubscription", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/pages.go b/vendor/github.com/SevereCloud/vksdk/v2/api/pages.go new file mode 100644 index 00000000..7f4a2c25 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/pages.go @@ -0,0 +1,81 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// PagesClearCache allows to clear the cache of particular external pages which may be attached to VK posts. +// +// https://vk.com/dev/pages.clearCache +func (vk *VK) PagesClearCache(params Params) (response int, err error) { + err = vk.RequestUnmarshal("pages.clearCache", &response, params) + return +} + +// PagesGetResponse struct. +type PagesGetResponse object.PagesWikipageFull + +// PagesGet returns information about a wiki page. +// +// https://vk.com/dev/pages.get +func (vk *VK) PagesGet(params Params) (response PagesGetResponse, err error) { + err = vk.RequestUnmarshal("pages.get", &response, params) + return +} + +// PagesGetHistoryResponse struct. +type PagesGetHistoryResponse []object.PagesWikipageHistory + +// PagesGetHistory returns a list of all previous versions of a wiki page. +// +// https://vk.com/dev/pages.getHistory +func (vk *VK) PagesGetHistory(params Params) (response PagesGetHistoryResponse, err error) { + err = vk.RequestUnmarshal("pages.getHistory", &response, params) + return +} + +// PagesGetTitlesResponse struct. +type PagesGetTitlesResponse []object.PagesWikipageFull + +// PagesGetTitles returns a list of wiki pages in a group. +// +// https://vk.com/dev/pages.getTitles +func (vk *VK) PagesGetTitles(params Params) (response PagesGetTitlesResponse, err error) { + err = vk.RequestUnmarshal("pages.getTitles", &response, params) + return +} + +// PagesGetVersionResponse struct. +type PagesGetVersionResponse object.PagesWikipageFull + +// PagesGetVersion returns the text of one of the previous versions of a wiki page. +// +// https://vk.com/dev/pages.getVersion +func (vk *VK) PagesGetVersion(params Params) (response PagesGetVersionResponse, err error) { + err = vk.RequestUnmarshal("pages.getVersion", &response, params) + return +} + +// PagesParseWiki returns HTML representation of the wiki markup. +// +// https://vk.com/dev/pages.parseWiki +func (vk *VK) PagesParseWiki(params Params) (response string, err error) { + err = vk.RequestUnmarshal("pages.parseWiki", &response, params) + return +} + +// PagesSave saves the text of a wiki page. +// +// https://vk.com/dev/pages.save +func (vk *VK) PagesSave(params Params) (response int, err error) { + err = vk.RequestUnmarshal("pages.save", &response, params) + return +} + +// PagesSaveAccess saves modified read and edit access settings for a wiki page. +// +// https://vk.com/dev/pages.saveAccess +func (vk *VK) PagesSaveAccess(params Params) (response int, err error) { + err = vk.RequestUnmarshal("pages.saveAccess", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/photos.go b/vendor/github.com/SevereCloud/vksdk/v2/api/photos.go new file mode 100644 index 00000000..714705b4 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/photos.go @@ -0,0 +1,613 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// PhotosConfirmTag confirms a tag on a photo. +// +// https://vk.com/dev/photos.confirmTag +func (vk *VK) PhotosConfirmTag(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.confirmTag", &response, params) + return +} + +// PhotosCopy allows to copy a photo to the "Saved photos" album. +// +// https://vk.com/dev/photos.copy +func (vk *VK) PhotosCopy(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.copy", &response, params) + return +} + +// PhotosCreateAlbumResponse struct. +type PhotosCreateAlbumResponse object.PhotosPhotoAlbumFull + +// PhotosCreateAlbum creates an empty photo album. +// +// https://vk.com/dev/photos.createAlbum +func (vk *VK) PhotosCreateAlbum(params Params) (response PhotosCreateAlbumResponse, err error) { + err = vk.RequestUnmarshal("photos.createAlbum", &response, params) + return +} + +// PhotosCreateComment adds a new comment on the photo. +// +// https://vk.com/dev/photos.createComment +func (vk *VK) PhotosCreateComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.createComment", &response, params) + return +} + +// PhotosDelete deletes a photo. +// +// https://vk.com/dev/photos.delete +func (vk *VK) PhotosDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.delete", &response, params) + return +} + +// PhotosDeleteAlbum deletes a photo album belonging to the current user. +// +// https://vk.com/dev/photos.deleteAlbum +func (vk *VK) PhotosDeleteAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.deleteAlbum", &response, params) + return +} + +// PhotosDeleteComment deletes a comment on the photo. +// +// https://vk.com/dev/photos.deleteComment +func (vk *VK) PhotosDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.deleteComment", &response, params) + return +} + +// PhotosEdit edits the caption of a photo. +// +// https://vk.com/dev/photos.edit +func (vk *VK) PhotosEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.edit", &response, params) + return +} + +// PhotosEditAlbum edits information about a photo album. +// +// https://vk.com/dev/photos.editAlbum +func (vk *VK) PhotosEditAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.editAlbum", &response, params) + return +} + +// PhotosEditComment edits a comment on a photo. +// +// https://vk.com/dev/photos.editComment +func (vk *VK) PhotosEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.editComment", &response, params) + return +} + +// PhotosGetResponse struct. +type PhotosGetResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhoto `json:"items"` +} + +// PhotosGet returns a list of a user's or community's photos. +// +// extended=0 +// +// https://vk.com/dev/photos.get +func (vk *VK) PhotosGet(params Params) (response PhotosGetResponse, err error) { + err = vk.RequestUnmarshal("photos.get", &response, params, Params{"extended": false}) + + return +} + +// PhotosGetExtendedResponse struct. +type PhotosGetExtendedResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoFull `json:"items"` +} + +// PhotosGetExtended returns a list of a user's or community's photos. +// +// extended=1 +// +// https://vk.com/dev/photos.get +func (vk *VK) PhotosGetExtended(params Params) (response PhotosGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("photos.get", &response, params, Params{"extended": true}) + + return +} + +// PhotosGetAlbumsResponse struct. +type PhotosGetAlbumsResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoAlbumFull `json:"items"` +} + +// PhotosGetAlbums returns a list of a user's or community's photo albums. +// +// https://vk.com/dev/photos.getAlbums +func (vk *VK) PhotosGetAlbums(params Params) (response PhotosGetAlbumsResponse, err error) { + err = vk.RequestUnmarshal("photos.getAlbums", &response, params) + return +} + +// PhotosGetAlbumsCount returns the number of photo albums belonging to a user or community. +// +// https://vk.com/dev/photos.getAlbumsCount +func (vk *VK) PhotosGetAlbumsCount(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.getAlbumsCount", &response, params) + return +} + +// PhotosGetAllResponse struct. +type PhotosGetAllResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoXtrRealOffset `json:"items"` + More object.BaseBoolInt `json:"more"` // Information whether next page is presented +} + +// PhotosGetAll returns a list of photos belonging to a user or community, in reverse chronological order. +// +// extended=0 +// +// https://vk.com/dev/photos.getAll +func (vk *VK) PhotosGetAll(params Params) (response PhotosGetAllResponse, err error) { + err = vk.RequestUnmarshal("photos.getAll", &response, params, Params{"extended": false}) + + return +} + +// PhotosGetAllExtendedResponse struct. +type PhotosGetAllExtendedResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoFullXtrRealOffset `json:"items"` + More object.BaseBoolInt `json:"more"` // Information whether next page is presented +} + +// PhotosGetAllExtended returns a list of photos belonging to a user or community, in reverse chronological order. +// +// extended=1 +// +// https://vk.com/dev/photos.getAll +func (vk *VK) PhotosGetAllExtended(params Params) (response PhotosGetAllExtendedResponse, err error) { + err = vk.RequestUnmarshal("photos.getAll", &response, params, Params{"extended": true}) + + return +} + +// PhotosGetAllCommentsResponse struct. +type PhotosGetAllCommentsResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosCommentXtrPid `json:"items"` +} + +// PhotosGetAllComments returns a list of comments on a specific +// photo album or all albums of the user sorted in reverse chronological order. +// +// https://vk.com/dev/photos.getAllComments +func (vk *VK) PhotosGetAllComments(params Params) (response PhotosGetAllCommentsResponse, err error) { + err = vk.RequestUnmarshal("photos.getAllComments", &response, params) + return +} + +// PhotosGetByIDResponse struct. +type PhotosGetByIDResponse []object.PhotosPhoto + +// PhotosGetByID returns information about photos by their IDs. +// +// extended=0 +// +// https://vk.com/dev/photos.getById +func (vk *VK) PhotosGetByID(params Params) (response PhotosGetByIDResponse, err error) { + err = vk.RequestUnmarshal("photos.getById", &response, params, Params{"extended": false}) + + return +} + +// PhotosGetByIDExtendedResponse struct. +type PhotosGetByIDExtendedResponse []object.PhotosPhotoFull + +// PhotosGetByIDExtended returns information about photos by their IDs. +// +// extended=1 +// +// https://vk.com/dev/photos.getById +func (vk *VK) PhotosGetByIDExtended(params Params) (response PhotosGetByIDExtendedResponse, err error) { + err = vk.RequestUnmarshal("photos.getById", &response, params, Params{"extended": true}) + + return +} + +// PhotosGetChatUploadServerResponse struct. +type PhotosGetChatUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PhotosGetChatUploadServer returns an upload link for chat cover pictures. +// +// https://vk.com/dev/photos.getChatUploadServer +func (vk *VK) PhotosGetChatUploadServer(params Params) (response PhotosGetChatUploadServerResponse, err error) { + err = vk.RequestUnmarshal("photos.getChatUploadServer", &response, params) + return +} + +// PhotosGetCommentsResponse struct. +type PhotosGetCommentsResponse struct { + Count int `json:"count"` // Total number + RealOffset int `json:"real_offset"` // Real offset of the comments + Items []object.WallWallComment `json:"items"` +} + +// PhotosGetComments returns a list of comments on a photo. +// +// extended=0 +// +// https://vk.com/dev/photos.getComments +func (vk *VK) PhotosGetComments(params Params) (response PhotosGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("photos.getComments", &response, params, Params{"extended": false}) + + return +} + +// PhotosGetCommentsExtendedResponse struct. +type PhotosGetCommentsExtendedResponse struct { + Count int `json:"count"` // Total number + RealOffset int `json:"real_offset"` // Real offset of the comments + Items []object.WallWallComment `json:"items"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` +} + +// PhotosGetCommentsExtended returns a list of comments on a photo. +// +// extended=1 +// +// https://vk.com/dev/photos.getComments +func (vk *VK) PhotosGetCommentsExtended(params Params) (response PhotosGetCommentsExtendedResponse, err error) { + err = vk.RequestUnmarshal("photos.getComments", &response, params, Params{"extended": true}) + + return +} + +// PhotosGetMarketAlbumUploadServerResponse struct. +type PhotosGetMarketAlbumUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PhotosGetMarketAlbumUploadServer returns the server address for market album photo upload. +// +// https://vk.com/dev/photos.getMarketAlbumUploadServer +func (vk *VK) PhotosGetMarketAlbumUploadServer(params Params) ( + response PhotosGetMarketAlbumUploadServerResponse, + err error, +) { + err = vk.RequestUnmarshal("photos.getMarketAlbumUploadServer", &response, params) + return +} + +// PhotosGetMarketUploadServerResponse struct. +type PhotosGetMarketUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PhotosGetMarketUploadServer returns the server address for market photo upload. +// +// https://vk.com/dev/photos.getMarketUploadServer +func (vk *VK) PhotosGetMarketUploadServer(params Params) (response PhotosGetMarketUploadServerResponse, err error) { + err = vk.RequestUnmarshal("photos.getMarketUploadServer", &response, params) + return +} + +// PhotosGetMessagesUploadServerResponse struct. +type PhotosGetMessagesUploadServerResponse struct { + AlbumID int `json:"album_id"` + UploadURL string `json:"upload_url"` + UserID int `json:"user_id,omitempty"` + GroupID int `json:"group_id,omitempty"` +} + +// PhotosGetMessagesUploadServer returns the server address for photo upload onto a messages. +// +// https://vk.com/dev/photos.getMessagesUploadServer +func (vk *VK) PhotosGetMessagesUploadServer(params Params) (response PhotosGetMessagesUploadServerResponse, err error) { + err = vk.RequestUnmarshal("photos.getMessagesUploadServer", &response, params) + return +} + +// PhotosGetNewTagsResponse struct. +type PhotosGetNewTagsResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoXtrTagInfo `json:"items"` +} + +// PhotosGetNewTags returns a list of photos with tags that have not been viewed. +// +// https://vk.com/dev/photos.getNewTags +func (vk *VK) PhotosGetNewTags(params Params) (response PhotosGetNewTagsResponse, err error) { + err = vk.RequestUnmarshal("photos.getNewTags", &response, params) + return +} + +// PhotosGetOwnerCoverPhotoUploadServerResponse struct. +type PhotosGetOwnerCoverPhotoUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PhotosGetOwnerCoverPhotoUploadServer receives server address for uploading community cover. +// +// https://vk.com/dev/photos.getOwnerCoverPhotoUploadServer +func (vk *VK) PhotosGetOwnerCoverPhotoUploadServer(params Params) ( + response PhotosGetOwnerCoverPhotoUploadServerResponse, + err error, +) { + err = vk.RequestUnmarshal("photos.getOwnerCoverPhotoUploadServer", &response, params) + return +} + +// PhotosGetOwnerPhotoUploadServerResponse struct. +type PhotosGetOwnerPhotoUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PhotosGetOwnerPhotoUploadServer returns an upload server address for a +// profile or community photo. +// +// https://vk.com/dev/photos.getOwnerPhotoUploadServer +func (vk *VK) PhotosGetOwnerPhotoUploadServer(params Params) ( + response PhotosGetOwnerPhotoUploadServerResponse, + err error, +) { + err = vk.RequestUnmarshal("photos.getOwnerPhotoUploadServer", &response, params) + return +} + +// PhotosGetTagsResponse struct. +type PhotosGetTagsResponse []object.PhotosPhotoTag + +// PhotosGetTags returns a list of tags on a photo. +// +// https://vk.com/dev/photos.getTags +func (vk *VK) PhotosGetTags(params Params) (response PhotosGetTagsResponse, err error) { + err = vk.RequestUnmarshal("photos.getTags", &response, params) + return +} + +// PhotosGetUploadServerResponse struct. +type PhotosGetUploadServerResponse object.PhotosPhotoUpload + +// PhotosGetUploadServer returns the server address for photo upload. +// +// https://vk.com/dev/photos.getUploadServer +func (vk *VK) PhotosGetUploadServer(params Params) (response PhotosGetUploadServerResponse, err error) { + err = vk.RequestUnmarshal("photos.getUploadServer", &response, params) + return +} + +// PhotosGetUserPhotosResponse struct. +type PhotosGetUserPhotosResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhoto `json:"items"` +} + +// PhotosGetUserPhotos returns a list of photos in which a user is tagged. +// +// extended=0 +// +// https://vk.com/dev/photos.getUserPhotos +func (vk *VK) PhotosGetUserPhotos(params Params) (response PhotosGetUserPhotosResponse, err error) { + err = vk.RequestUnmarshal("photos.getUserPhotos", &response, params, Params{"extended": false}) + + return +} + +// PhotosGetUserPhotosExtendedResponse struct. +type PhotosGetUserPhotosExtendedResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoFull `json:"items"` +} + +// PhotosGetUserPhotosExtended returns a list of photos in which a user is tagged. +// +// extended=1 +// +// https://vk.com/dev/photos.getUserPhotos +func (vk *VK) PhotosGetUserPhotosExtended(params Params) (response PhotosGetUserPhotosExtendedResponse, err error) { + err = vk.RequestUnmarshal("photos.getUserPhotos", &response, params, Params{"extended": true}) + + return +} + +// PhotosGetWallUploadServerResponse struct. +type PhotosGetWallUploadServerResponse object.PhotosPhotoUpload + +// PhotosGetWallUploadServer returns the server address for photo upload onto a user's wall. +// +// https://vk.com/dev/photos.getWallUploadServer +func (vk *VK) PhotosGetWallUploadServer(params Params) (response PhotosGetWallUploadServerResponse, err error) { + err = vk.RequestUnmarshal("photos.getWallUploadServer", &response, params) + return +} + +// PhotosMakeCover makes a photo into an album cover. +// +// https://vk.com/dev/photos.makeCover +func (vk *VK) PhotosMakeCover(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.makeCover", &response, params) + return +} + +// PhotosMove a photo from one album to another. +// +// https://vk.com/dev/photos.moveMoves +func (vk *VK) PhotosMove(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.move", &response, params) + return +} + +// PhotosPutTag adds a tag on the photo. +// +// https://vk.com/dev/photos.putTag +func (vk *VK) PhotosPutTag(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.putTag", &response, params) + return +} + +// PhotosRemoveTag removes a tag from a photo. +// +// https://vk.com/dev/photos.removeTag +func (vk *VK) PhotosRemoveTag(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.removeTag", &response, params) + return +} + +// PhotosReorderAlbums reorders the album in the list of user albums. +// +// https://vk.com/dev/photos.reorderAlbums +func (vk *VK) PhotosReorderAlbums(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.reorderAlbums", &response, params) + return +} + +// PhotosReorderPhotos reorders the photo in the list of photos of the user album. +// +// https://vk.com/dev/photos.reorderPhotos +func (vk *VK) PhotosReorderPhotos(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.reorderPhotos", &response, params) + return +} + +// PhotosReport reports (submits a complaint about) a photo. +// +// https://vk.com/dev/photos.report +func (vk *VK) PhotosReport(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.report", &response, params) + return +} + +// PhotosReportComment reports (submits a complaint about) a comment on a photo. +// +// https://vk.com/dev/photos.reportComment +func (vk *VK) PhotosReportComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.reportComment", &response, params) + return +} + +// PhotosRestore restores a deleted photo. +// +// https://vk.com/dev/photos.restore +func (vk *VK) PhotosRestore(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.restore", &response, params) + return +} + +// PhotosRestoreComment restores a deleted comment on a photo. +// +// https://vk.com/dev/photos.restoreComment +func (vk *VK) PhotosRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("photos.restoreComment", &response, params) + return +} + +// PhotosSaveResponse struct. +type PhotosSaveResponse []object.PhotosPhoto + +// PhotosSave saves photos after successful uploading. +// +// https://vk.com/dev/photos.save +func (vk *VK) PhotosSave(params Params) (response PhotosSaveResponse, err error) { + err = vk.RequestUnmarshal("photos.save", &response, params) + return +} + +// PhotosSaveMarketAlbumPhotoResponse struct. +type PhotosSaveMarketAlbumPhotoResponse []object.PhotosPhoto + +// PhotosSaveMarketAlbumPhoto photo Saves market album photos after successful uploading. +// +// https://vk.com/dev/photos.saveMarketAlbumPhoto +func (vk *VK) PhotosSaveMarketAlbumPhoto(params Params) (response PhotosSaveMarketAlbumPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveMarketAlbumPhoto", &response, params) + return +} + +// PhotosSaveMarketPhotoResponse struct. +type PhotosSaveMarketPhotoResponse []object.PhotosPhoto + +// PhotosSaveMarketPhoto saves market photos after successful uploading. +// +// https://vk.com/dev/photos.saveMarketPhoto +func (vk *VK) PhotosSaveMarketPhoto(params Params) (response PhotosSaveMarketPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveMarketPhoto", &response, params) + return +} + +// PhotosSaveMessagesPhotoResponse struct. +type PhotosSaveMessagesPhotoResponse []object.PhotosPhoto + +// PhotosSaveMessagesPhoto saves a photo after being successfully. +// +// https://vk.com/dev/photos.saveMessagesPhoto +func (vk *VK) PhotosSaveMessagesPhoto(params Params) (response PhotosSaveMessagesPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveMessagesPhoto", &response, params) + return +} + +// PhotosSaveOwnerCoverPhotoResponse struct. +type PhotosSaveOwnerCoverPhotoResponse struct { + Images []object.PhotosImage `json:"images"` +} + +// PhotosSaveOwnerCoverPhoto saves cover photo after successful uploading. +// +// https://vk.com/dev/photos.saveOwnerCoverPhoto +func (vk *VK) PhotosSaveOwnerCoverPhoto(params Params) (response PhotosSaveOwnerCoverPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveOwnerCoverPhoto", &response, params) + return +} + +// PhotosSaveOwnerPhotoResponse struct. +type PhotosSaveOwnerPhotoResponse struct { + PhotoHash string `json:"photo_hash"` + PhotoSrc string `json:"photo_src"` + PhotoSrcBig string `json:"photo_src_big"` + PhotoSrcSmall string `json:"photo_src_small"` + Saved int `json:"saved"` + PostID int `json:"post_id"` +} + +// PhotosSaveOwnerPhoto saves a profile or community photo. +// +// https://vk.com/dev/photos.saveOwnerPhoto +func (vk *VK) PhotosSaveOwnerPhoto(params Params) (response PhotosSaveOwnerPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveOwnerPhoto", &response, params) + return +} + +// PhotosSaveWallPhotoResponse struct. +type PhotosSaveWallPhotoResponse []object.PhotosPhoto + +// PhotosSaveWallPhoto saves a photo to a user's or community's wall after being uploaded. +// +// https://vk.com/dev/photos.saveWallPhoto +func (vk *VK) PhotosSaveWallPhoto(params Params) (response PhotosSaveWallPhotoResponse, err error) { + err = vk.RequestUnmarshal("photos.saveWallPhoto", &response, params) + return +} + +// PhotosSearchResponse struct. +type PhotosSearchResponse struct { + Count int `json:"count"` // Total number + Items []object.PhotosPhotoFull `json:"items"` +} + +// PhotosSearch returns a list of photos. +// +// https://vk.com/dev/photos.search +func (vk *VK) PhotosSearch(params Params) (response PhotosSearchResponse, err error) { + err = vk.RequestUnmarshal("photos.search", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/podcasts.go b/vendor/github.com/SevereCloud/vksdk/v2/api/podcasts.go new file mode 100644 index 00000000..8534d0fc --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/podcasts.go @@ -0,0 +1,179 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// PodcastsGetCatalogResponse struct. +type PodcastsGetCatalogResponse struct { + Items []object.PodcastsItem `json:"items"` +} + +// PodcastsGetCatalog method. +// +// extended=0 +// +// https://vk.com/dev/podcasts.getCatalog +func (vk *VK) PodcastsGetCatalog(params Params) (response PodcastsGetCatalogResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getCatalog", &response, params, Params{"extended": false}) + + return +} + +// PodcastsGetCatalogExtendedResponse struct. +type PodcastsGetCatalogExtendedResponse struct { + Items []object.PodcastsItem `json:"items"` + object.ExtendedResponse +} + +// PodcastsGetCatalogExtended method. +// +// extended=1 +// +// https://vk.com/dev/podcasts.getCatalog +func (vk *VK) PodcastsGetCatalogExtended(params Params) (response PodcastsGetCatalogExtendedResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getCatalog", &response, params, Params{"extended": true}) + + return +} + +// PodcastsGetCategoriesResponse struct. +type PodcastsGetCategoriesResponse []object.PodcastsCategory + +// PodcastsGetCategories method. +// +// https://vk.com/dev/podcasts.getCategories +func (vk *VK) PodcastsGetCategories(params Params) (response PodcastsGetCategoriesResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getCategories", &response, params) + return +} + +// PodcastsGetEpisodesResponse struct. +type PodcastsGetEpisodesResponse struct { + Count int `json:"count"` + Items []object.PodcastsEpisode `json:"items"` +} + +// PodcastsGetEpisodes method. +// +// https://vk.com/dev/podcasts.getEpisodes +func (vk *VK) PodcastsGetEpisodes(params Params) (response PodcastsGetEpisodesResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getEpisodes", &response, params) + return +} + +// PodcastsGetFeedResponse struct. +type PodcastsGetFeedResponse struct { + Items []object.PodcastsEpisode `json:"items"` + NextFrom string `json:"next_from"` +} + +// PodcastsGetFeed method. +// +// extended=0 +// +// https://vk.com/dev/podcasts.getFeed +func (vk *VK) PodcastsGetFeed(params Params) (response PodcastsGetFeedResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getFeed", &response, params, Params{"extended": false}) + + return +} + +// PodcastsGetFeedExtendedResponse struct. +type PodcastsGetFeedExtendedResponse struct { + Items []object.PodcastsEpisode `json:"items"` + NextFrom string `json:"next_from"` + object.ExtendedResponse +} + +// PodcastsGetFeedExtended method. +// +// extended=1 +// +// https://vk.com/dev/podcasts.getFeed +func (vk *VK) PodcastsGetFeedExtended(params Params) (response PodcastsGetFeedExtendedResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getFeed", &response, params, Params{"extended": true}) + + return +} + +// PodcastsGetStartPageResponse struct. +type PodcastsGetStartPageResponse struct { + Order []string `json:"order"` + InProgress []object.PodcastsEpisode `json:"in_progress"` + Bookmarks []object.PodcastsEpisode `json:"bookmarks"` + Articles []object.Article `json:"articles"` + StaticHowTo []bool `json:"static_how_to"` + FriendsLiked []object.PodcastsEpisode `json:"friends_liked"` + Subscriptions []object.PodcastsEpisode `json:"subscriptions"` + CategoriesList []object.PodcastsCategory `json:"categories_list"` + RecommendedEpisodes []object.PodcastsEpisode `json:"recommended_episodes"` + Catalog []struct { + Category object.PodcastsCategory `json:"category"` + Items []object.PodcastsItem `json:"items"` + } `json:"catalog"` +} + +// PodcastsGetStartPage method. +// +// extended=0 +// +// https://vk.com/dev/podcasts.getStartPage +func (vk *VK) PodcastsGetStartPage(params Params) (response PodcastsGetStartPageResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getStartPage", &response, params, Params{"extended": false}) + + return +} + +// PodcastsGetStartPageExtendedResponse struct. +type PodcastsGetStartPageExtendedResponse struct { + Order []string `json:"order"` + InProgress []object.PodcastsEpisode `json:"in_progress"` + Bookmarks []object.PodcastsEpisode `json:"bookmarks"` + Articles []object.Article `json:"articles"` + StaticHowTo []bool `json:"static_how_to"` + FriendsLiked []object.PodcastsEpisode `json:"friends_liked"` + Subscriptions []object.PodcastsEpisode `json:"subscriptions"` + CategoriesList []object.PodcastsCategory `json:"categories_list"` + RecommendedEpisodes []object.PodcastsEpisode `json:"recommended_episodes"` + Catalog []struct { + Category object.PodcastsCategory `json:"category"` + Items []object.PodcastsItem `json:"items"` + } `json:"catalog"` + object.ExtendedResponse +} + +// PodcastsGetStartPageExtended method. +// +// extended=1 +// +// https://vk.com/dev/podcasts.getStartPage +func (vk *VK) PodcastsGetStartPageExtended(params Params) (response PodcastsGetStartPageExtendedResponse, err error) { + err = vk.RequestUnmarshal("podcasts.getStartPage", &response, params, Params{"extended": true}) + + return +} + +// PodcastsMarkAsListened method. +// +// https://vk.com/dev/podcasts.markAsListened +func (vk *VK) PodcastsMarkAsListened(params Params) (response int, err error) { + err = vk.RequestUnmarshal("podcasts.markAsListened", &response, params) + return +} + +// PodcastsSubscribe method. +// +// https://vk.com/dev/podcasts.subscribe +func (vk *VK) PodcastsSubscribe(params Params) (response int, err error) { + err = vk.RequestUnmarshal("podcasts.subscribe", &response, params) + return +} + +// PodcastsUnsubscribe method. +// +// https://vk.com/dev/podcasts.unsubscribe +func (vk *VK) PodcastsUnsubscribe(params Params) (response int, err error) { + err = vk.RequestUnmarshal("podcasts.unsubscribe", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/polls.go b/vendor/github.com/SevereCloud/vksdk/v2/api/polls.go new file mode 100644 index 00000000..968b242e --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/polls.go @@ -0,0 +1,106 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import "github.com/SevereCloud/vksdk/v2/object" + +// PollsAddVote adds the current user's vote to the selected answer in the poll. +// +// https://vk.com/dev/polls.addVote +func (vk *VK) PollsAddVote(params Params) (response int, err error) { + err = vk.RequestUnmarshal("polls.addVote", &response, params) + return +} + +// PollsCreateResponse struct. +type PollsCreateResponse object.PollsPoll + +// PollsCreate creates polls that can be attached to the users' or communities' posts. +// +// https://vk.com/dev/polls.create +func (vk *VK) PollsCreate(params Params) (response PollsCreateResponse, err error) { + err = vk.RequestUnmarshal("polls.create", &response, params) + return +} + +// PollsDeleteVote deletes the current user's vote from the selected answer in the poll. +// +// https://vk.com/dev/polls.deleteVote +func (vk *VK) PollsDeleteVote(params Params) (response int, err error) { + err = vk.RequestUnmarshal("polls.deleteVote", &response, params) + return +} + +// PollsEdit edits created polls. +// +// https://vk.com/dev/polls.edit +func (vk *VK) PollsEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("polls.edit", &response, params) + return +} + +// PollsGetBackgroundsResponse struct. +type PollsGetBackgroundsResponse []object.PollsBackground + +// PollsGetBackgrounds return default backgrounds for polls. +// +// https://vk.com/dev/polls.getBackgrounds +func (vk *VK) PollsGetBackgrounds(params Params) (response PollsGetBackgroundsResponse, err error) { + err = vk.RequestUnmarshal("polls.getBackgrounds", &response, params) + return +} + +// PollsGetByIDResponse struct. +type PollsGetByIDResponse object.PollsPoll + +// PollsGetByID returns detailed information about a poll by its ID. +// +// https://vk.com/dev/polls.getById +func (vk *VK) PollsGetByID(params Params) (response PollsGetByIDResponse, err error) { + err = vk.RequestUnmarshal("polls.getById", &response, params) + return +} + +// PollsGetPhotoUploadServerResponse struct. +type PollsGetPhotoUploadServerResponse struct { + UploadURL string `json:"upload_url"` +} + +// PollsGetPhotoUploadServer returns a URL for uploading a photo to a poll. +// +// https://vk.com/dev/polls.getPhotoUploadServer +func (vk *VK) PollsGetPhotoUploadServer(params Params) (response PollsGetPhotoUploadServerResponse, err error) { + err = vk.RequestUnmarshal("polls.getPhotoUploadServer", &response, params) + return +} + +// PollsGetVotersResponse struct. +type PollsGetVotersResponse []object.PollsVoters + +// PollsGetVoters returns a list of IDs of users who selected specific answers in the poll. +// +// https://vk.com/dev/polls.getVoters +func (vk *VK) PollsGetVoters(params Params) (response PollsGetVotersResponse, err error) { + err = vk.RequestUnmarshal("polls.getVoters", &response, params) + return +} + +// PollsGetVotersFieldsResponse struct. +type PollsGetVotersFieldsResponse []object.PollsVotersFields + +// PollsGetVotersFields returns a list of IDs of users who selected specific answers in the poll. +// +// https://vk.com/dev/polls.getVoters +func (vk *VK) PollsGetVotersFields(params Params) (response PollsGetVotersFieldsResponse, err error) { + err = vk.RequestUnmarshal("polls.getVoters", &response, params) + return +} + +// PollsSavePhotoResponse struct. +type PollsSavePhotoResponse object.PollsPhoto + +// PollsSavePhoto allows to save poll's uploaded photo. +// +// https://vk.com/dev/polls.savePhoto +func (vk *VK) PollsSavePhoto(params Params) (response PollsSavePhotoResponse, err error) { + err = vk.RequestUnmarshal("polls.savePhoto", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/prettycards.go b/vendor/github.com/SevereCloud/vksdk/v2/api/prettycards.go new file mode 100644 index 00000000..c51f5efa --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/prettycards.go @@ -0,0 +1,79 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import "github.com/SevereCloud/vksdk/v2/object" + +// PrettyCardsCreateResponse struct. +type PrettyCardsCreateResponse struct { + OwnerID int `json:"owner_id"` // Owner ID of created pretty card + CardID string `json:"card_id"` // Card ID of created pretty card +} + +// PrettyCardsCreate method. +// +// https://vk.com/dev/prettyCards.create +func (vk *VK) PrettyCardsCreate(params Params) (response PrettyCardsCreateResponse, err error) { + err = vk.RequestUnmarshal("prettyCards.create", &response, params) + return +} + +// PrettyCardsDeleteResponse struct. +type PrettyCardsDeleteResponse struct { + OwnerID int `json:"owner_id"` // Owner ID of created pretty card + CardID string `json:"card_id"` // Card ID of created pretty card + Error string `json:"error"` // Error reason if error happened +} + +// PrettyCardsDelete method. +// +// https://vk.com/dev/prettyCards.delete +func (vk *VK) PrettyCardsDelete(params Params) (response PrettyCardsDeleteResponse, err error) { + err = vk.RequestUnmarshal("prettyCards.delete", &response, params) + return +} + +// PrettyCardsEditResponse struct. +type PrettyCardsEditResponse struct { + OwnerID int `json:"owner_id"` // Owner ID of created pretty card + CardID string `json:"card_id"` // Card ID of created pretty card +} + +// PrettyCardsEdit method. +// +// https://vk.com/dev/prettyCards.edit +func (vk *VK) PrettyCardsEdit(params Params) (response PrettyCardsEditResponse, err error) { + err = vk.RequestUnmarshal("prettyCards.edit", &response, params) + return +} + +// PrettyCardsGetResponse struct. +type PrettyCardsGetResponse struct { + Count int `json:"count"` // Total number + Items []object.PrettyCardsPrettyCard `json:"items"` +} + +// PrettyCardsGet method. +// +// https://vk.com/dev/prettyCards.get +func (vk *VK) PrettyCardsGet(params Params) (response PrettyCardsGetResponse, err error) { + err = vk.RequestUnmarshal("prettyCards.get", &response, params) + return +} + +// PrettyCardsGetByIDResponse struct. +type PrettyCardsGetByIDResponse []object.PrettyCardsPrettyCard + +// PrettyCardsGetByID method. +// +// https://vk.com/dev/prettyCards.getById +func (vk *VK) PrettyCardsGetByID(params Params) (response PrettyCardsGetByIDResponse, err error) { + err = vk.RequestUnmarshal("prettyCards.getById", &response, params) + return +} + +// PrettyCardsGetUploadURL method. +// +// https://vk.com/dev/prettyCards.getUploadURL +func (vk *VK) PrettyCardsGetUploadURL(params Params) (response string, err error) { + err = vk.RequestUnmarshal("prettyCards.getUploadURL", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/search.go b/vendor/github.com/SevereCloud/vksdk/v2/api/search.go new file mode 100644 index 00000000..0d9f9549 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/search.go @@ -0,0 +1,17 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import "github.com/SevereCloud/vksdk/v2/object" + +// SearchGetHintsResponse struct. +type SearchGetHintsResponse struct { + Count int `json:"count"` + Items []object.SearchHint `json:"items"` +} + +// SearchGetHints allows the programmer to do a quick search for any substring. +// +// https://vk.com/dev/search.getHints +func (vk *VK) SearchGetHints(params Params) (response SearchGetHintsResponse, err error) { + err = vk.RequestUnmarshal("search.getHints", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/secure.go b/vendor/github.com/SevereCloud/vksdk/v2/api/secure.go new file mode 100644 index 00000000..b5637f24 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/secure.go @@ -0,0 +1,110 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// SecureAddAppEventResponse struct. +type SecureAddAppEventResponse int // FIXME: not found documentation. https://github.com/VKCOM/vk-api-schema/issues/98 + +// SecureAddAppEvent adds user activity information to an application. +// +// https://vk.com/dev/secure.addAppEvent +func (vk *VK) SecureAddAppEvent(params Params) (response SecureAddAppEventResponse, err error) { + err = vk.RequestUnmarshal("secure.addAppEvent", &response, params) + return +} + +// SecureCheckTokenResponse struct. +type SecureCheckTokenResponse object.SecureTokenChecked + +// SecureCheckToken checks the user authentication in IFrame and Flash apps using the access_token parameter. +// +// https://vk.com/dev/secure.checkToken +func (vk *VK) SecureCheckToken(params Params) (response SecureCheckTokenResponse, err error) { + err = vk.RequestUnmarshal("secure.checkToken", &response, params) + return +} + +// SecureGetAppBalance returns payment balance of the application in hundredth of a vote. +// +// https://vk.com/dev/secure.getAppBalance +func (vk *VK) SecureGetAppBalance(params Params) (response int, err error) { + err = vk.RequestUnmarshal("secure.getAppBalance", &response, params) + return +} + +// SecureGetSMSHistoryResponse struct. +type SecureGetSMSHistoryResponse []object.SecureSmsNotification + +// SecureGetSMSHistory shows a list of SMS notifications sent by the +// application using secure.sendSMSNotification method. +// +// https://vk.com/dev/secure.getSMSHistory +func (vk *VK) SecureGetSMSHistory(params Params) (response SecureGetSMSHistoryResponse, err error) { + err = vk.RequestUnmarshal("secure.getSMSHistory", &response, params) + return +} + +// SecureGetTransactionsHistoryResponse struct. +type SecureGetTransactionsHistoryResponse []object.SecureTransaction + +// SecureGetTransactionsHistory shows history of votes transaction between users and the application. +// +// https://vk.com/dev/secure.getTransactionsHistory +func (vk *VK) SecureGetTransactionsHistory(params Params) (response SecureGetTransactionsHistoryResponse, err error) { + err = vk.RequestUnmarshal("secure.getTransactionsHistory", &response, params) + return +} + +// SecureGetUserLevelResponse struct. +type SecureGetUserLevelResponse []object.SecureLevel + +// SecureGetUserLevel returns one of the previously set game levels of one or more users in the application. +// +// https://vk.com/dev/secure.getUserLevel +func (vk *VK) SecureGetUserLevel(params Params) (response SecureGetUserLevelResponse, err error) { + err = vk.RequestUnmarshal("secure.getUserLevel", &response, params) + return +} + +// SecureGiveEventStickerResponse struct. +type SecureGiveEventStickerResponse []struct { + UserID int `json:"user_id"` + Status string `json:"status"` +} + +// SecureGiveEventSticker method. +// +// https://vk.com/dev/secure.giveEventSticker +func (vk *VK) SecureGiveEventSticker(params Params) (response SecureGiveEventStickerResponse, err error) { + err = vk.RequestUnmarshal("secure.giveEventSticker", &response, params) + return +} + +// SecureSendNotificationResponse struct. +type SecureSendNotificationResponse []int // User ID + +// SecureSendNotification sends notification to the user. +// +// https://vk.com/dev/secure.sendNotification +func (vk *VK) SecureSendNotification(params Params) (response SecureSendNotificationResponse, err error) { + err = vk.RequestUnmarshal("secure.sendNotification", &response, params) + return +} + +// SecureSendSMSNotification sends SMS notification to a user's mobile device. +// +// https://vk.com/dev/secure.sendSMSNotification +func (vk *VK) SecureSendSMSNotification(params Params) (response int, err error) { + err = vk.RequestUnmarshal("secure.sendSMSNotification", &response, params) + return +} + +// SecureSetCounter sets a counter which is shown to the user in bold in the left menu. +// +// https://vk.com/dev/secure.setCounter +func (vk *VK) SecureSetCounter(params Params) (response int, err error) { + err = vk.RequestUnmarshal("secure.setCounter", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/stats.go b/vendor/github.com/SevereCloud/vksdk/v2/api/stats.go new file mode 100644 index 00000000..86572e01 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/stats.go @@ -0,0 +1,35 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// StatsGetResponse struct. +type StatsGetResponse []object.StatsPeriod + +// StatsGet returns statistics of a community or an application. +// +// https://vk.com/dev/stats.get +func (vk *VK) StatsGet(params Params) (response StatsGetResponse, err error) { + err = vk.RequestUnmarshal("stats.get", &response, params) + return +} + +// StatsGetPostReachResponse struct. +type StatsGetPostReachResponse []object.StatsWallpostStat + +// StatsGetPostReach returns stats for a wall post. +// +// https://vk.com/dev/stats.getPostReach +func (vk *VK) StatsGetPostReach(params Params) (response StatsGetPostReachResponse, err error) { + err = vk.RequestUnmarshal("stats.getPostReach", &response, params) + return +} + +// StatsTrackVisitor adds current session's data in the application statistics. +// +// https://vk.com/dev/stats.trackVisitor +func (vk *VK) StatsTrackVisitor(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stats.trackVisitor", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/status.go b/vendor/github.com/SevereCloud/vksdk/v2/api/status.go new file mode 100644 index 00000000..e9bb7775 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/status.go @@ -0,0 +1,23 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// StatusGetResponse struct. +type StatusGetResponse struct { + Audio object.AudioAudio `json:"audio"` + Text string `json:"text"` +} + +// StatusGet returns data required to show the status of a user or community. +func (vk *VK) StatusGet(params Params) (response StatusGetResponse, err error) { + err = vk.RequestUnmarshal("status.get", &response, params) + return +} + +// StatusSet sets a new status for the current user. +func (vk *VK) StatusSet(params Params) (response int, err error) { + err = vk.RequestUnmarshal("status.set", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/storage.go b/vendor/github.com/SevereCloud/vksdk/v2/api/storage.go new file mode 100644 index 00000000..ed1d8c64 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/storage.go @@ -0,0 +1,48 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// StorageGetResponse struct. +type StorageGetResponse []object.BaseRequestParam + +// ToMap return map from StorageGetResponse. +func (s StorageGetResponse) ToMap() map[string]string { + m := make(map[string]string) + for _, item := range s { + m[item.Key] = item.Value + } + + return m +} + +// StorageGet returns a value of variable with the name set by key parameter. +// +// StorageGet always return array! +// +// https://vk.com/dev/storage.get +func (vk *VK) StorageGet(params Params) (response StorageGetResponse, err error) { + err = vk.RequestUnmarshal("storage.get", &response, params) + + return +} + +// StorageGetKeysResponse struct. +type StorageGetKeysResponse []string + +// StorageGetKeys returns the names of all variables. +// +// https://vk.com/dev/storage.getKeys +func (vk *VK) StorageGetKeys(params Params) (response StorageGetKeysResponse, err error) { + err = vk.RequestUnmarshal("storage.getKeys", &response, params) + return +} + +// StorageSet saves a value of variable with the name set by key parameter. +// +// https://vk.com/dev/storage.set +func (vk *VK) StorageSet(params Params) (response int, err error) { + err = vk.RequestUnmarshal("storage.set", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/stories.go b/vendor/github.com/SevereCloud/vksdk/v2/api/stories.go new file mode 100644 index 00000000..46c643b9 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/stories.go @@ -0,0 +1,305 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import "github.com/SevereCloud/vksdk/v2/object" + +// StoriesBanOwner allows to hide stories from chosen sources from current user's feed. +// +// https://vk.com/dev/stories.banOwner +func (vk *VK) StoriesBanOwner(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.banOwner", &response, params) + return +} + +// StoriesDelete allows to delete story. +// +// https://vk.com/dev/stories.delete +func (vk *VK) StoriesDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.delete", &response, params) + return +} + +// StoriesGetResponse struct. +type StoriesGetResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` + PromoData object.StoriesPromoData `json:"promo_data"` + NeedUploadScreen object.BaseBoolInt `json:"need_upload_screen"` +} + +// StoriesGet returns stories available for current user. +// +// extended=0 +// +// https://vk.com/dev/stories.get +func (vk *VK) StoriesGet(params Params) (response StoriesGetResponse, err error) { + err = vk.RequestUnmarshal("stories.get", &response, params, Params{"extended": false}) + + return +} + +// StoriesGetExtendedResponse struct. +type StoriesGetExtendedResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` + PromoData object.StoriesPromoData `json:"promo_data"` + NeedUploadScreen object.BaseBoolInt `json:"need_upload_screen"` + object.ExtendedResponse +} + +// StoriesGetExtended returns stories available for current user. +// +// extended=1 +// +// https://vk.com/dev/stories.get +func (vk *VK) StoriesGetExtended(params Params) (response StoriesGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("stories.get", &response, params, Params{"extended": true}) + + return +} + +// StoriesGetBannedResponse struct. +type StoriesGetBannedResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// StoriesGetBanned returns list of sources hidden from current user's feed. +// +// extended=0 +// +// https://vk.com/dev/stories.getBanned +func (vk *VK) StoriesGetBanned(params Params) (response StoriesGetBannedResponse, err error) { + err = vk.RequestUnmarshal("stories.getBanned", &response, params, Params{"extended": false}) + + return +} + +// StoriesGetBannedExtendedResponse struct. +type StoriesGetBannedExtendedResponse struct { + Count int `json:"count"` + Items []int `json:"items"` + object.ExtendedResponse +} + +// StoriesGetBannedExtended returns list of sources hidden from current user's feed. +// +// extended=1 +// +// https://vk.com/dev/stories.getBanned +func (vk *VK) StoriesGetBannedExtended(params Params) (response StoriesGetBannedExtendedResponse, err error) { + err = vk.RequestUnmarshal("stories.getBanned", &response, params, Params{"extended": true}) + + return +} + +// StoriesGetByIDResponse struct. +type StoriesGetByIDResponse struct { + Count int `json:"count"` + Items []object.StoriesStory `json:"items"` +} + +// StoriesGetByID returns story by its ID. +// +// extended=0 +// +// https://vk.com/dev/stories.getById +func (vk *VK) StoriesGetByID(params Params) (response StoriesGetByIDResponse, err error) { + err = vk.RequestUnmarshal("stories.getById", &response, params, Params{"extended": false}) + + return +} + +// StoriesGetByIDExtendedResponse struct. +type StoriesGetByIDExtendedResponse struct { + Count int `json:"count"` + Items []object.StoriesStory `json:"items"` + object.ExtendedResponse +} + +// StoriesGetByIDExtended returns story by its ID. +// +// extended=1 +// +// https://vk.com/dev/stories.getById +func (vk *VK) StoriesGetByIDExtended(params Params) (response StoriesGetByIDExtendedResponse, err error) { + err = vk.RequestUnmarshal("stories.getById", &response, params, Params{"extended": true}) + + return +} + +// StoriesGetPhotoUploadServerResponse struct. +type StoriesGetPhotoUploadServerResponse struct { + UploadURL string `json:"upload_url"` + PeerIDs []int `json:"peer_ids"` + UserIDs []int `json:"user_ids"` +} + +// StoriesGetPhotoUploadServer returns URL for uploading a story with photo. +// +// https://vk.com/dev/stories.getPhotoUploadServer +func (vk *VK) StoriesGetPhotoUploadServer(params Params) (response StoriesGetPhotoUploadServerResponse, err error) { + err = vk.RequestUnmarshal("stories.getPhotoUploadServer", &response, params) + return +} + +// StoriesGetRepliesResponse struct. +type StoriesGetRepliesResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` +} + +// StoriesGetReplies returns replies to the story. +// +// extended=0 +// +// https://vk.com/dev/stories.getReplies +func (vk *VK) StoriesGetReplies(params Params) (response StoriesGetRepliesResponse, err error) { + err = vk.RequestUnmarshal("stories.getReplies", &response, params, Params{"extended": false}) + + return +} + +// StoriesGetRepliesExtendedResponse struct. +type StoriesGetRepliesExtendedResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` + object.ExtendedResponse +} + +// StoriesGetRepliesExtended returns replies to the story. +// +// extended=1 +// +// https://vk.com/dev/stories.getReplies +func (vk *VK) StoriesGetRepliesExtended(params Params) (response StoriesGetRepliesExtendedResponse, err error) { + err = vk.RequestUnmarshal("stories.getReplies", &response, params, Params{"extended": true}) + + return +} + +// StoriesGetStatsResponse struct. +type StoriesGetStatsResponse object.StoriesStoryStats + +// StoriesGetStats return statistics data for the story. +// +// https://vk.com/dev/stories.getStats +func (vk *VK) StoriesGetStats(params Params) (response StoriesGetStatsResponse, err error) { + err = vk.RequestUnmarshal("stories.getStats", &response, params) + return +} + +// StoriesGetVideoUploadServerResponse struct. +type StoriesGetVideoUploadServerResponse struct { + UploadURL string `json:"upload_url"` + PeerIDs []int `json:"peer_ids"` + UserIDs []int `json:"user_ids"` +} + +// StoriesGetVideoUploadServer allows to receive URL for uploading story with video. +// +// https://vk.com/dev/stories.getVideoUploadServer +func (vk *VK) StoriesGetVideoUploadServer(params Params) (response StoriesGetVideoUploadServerResponse, err error) { + err = vk.RequestUnmarshal("stories.getVideoUploadServer", &response, params) + return +} + +// StoriesGetViewersResponse struct. +type StoriesGetViewersResponse struct { + Count int `json:"count"` + Items []object.StoriesViewer `json:"items"` +} + +// StoriesGetViewers returns a list of story viewers. +// +// extended=0 +// +// https://vk.com/dev/stories.getViewers +func (vk *VK) StoriesGetViewers(params Params) (response StoriesGetViewersResponse, err error) { + err = vk.RequestUnmarshal("stories.getViewers", &response, params) + + return +} + +// StoriesHideAllReplies hides all replies in the last 24 hours from the user to current user's stories. +// +// https://vk.com/dev/stories.hideAllReplies +func (vk *VK) StoriesHideAllReplies(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.hideAllReplies", &response, params) + return +} + +// StoriesHideReply hides the reply to the current user's story. +// +// https://vk.com/dev/stories.hideReply +func (vk *VK) StoriesHideReply(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.hideReply", &response, params) + return +} + +// StoriesSaveResponse struct. +type StoriesSaveResponse struct { + Count int `json:"count"` + Items []object.StoriesStory `json:"items"` +} + +// StoriesSave method. +// +// https://vk.com/dev/stories.save +func (vk *VK) StoriesSave(params Params) (response StoriesSaveResponse, err error) { + err = vk.RequestUnmarshal("stories.save", &response, params) + return +} + +// StoriesSearchResponse struct. +type StoriesSearchResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` +} + +// StoriesSearch returns search results for stories. +// +// extended=0 +// +// https://vk.com/dev/stories.search +func (vk *VK) StoriesSearch(params Params) (response StoriesSearchResponse, err error) { + err = vk.RequestUnmarshal("stories.search", &response, params, Params{"extended": false}) + + return +} + +// StoriesSearchExtendedResponse struct. +type StoriesSearchExtendedResponse struct { + Count int `json:"count"` + Items []object.StoriesFeedItem `json:"items"` + object.ExtendedResponse +} + +// StoriesSearchExtended returns search results for stories. +// +// extended=1 +// +// https://vk.com/dev/stories.search +func (vk *VK) StoriesSearchExtended(params Params) (response StoriesSearchExtendedResponse, err error) { + err = vk.RequestUnmarshal("stories.search", &response, params, Params{"extended": true}) + + return +} + +// StoriesSendInteraction sends feedback to the story. +// +// Available for applications with type VK Mini Apps. The default method is +// not available to applications. +// +// https://vk.com/dev/stories.sendInteraction +func (vk *VK) StoriesSendInteraction(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.sendInteraction", &response, params) + return +} + +// StoriesUnbanOwner allows to show stories from hidden sources in current user's feed. +// +// https://vk.com/dev/stories.unbanOwner +func (vk *VK) StoriesUnbanOwner(params Params) (response int, err error) { + err = vk.RequestUnmarshal("stories.unbanOwner", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/streaming.go b/vendor/github.com/SevereCloud/vksdk/v2/api/streaming.go new file mode 100644 index 00000000..c3484e69 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/streaming.go @@ -0,0 +1,67 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +// StreamingGetServerURLResponse struct. +type StreamingGetServerURLResponse struct { + Endpoint string `json:"endpoint"` + Key string `json:"key"` +} + +// StreamingGetServerURL allows to receive data for the connection to Streaming API. +// +// https://vk.com/dev/streaming.getServerUrl +func (vk *VK) StreamingGetServerURL(params Params) (response StreamingGetServerURLResponse, err error) { + err = vk.RequestUnmarshal("streaming.getServerUrl", &response, params) + return +} + +// StreamingGetSettingsResponse struct. +type StreamingGetSettingsResponse struct { + MonthlyLimit string `json:"monthly_limit"` +} + +// StreamingGetSettings allows to receive monthly tier for Streaming API. +// +// https://vk.com/dev/streaming.getSettings +func (vk *VK) StreamingGetSettings(params Params) (response StreamingGetSettingsResponse, err error) { + err = vk.RequestUnmarshal("streaming.getSettings", &response, params) + return +} + +// StreamingGetStatsResponse struct. +type StreamingGetStatsResponse []struct { + EventType string `json:"event_type"` + Stats []struct { + Timestamp int `json:"timestamp"` + Value int `json:"value"` + } `json:"stats"` +} + +// StreamingGetStats allows to receive statistics for prepared and received events in Streaming API. +// +// https://vk.com/dev/streaming.getStats +func (vk *VK) StreamingGetStats(params Params) (response StreamingGetStatsResponse, err error) { + err = vk.RequestUnmarshal("streaming.getStats", &response, params) + return +} + +// StreamingGetStemResponse struct. +type StreamingGetStemResponse struct { + Stem string `json:"stem"` +} + +// StreamingGetStem allows to receive the stem of the word. +// +// https://vk.com/dev/streaming.getStem +func (vk *VK) StreamingGetStem(params Params) (response StreamingGetStemResponse, err error) { + err = vk.RequestUnmarshal("streaming.getStem", &response, params) + return +} + +// StreamingSetSettings allows to set monthly tier for Streaming API. +// +// https://vk.com/dev/streaming.setSettings +func (vk *VK) StreamingSetSettings(params Params) (response int, err error) { + err = vk.RequestUnmarshal("streaming.setSettings", &response, params) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/upload.go b/vendor/github.com/SevereCloud/vksdk/v2/api/upload.go new file mode 100644 index 00000000..2c947c5d --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/upload.go @@ -0,0 +1,961 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "bytes" + "encoding/json" + "io" + "io/ioutil" + "mime/multipart" + + "github.com/SevereCloud/vksdk/v2/object" +) + +// UploadFile uploading file. +func (vk *VK) UploadFile(url string, file io.Reader, fieldname, filename string) (bodyContent []byte, err error) { + body := new(bytes.Buffer) + writer := multipart.NewWriter(body) + + part, err := writer.CreateFormFile(fieldname, filename) + if err != nil { + return + } + + _, err = io.Copy(part, file) + if err != nil { + return + } + + contentType := writer.FormDataContentType() + _ = writer.Close() + + resp, err := vk.Client.Post(url, contentType, body) + if err != nil { + return + } + defer resp.Body.Close() + + bodyContent, err = ioutil.ReadAll(resp.Body) + + return +} + +// uploadPhoto uploading Photos into Album. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) uploadPhoto(params Params, file io.Reader) (response PhotosSaveResponse, err error) { + uploadServer, err := vk.PhotosGetUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "file1", "file1.jpeg") + if err != nil { + return + } + + var handler object.PhotosPhotoUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PhotosSave(Params{ + "server": handler.Server, + "photos_list": handler.PhotosList, + "aid": handler.AID, + "hash": handler.Hash, + "album_id": params["album_id"], + "group_id": params["group_id"], + }) + + return +} + +// UploadPhoto uploading Photos into User Album. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadPhoto(albumID int, file io.Reader) (response PhotosSaveResponse, err error) { + response, err = vk.uploadPhoto(Params{ + "album_id": albumID, + }, file) + + return +} + +// UploadPhotoGroup uploading Photos into Group Album. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadPhotoGroup(groupID, albumID int, file io.Reader) (response PhotosSaveResponse, err error) { + response, err = vk.uploadPhoto(Params{ + "album_id": albumID, + "group_id": groupID, + }, file) + + return +} + +// uploadWallPhoto uploading Photos on Wall. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) uploadWallPhoto(params Params, file io.Reader) (response PhotosSaveWallPhotoResponse, err error) { + uploadServer, err := vk.PhotosGetWallUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "photo", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosWallUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PhotosSaveWallPhoto(Params{ + "server": handler.Server, + "photo": handler.Photo, + "hash": handler.Hash, + "group_id": params["group_id"], + }) + + return +} + +// UploadWallPhoto uploading Photos on User Wall. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadWallPhoto(file io.Reader) (response PhotosSaveWallPhotoResponse, err error) { + response, err = vk.uploadWallPhoto(Params{}, file) + return +} + +// UploadGroupWallPhoto uploading Photos on Group Wall. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadGroupWallPhoto(groupID int, file io.Reader) (response PhotosSaveWallPhotoResponse, err error) { + response, err = vk.uploadWallPhoto(Params{ + "group_id": groupID, + }, file) + + return +} + +// uploadOwnerPhoto uploading Photos into User Profile or Community +// To upload a photo to a community send its negative id in the owner_id parameter. +// +// Following parameters can be sent in addition: +// squareCrop in x,y,w (no quotes) format where x and y are the coordinates of +// the preview upper-right corner and w is square side length. +// That will create a square preview for a photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, aspect ratio from 0.25 to 3, +// width+height not more than 14000 px, file size up to 50 Mb. +func (vk *VK) uploadOwnerPhoto(params Params, squareCrop string, file io.Reader) ( + response PhotosSaveOwnerPhotoResponse, + err error, +) { + uploadServer, err := vk.PhotosGetOwnerPhotoUploadServer(params) + if err != nil { + return + } + + body := new(bytes.Buffer) + writer := multipart.NewWriter(body) + + part, err := writer.CreateFormFile("photo", "photo.jpeg") + if err != nil { + return + } + + _, err = io.Copy(part, file) + if err != nil { + return + } + + contentType := writer.FormDataContentType() + + if squareCrop != "" { + err = writer.WriteField("_square_crop", squareCrop) + if err != nil { + return + } + } + + _ = writer.Close() + + resp, err := vk.Client.Post(uploadServer.UploadURL, contentType, body) + if err != nil { + return + } + defer resp.Body.Close() + + bodyContent, err := ioutil.ReadAll(resp.Body) + if err != nil { + return + } + + var handler object.PhotosOwnerUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PhotosSaveOwnerPhoto(Params{ + "server": handler.Server, + "photo": handler.Photo, + "hash": handler.Hash, + }) + + return response, err +} + +// UploadUserPhoto uploading Photos into User Profile. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, aspect ratio from 0.25 to 3, +// width+height not more than 14000 px, file size up to 50 Mb. +func (vk *VK) UploadUserPhoto(file io.Reader) (response PhotosSaveOwnerPhotoResponse, err error) { + response, err = vk.uploadOwnerPhoto(Params{}, "", file) + return +} + +// UploadOwnerPhoto uploading Photos into User Profile or Community +// To upload a photo to a community send its negative id in the owner_id parameter. +// +// Following parameters can be sent in addition: +// squareCrop in x,y,w (no quotes) format where x and y are the coordinates of +// the preview upper-right corner and w is square side length. +// That will create a square preview for a photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, aspect ratio from 0.25 to 3, +// width+height not more than 14000 px, file size up to 50 Mb. +func (vk *VK) UploadOwnerPhoto(ownerID int, squareCrop string, file io.Reader) ( + response PhotosSaveOwnerPhotoResponse, + err error, +) { + response, err = vk.uploadOwnerPhoto(Params{ + "owner_id": ownerID, + }, squareCrop, file) + + return +} + +// UploadMessagesPhoto uploading Photos into a Private Message. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadMessagesPhoto(peerID int, file io.Reader) (response PhotosSaveMessagesPhotoResponse, err error) { + uploadServer, err := vk.PhotosGetMessagesUploadServer(Params{ + "peer_id": peerID, + }) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "photo", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosMessageUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PhotosSaveMessagesPhoto(Params{ + "server": handler.Server, + "photo": handler.Photo, + "hash": handler.Hash, + }) + + return +} + +// uploadChatPhoto uploading a Main Photo to a Group Chat. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) uploadChatPhoto(params Params, file io.Reader) (response MessagesSetChatPhotoResponse, err error) { + uploadServer, err := vk.PhotosGetChatUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "file", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosChatUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.MessagesSetChatPhoto(Params{ + "file": handler.Response, + }) + + return +} + +// UploadChatPhoto uploading a Main Photo to a Group Chat without crop. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadChatPhoto(chatID int, file io.Reader) (response MessagesSetChatPhotoResponse, err error) { + response, err = vk.uploadChatPhoto(Params{ + "chat_id": chatID, + }, file) + + return +} + +// UploadChatPhotoCrop uploading a Main Photo to a Group Chat with crop. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 200x200px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadChatPhotoCrop(chatID, cropX, cropY, cropWidth int, file io.Reader) ( + response MessagesSetChatPhotoResponse, + err error, +) { + response, err = vk.uploadChatPhoto(Params{ + "chat_id": chatID, + "crop_x": cropX, + "crop_y": cropY, + "crop_width": cropWidth, + }, file) + + return +} + +// uploadMarketPhoto uploading a Market Item Photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 400x400px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) uploadMarketPhoto(params Params, file io.Reader) (response PhotosSaveMarketPhotoResponse, err error) { + uploadServer, err := vk.PhotosGetMarketUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "file", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosMarketUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PhotosSaveMarketPhoto(Params{ + "group_id": params["group_id"], + "server": handler.Server, + "photo": handler.Photo, + "hash": handler.Hash, + "crop_data": handler.CropData, + "crop_hash": handler.CropHash, + }) + + return +} + +// UploadMarketPhoto uploading a Market Item Photo without crop. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 400x400px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadMarketPhoto(groupID int, mainPhoto bool, file io.Reader) ( + response PhotosSaveMarketPhotoResponse, + err error, +) { + response, err = vk.uploadMarketPhoto(Params{ + "group_id": groupID, + "main_photo": mainPhoto, + }, file) + + return +} + +// UploadMarketPhotoCrop uploading a Market Item Photo with crop. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 400x400px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadMarketPhotoCrop(groupID, cropX, cropY, cropWidth int, file io.Reader) ( + response PhotosSaveMarketPhotoResponse, + err error, +) { + response, err = vk.uploadMarketPhoto(Params{ + "group_id": groupID, + "main_photo": true, + "crop_x": cropX, + "crop_y": cropY, + "crop_width": cropWidth, + }, file) + + return +} + +// UploadMarketAlbumPhoto uploading a Main Photo to a Group Chat. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: size not less than 1280x720px, +// width+height not more than 14000 px, file size up to 50 Mb, +// aspect ratio of at least 1:20. +func (vk *VK) UploadMarketAlbumPhoto(groupID int, file io.Reader) ( + response PhotosSaveMarketAlbumPhotoResponse, + err error, +) { + uploadServer, err := vk.PhotosGetMarketAlbumUploadServer(Params{ + "group_id": groupID, + }) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "file", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosMarketAlbumUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + return vk.PhotosSaveMarketAlbumPhoto(Params{ + "group_id": groupID, + "server": handler.Server, + "photo": handler.Photo, + "hash": handler.Hash, + }) +} + +// UploadVideo uploading Video Files. +// +// Supported formats: AVI, MP4, 3GP, MPEG, MOV, FLV, WMV. +func (vk *VK) UploadVideo(params Params, file io.Reader) (response VideoSaveResponse, err error) { + response, err = vk.VideoSave(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(response.UploadURL, file, "video_file", "video.mp4") + if err != nil { + return + } + + var videoUploadError UploadError + + err = json.Unmarshal(bodyContent, &videoUploadError) + if err != nil { + return + } + + if videoUploadError.Code != 0 { + err = &videoUploadError + } + + return +} + +// uploadDoc uploading Documents. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) uploadDoc(url, title, tags string, file io.Reader) (response DocsSaveResponse, err error) { + bodyContent, err := vk.UploadFile(url, file, "file", title) + if err != nil { + return + } + + var docUploadError UploadError + + err = json.Unmarshal(bodyContent, &docUploadError) + if err != nil { + return + } + + if docUploadError.Err != "" { + err = &docUploadError + return + } + + var handler object.DocsDocUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.DocsSave(Params{ + "file": handler.File, + "title": title, + "tags": tags, + }) + + return response, err +} + +// UploadDoc uploading Documents. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) UploadDoc(title, tags string, file io.Reader) (response DocsSaveResponse, err error) { + uploadServer, err := vk.DocsGetUploadServer(nil) + if err != nil { + return + } + + response, err = vk.uploadDoc(uploadServer.UploadURL, title, tags, file) + + return +} + +// UploadGroupDoc uploading Documents into Community. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) UploadGroupDoc(groupID int, title, tags string, file io.Reader) (response DocsSaveResponse, err error) { + uploadServer, err := vk.DocsGetUploadServer(Params{ + "group_id": groupID, + }) + if err != nil { + return + } + + response, err = vk.uploadDoc(uploadServer.UploadURL, title, tags, file) + + return +} + +// UploadWallDoc uploading Documents on Wall. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) UploadWallDoc(title, tags string, file io.Reader) (response DocsSaveResponse, err error) { + uploadServer, err := vk.DocsGetWallUploadServer(nil) + if err != nil { + return + } + + response, err = vk.uploadDoc(uploadServer.UploadURL, title, tags, file) + + return +} + +// UploadGroupWallDoc uploading Documents on Group Wall. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) UploadGroupWallDoc(groupID int, title, tags string, file io.Reader) ( + response DocsSaveResponse, + err error, +) { + uploadServer, err := vk.DocsGetWallUploadServer(Params{ + "group_id": groupID, + }) + if err != nil { + return + } + + response, err = vk.uploadDoc(uploadServer.UploadURL, title, tags, file) + + return +} + +// UploadMessagesDoc uploading Documents into a Private Message. +// +// Supported formats: any formats excepting mp3 and executable files. +// +// Limits: file size up to 200 MB. +func (vk *VK) UploadMessagesDoc(peerID int, typeDoc, title, tags string, file io.Reader) ( + response DocsSaveResponse, + err error, +) { + uploadServer, err := vk.DocsGetMessagesUploadServer(Params{ + "peer_id": peerID, + "type": typeDoc, + }) + if err != nil { + return + } + + response, err = vk.uploadDoc(uploadServer.UploadURL, title, tags, file) + + return +} + +// UploadOwnerCoverPhoto uploading a Main Photo to a Group Chat. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: minimum photo size 795x200px, width+height not more than 14000px, +// file size up to 50 MB. Recommended size: 1590x400px. +func (vk *VK) UploadOwnerCoverPhoto(groupID, cropX, cropY, cropX2, cropY2 int, file io.Reader) ( + response PhotosSaveOwnerCoverPhotoResponse, + err error, +) { + uploadServer, err := vk.PhotosGetOwnerCoverPhotoUploadServer(Params{ + "group_id": groupID, + "crop_x": cropX, + "crop_y": cropY, + "crop_x2": cropX2, + "crop_y2": cropY2, + }) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "photo", "photo.jpeg") + if err != nil { + return + } + + var handler object.PhotosOwnerUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + return vk.PhotosSaveOwnerCoverPhoto(Params{ + "photo": handler.Photo, + "hash": handler.Hash, + }) +} + +// UploadStories struct. +type UploadStories struct { + UploadResult string `json:"upload_result"` + Sig string `json:"_sig"` +} + +type rawUploadStoriesPhoto struct { + Response UploadStories `json:"response"` + Error struct { + ErrorCode int `json:"error_code"` + Type string `json:"type"` + } `json:"error"` +} + +type rawUploadStoriesVideo struct { + Response UploadStories `json:"response"` + UploadError +} + +// UploadStoriesPhoto uploading Story. +// +// Supported formats: JPG, PNG, GIF. +// Limits: sum of with and height no more than 14000px, file size no +// more than 10 MB. Video format: h264 video, aac audio, +// maximum 720х1280, 30fps. +// +// https://vk.com/dev/stories.getPhotoUploadServer +func (vk *VK) UploadStoriesPhoto(params Params, file io.Reader) (response StoriesSaveResponse, err error) { + uploadServer, err := vk.StoriesGetPhotoUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "file", "file.jpeg") + if err != nil { + return + } + + var handler rawUploadStoriesPhoto + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + if handler.Error.ErrorCode != 0 { + err = &UploadError{ + Code: handler.Error.ErrorCode, + Err: handler.Error.Type, + } + + return response, err + } + + response, err = vk.StoriesSave(Params{ + "upload_results": handler.Response.UploadResult, + }) + + return response, err +} + +// UploadStoriesVideo uploading Story. +// +// Video format: h264 video, aac audio, maximum 720х1280, 30fps. +func (vk *VK) UploadStoriesVideo(params Params, file io.Reader) (response StoriesSaveResponse, err error) { + uploadServer, err := vk.StoriesGetVideoUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "video_file", "video.mp4") + if err != nil { + return + } + + var handler rawUploadStoriesVideo + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + if handler.UploadError.Code != 0 { + return response, &handler.UploadError + } + + response, err = vk.StoriesSave(Params{ + "upload_results": handler.Response.UploadResult, + }) + + return response, err +} + +// uploadPollsPhoto uploading a Poll Photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: minimum photo size 795x200px, width+height not more than 14000px, +// file size up to 50 MB. Recommended size: 1590x400px. +func (vk *VK) uploadPollsPhoto(params Params, file io.Reader) (response PollsSavePhotoResponse, err error) { + uploadServer, err := vk.PollsGetPhotoUploadServer(params) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "photo", "photo.jpeg") + if err != nil { + return + } + + var handler object.PollsPhotoUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.PollsSavePhoto(Params{ + "photo": handler.Photo, + "hash": handler.Hash, + }) + + return +} + +// UploadPollsPhoto uploading a Poll Photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: minimum photo size 795x200px, width+height not more than 14000px, +// file size up to 50 MB. Recommended size: 1590x400px. +func (vk *VK) UploadPollsPhoto(file io.Reader) (response PollsSavePhotoResponse, err error) { + return vk.uploadPollsPhoto(Params{}, file) +} + +// UploadOwnerPollsPhoto uploading a Poll Photo. +// +// Supported formats: JPG, PNG, GIF. +// +// Limits: minimum photo size 795x200px, width+height not more than 14000px, +// file size up to 50 MB. Recommended size: 1590x400px. +func (vk *VK) UploadOwnerPollsPhoto(ownerID int, file io.Reader) (response PollsSavePhotoResponse, err error) { + return vk.uploadPollsPhoto(Params{"owner_id": ownerID}, file) +} + +type uploadPrettyCardsPhotoHandler struct { + Photo string `json:"photo"` + ErrCode int `json:"errcode"` +} + +// UploadPrettyCardsPhoto uploading a Pretty Card Photo. +// +// Supported formats: JPG, PNG, GIF. +func (vk *VK) UploadPrettyCardsPhoto(file io.Reader) (response string, err error) { + uploadURL, err := vk.PrettyCardsGetUploadURL(nil) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadURL, file, "file", "photo.jpg") + if err != nil { + return + } + + var handler uploadPrettyCardsPhotoHandler + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response = handler.Photo + + if handler.ErrCode != 0 { + err = &UploadError{Code: handler.ErrCode} + } + + return +} + +type uploadLeadFormsPhotoHandler struct { + Photo string `json:"photo"` + ErrCode int `json:"errcode"` +} + +// UploadLeadFormsPhoto uploading a Pretty Card Photo. +// +// Supported formats: JPG, PNG, GIF. +func (vk *VK) UploadLeadFormsPhoto(file io.Reader) (response string, err error) { + uploadURL, err := vk.LeadFormsGetUploadURL(nil) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadURL, file, "file", "photo.jpg") + if err != nil { + return + } + + var handler uploadLeadFormsPhotoHandler + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response = handler.Photo + + if handler.ErrCode != 0 { + err = &UploadError{Code: handler.ErrCode} + } + + return +} + +// UploadAppImage uploading a Image into App collection for community app widgets. +func (vk *VK) UploadAppImage(imageType string, file io.Reader) (response object.AppWidgetsImage, err error) { + uploadServer, err := vk.AppWidgetsGetAppImageUploadServer(Params{ + "image_type": imageType, + }) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "image", "photo.jpeg") + if err != nil { + return + } + + var handler object.AppWidgetsAppImageUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.AppWidgetsSaveAppImage(Params{ + "image": handler.Image, + "hash": handler.Hash, + }) + + return +} + +// UploadGroupImage uploading a Image into Community collection for community app widgets. +func (vk *VK) UploadGroupImage(imageType string, file io.Reader) (response object.AppWidgetsImage, err error) { + uploadServer, err := vk.AppWidgetsGetGroupImageUploadServer(Params{ + "image_type": imageType, + }) + if err != nil { + return + } + + bodyContent, err := vk.UploadFile(uploadServer.UploadURL, file, "image", "photo.jpeg") + if err != nil { + return + } + + var handler object.AppWidgetsGroupImageUploadResponse + + err = json.Unmarshal(bodyContent, &handler) + if err != nil { + return + } + + response, err = vk.AppWidgetsSaveGroupImage(Params{ + "image": handler.Image, + "hash": handler.Hash, + }) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/users.go b/vendor/github.com/SevereCloud/vksdk/v2/api/users.go new file mode 100644 index 00000000..2251d562 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/users.go @@ -0,0 +1,104 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// UsersGetResponse users.get response. +type UsersGetResponse []object.UsersUser + +// UsersGet returns detailed information on users. +// +// https://vk.com/dev/users.get +func (vk *VK) UsersGet(params Params) (response UsersGetResponse, err error) { + err = vk.RequestUnmarshal("users.get", &response, params) + return +} + +// UsersGetFollowersResponse struct. +type UsersGetFollowersResponse struct { + Count int `json:"count"` + Items []int `json:"items"` +} + +// UsersGetFollowers returns a list of IDs of followers of the user in +// question, sorted by date added, most recent first. +// +// fields=""; +// +// https://vk.com/dev/users.getFollowers +func (vk *VK) UsersGetFollowers(params Params) (response UsersGetFollowersResponse, err error) { + err = vk.RequestUnmarshal("users.getFollowers", &response, params, Params{"fields": ""}) + + return +} + +// UsersGetFollowersFieldsResponse struct. +type UsersGetFollowersFieldsResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// UsersGetFollowersFields returns a list of IDs of followers of the user in +// question, sorted by date added, most recent first. +// +// fields not empty. +// +// https://vk.com/dev/users.getFollowers +func (vk *VK) UsersGetFollowersFields(params Params) (response UsersGetFollowersFieldsResponse, err error) { + reqParams := make(Params) + if v, prs := params["fields"]; v == "" || !prs { + reqParams["fields"] = "id" + } + + err = vk.RequestUnmarshal("users.getFollowers", &response, params, reqParams) + + return +} + +// UsersGetSubscriptionsResponse struct. +type UsersGetSubscriptionsResponse struct { + Users struct { + Count int `json:"count"` + Items []int `json:"items"` + } `json:"users"` + Groups struct { + Count int `json:"count"` + Items []int `json:"items"` + } `json:"groups"` +} + +// UsersGetSubscriptions returns a list of IDs of users and public pages followed by the user. +// +// extended=0 +// +// https://vk.com/dev/users.getSubscriptions +// +// BUG(SevereCloud): UsersGetSubscriptions bad response with extended=1. +func (vk *VK) UsersGetSubscriptions(params Params) (response UsersGetSubscriptionsResponse, err error) { + err = vk.RequestUnmarshal("users.getSubscriptions", &response, params, Params{"extended": false}) + + return +} + +// UsersReport reports (submits a complain about) a user. +// +// https://vk.com/dev/users.report +func (vk *VK) UsersReport(params Params) (response int, err error) { + err = vk.RequestUnmarshal("users.report", &response, params) + return +} + +// UsersSearchResponse struct. +type UsersSearchResponse struct { + Count int `json:"count"` + Items []object.UsersUser `json:"items"` +} + +// UsersSearch returns a list of users matching the search criteria. +// +// https://vk.com/dev/users.search +func (vk *VK) UsersSearch(params Params) (response UsersSearchResponse, err error) { + err = vk.RequestUnmarshal("users.search", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/utils.go b/vendor/github.com/SevereCloud/vksdk/v2/api/utils.go new file mode 100644 index 00000000..63508fe2 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/utils.go @@ -0,0 +1,105 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "encoding/json" + + "github.com/SevereCloud/vksdk/v2/object" +) + +// UtilsCheckLinkResponse struct. +type UtilsCheckLinkResponse object.UtilsLinkChecked + +// UtilsCheckLink checks whether a link is blocked in VK. +// +// https://vk.com/dev/utils.checkLink +func (vk *VK) UtilsCheckLink(params Params) (response UtilsCheckLinkResponse, err error) { + err = vk.RequestUnmarshal("utils.checkLink", &response, params) + return +} + +// UtilsDeleteFromLastShortened deletes shortened link from user's list. +// +// https://vk.com/dev/utils.deleteFromLastShortened +func (vk *VK) UtilsDeleteFromLastShortened(params Params) (response int, err error) { + err = vk.RequestUnmarshal("utils.deleteFromLastShortened", &response, params) + return +} + +// UtilsGetLastShortenedLinksResponse struct. +type UtilsGetLastShortenedLinksResponse struct { + Count int `json:"count"` + Items []object.UtilsLastShortenedLink `json:"items"` +} + +// UtilsGetLastShortenedLinks returns a list of user's shortened links. +// +// https://vk.com/dev/utils.getLastShortenedLinks +func (vk *VK) UtilsGetLastShortenedLinks(params Params) (response UtilsGetLastShortenedLinksResponse, err error) { + err = vk.RequestUnmarshal("utils.getLastShortenedLinks", &response, params) + return +} + +// UtilsGetLinkStatsResponse struct. +type UtilsGetLinkStatsResponse object.UtilsLinkStats + +// UtilsGetLinkStats returns stats data for shortened link. +// +// extended=0 +// +// https://vk.com/dev/utils.getLinkStats +func (vk *VK) UtilsGetLinkStats(params Params) (response UtilsGetLinkStatsResponse, err error) { + err = vk.RequestUnmarshal("utils.getLinkStats", &response, params, Params{"extended": false}) + + return +} + +// UtilsGetLinkStatsExtendedResponse struct. +type UtilsGetLinkStatsExtendedResponse object.UtilsLinkStatsExtended + +// UtilsGetLinkStatsExtended returns stats data for shortened link. +// +// extended=1 +// +// https://vk.com/dev/utils.getLinkStats +func (vk *VK) UtilsGetLinkStatsExtended(params Params) (response UtilsGetLinkStatsExtendedResponse, err error) { + err = vk.RequestUnmarshal("utils.getLinkStats", &response, params, Params{"extended": true}) + + return +} + +// UtilsGetServerTime returns the current time of the VK server. +// +// https://vk.com/dev/utils.getServerTime +func (vk *VK) UtilsGetServerTime(params Params) (response int, err error) { + err = vk.RequestUnmarshal("utils.getServerTime", &response, params) + return +} + +// UtilsGetShortLinkResponse struct. +type UtilsGetShortLinkResponse object.UtilsShortLink + +// UtilsGetShortLink allows to receive a link shortened via vk.cc. +// +// https://vk.com/dev/utils.getShortLink +func (vk *VK) UtilsGetShortLink(params Params) (response UtilsGetShortLinkResponse, err error) { + err = vk.RequestUnmarshal("utils.getShortLink", &response, params) + return +} + +// UtilsResolveScreenNameResponse struct. +type UtilsResolveScreenNameResponse object.UtilsDomainResolved + +// UtilsResolveScreenName detects a type of object (e.g., user, community, application) and its ID by screen name. +// +// https://vk.com/dev/utils.resolveScreenName +func (vk *VK) UtilsResolveScreenName(params Params) (response UtilsResolveScreenNameResponse, err error) { + rawResponse, err := vk.Request("utils.resolveScreenName", params) + // Если короткое имя screen_name не занято, то будет возвращён пустой объект. + if err != nil || string(rawResponse) == "[]" { + return + } + + err = json.Unmarshal(rawResponse, &response) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/video.go b/vendor/github.com/SevereCloud/vksdk/v2/api/video.go new file mode 100644 index 00000000..b6e85b9a --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/video.go @@ -0,0 +1,338 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// VideoAdd adds a video to a user or community page. +// +// https://vk.com/dev/video.add +func (vk *VK) VideoAdd(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.add", &response, params) + return +} + +// VideoAddAlbumResponse struct. +type VideoAddAlbumResponse struct { + AlbumID int `json:"album_id"` +} + +// VideoAddAlbum creates an empty album for videos. +// +// https://vk.com/dev/video.addAlbum +func (vk *VK) VideoAddAlbum(params Params) (response VideoAddAlbumResponse, err error) { + err = vk.RequestUnmarshal("video.addAlbum", &response, params) + return +} + +// VideoAddToAlbum allows you to add a video to the album. +// +// https://vk.com/dev/video.addToAlbum +func (vk *VK) VideoAddToAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.addToAlbum", &response, params) + return +} + +// VideoCreateComment adds a new comment on a video. +// +// https://vk.com/dev/video.createComment +func (vk *VK) VideoCreateComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.createComment", &response, params) + return +} + +// VideoDelete deletes a video from a user or community page. +// +// https://vk.com/dev/video.delete +func (vk *VK) VideoDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.delete", &response, params) + return +} + +// VideoDeleteAlbum deletes a video album. +// +// https://vk.com/dev/video.deleteAlbum +func (vk *VK) VideoDeleteAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.deleteAlbum", &response, params) + return +} + +// VideoDeleteComment deletes a comment on a video. +// +// https://vk.com/dev/video.deleteComment +func (vk *VK) VideoDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.deleteComment", &response, params) + return +} + +// VideoEdit edits information about a video on a user or community page. +// +// https://vk.com/dev/video.edit +func (vk *VK) VideoEdit(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.edit", &response, params) + return +} + +// VideoEditAlbum edits the title of a video album. +// +// https://vk.com/dev/video.editAlbum +func (vk *VK) VideoEditAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.editAlbum", &response, params) + return +} + +// VideoEditComment edits the text of a comment on a video. +// +// https://vk.com/dev/video.editComment +func (vk *VK) VideoEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.editComment", &response, params) + return +} + +// VideoGetResponse struct. +type VideoGetResponse struct { + Count int `json:"count"` + Items []object.VideoVideo `json:"items"` +} + +// VideoGet returns detailed information about videos. +// +// extended=0 +// +// https://vk.com/dev/video.get +func (vk *VK) VideoGet(params Params) (response VideoGetResponse, err error) { + err = vk.RequestUnmarshal("video.get", &response, params, Params{"extended": false}) + + return +} + +// VideoGetExtendedResponse struct. +type VideoGetExtendedResponse struct { + Count int `json:"count"` + Items []object.VideoVideo `json:"items"` + object.ExtendedResponse +} + +// VideoGetExtended returns detailed information about videos. +// +// extended=1 +// +// https://vk.com/dev/video.get +func (vk *VK) VideoGetExtended(params Params) (response VideoGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("video.get", &response, params, Params{"extended": true}) + + return +} + +// VideoGetAlbumByIDResponse struct. +type VideoGetAlbumByIDResponse object.VideoVideoAlbumFull + +// VideoGetAlbumByID returns video album info. +// +// https://vk.com/dev/video.getAlbumById +func (vk *VK) VideoGetAlbumByID(params Params) (response VideoGetAlbumByIDResponse, err error) { + err = vk.RequestUnmarshal("video.getAlbumById", &response, params) + return +} + +// VideoGetAlbumsResponse struct. +type VideoGetAlbumsResponse struct { + Count int `json:"count"` + Items []object.VideoVideoAlbum `json:"items"` +} + +// VideoGetAlbums returns a list of video albums owned by a user or community. +// +// extended=0 +// +// https://vk.com/dev/video.getAlbums +func (vk *VK) VideoGetAlbums(params Params) (response VideoGetAlbumsResponse, err error) { + err = vk.RequestUnmarshal("video.getAlbums", &response, params, Params{"extended": false}) + + return +} + +// VideoGetAlbumsExtendedResponse struct. +type VideoGetAlbumsExtendedResponse struct { + Count int `json:"count"` + Items []object.VideoVideoAlbumFull `json:"items"` +} + +// VideoGetAlbumsExtended returns a list of video albums owned by a user or community. +// +// extended=1 +// +// https://vk.com/dev/video.getAlbums +func (vk *VK) VideoGetAlbumsExtended(params Params) (response VideoGetAlbumsExtendedResponse, err error) { + err = vk.RequestUnmarshal("video.getAlbums", &response, params, Params{"extended": true}) + + return +} + +// VideoGetAlbumsByVideoResponse struct. +type VideoGetAlbumsByVideoResponse []int + +// VideoGetAlbumsByVideo returns a list of albums in which the video is located. +// +// extended=0 +// +// https://vk.com/dev/video.getAlbumsByVideo +func (vk *VK) VideoGetAlbumsByVideo(params Params) (response VideoGetAlbumsByVideoResponse, err error) { + err = vk.RequestUnmarshal("video.getAlbumsByVideo", &response, params, Params{"extended": false}) + + return +} + +// VideoGetAlbumsByVideoExtendedResponse struct. +type VideoGetAlbumsByVideoExtendedResponse struct { + Count int `json:"count"` + Items []object.VideoVideoAlbumFull `json:"items"` +} + +// VideoGetAlbumsByVideoExtended returns a list of albums in which the video is located. +// +// extended=1 +// +// https://vk.com/dev/video.getAlbumsByVideo +func (vk *VK) VideoGetAlbumsByVideoExtended(params Params) (response VideoGetAlbumsByVideoExtendedResponse, err error) { + err = vk.RequestUnmarshal("video.getAlbumsByVideo", &response, params, Params{"extended": true}) + + return +} + +// VideoGetCommentsResponse struct. +type VideoGetCommentsResponse struct { + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` +} + +// VideoGetComments returns a list of comments on a video. +// +// extended=0 +// +// https://vk.com/dev/video.getComments +func (vk *VK) VideoGetComments(params Params) (response VideoGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("video.getComments", &response, params, Params{"extended": false}) + + return +} + +// VideoGetCommentsExtendedResponse struct. +type VideoGetCommentsExtendedResponse struct { + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` + object.ExtendedResponse +} + +// VideoGetCommentsExtended returns a list of comments on a video. +// +// extended=1 +// +// https://vk.com/dev/video.getComments +func (vk *VK) VideoGetCommentsExtended(params Params) (response VideoGetCommentsExtendedResponse, err error) { + err = vk.RequestUnmarshal("video.getComments", &response, params, Params{"extended": true}) + + return +} + +// VideoRemoveFromAlbum allows you to remove the video from the album. +// +// https://vk.com/dev/video.removeFromAlbum +func (vk *VK) VideoRemoveFromAlbum(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.removeFromAlbum", &response, params) + return +} + +// VideoReorderAlbums reorders the album in the list of user video albums. +// +// https://vk.com/dev/video.reorderAlbums +func (vk *VK) VideoReorderAlbums(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.reorderAlbums", &response, params) + return +} + +// VideoReorderVideos reorders the video in the video album. +// +// https://vk.com/dev/video.reorderVideos +func (vk *VK) VideoReorderVideos(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.reorderVideos", &response, params) + return +} + +// VideoReport reports (submits a complaint about) a video. +// +// https://vk.com/dev/video.report +func (vk *VK) VideoReport(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.report", &response, params) + return +} + +// VideoReportComment reports (submits a complaint about) a comment on a video. +// +// https://vk.com/dev/video.reportComment +func (vk *VK) VideoReportComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.reportComment", &response, params) + return +} + +// VideoRestore restores a previously deleted video. +// +// https://vk.com/dev/video.restore +func (vk *VK) VideoRestore(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.restore", &response, params) + return +} + +// VideoRestoreComment restores a previously deleted comment on a video. +// +// https://vk.com/dev/video.restoreComment +func (vk *VK) VideoRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("video.restoreComment", &response, params) + return +} + +// VideoSaveResponse struct. +type VideoSaveResponse object.VideoSaveResult + +// VideoSave returns a server address (required for upload) and video data. +// +// https://vk.com/dev/video.save +func (vk *VK) VideoSave(params Params) (response VideoSaveResponse, err error) { + err = vk.RequestUnmarshal("video.save", &response, params) + return +} + +// VideoSearchResponse struct. +type VideoSearchResponse struct { + Count int `json:"count"` + Items []object.VideoVideo `json:"items"` +} + +// VideoSearch returns a list of videos under the set search criterion. +// +// extended=0 +// +// https://vk.com/dev/video.search +func (vk *VK) VideoSearch(params Params) (response VideoSearchResponse, err error) { + err = vk.RequestUnmarshal("video.search", &response, params, Params{"extended": false}) + + return +} + +// VideoSearchExtendedResponse struct. +type VideoSearchExtendedResponse struct { + Count int `json:"count"` + Items []object.VideoVideo `json:"items"` + object.ExtendedResponse +} + +// VideoSearchExtended returns a list of videos under the set search criterion. +// +// extended=1 +// +// https://vk.com/dev/video.search +func (vk *VK) VideoSearchExtended(params Params) (response VideoSearchExtendedResponse, err error) { + err = vk.RequestUnmarshal("video.search", &response, params, Params{"extended": true}) + + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/wall.go b/vendor/github.com/SevereCloud/vksdk/v2/api/wall.go new file mode 100644 index 00000000..e951a749 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/wall.go @@ -0,0 +1,383 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// WallCheckCopyrightLink method. +// +// https://vk.com/dev/wall.checkCopyrightLink +func (vk *VK) WallCheckCopyrightLink(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.checkCopyrightLink", &response, params) + return +} + +// WallCloseComments turn off post commenting. +// +// https://vk.com/dev/wall.closeComments +func (vk *VK) WallCloseComments(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.closeComments", &response, params) + return +} + +// WallCreateCommentResponse struct. +type WallCreateCommentResponse struct { + CommentID int `json:"comment_id"` + ParentsStack []int `json:"parents_stack"` +} + +// WallCreateComment adds a comment to a post on a user wall or community wall. +// +// https://vk.com/dev/wall.createComment +func (vk *VK) WallCreateComment(params Params) (response WallCreateCommentResponse, err error) { + err = vk.RequestUnmarshal("wall.createComment", &response, params) + return +} + +// WallDelete deletes a post from a user wall or community wall. +// +// https://vk.com/dev/wall.delete +func (vk *VK) WallDelete(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.delete", &response, params) + return +} + +// WallDeleteComment deletes a comment on a post on a user wall or community wall. +// +// https://vk.com/dev/wall.deleteComment +func (vk *VK) WallDeleteComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.deleteComment", &response, params) + return +} + +// WallEditResponse struct. +type WallEditResponse struct { + PostID int `json:"post_id"` +} + +// WallEdit edits a post on a user wall or community wall. +// +// https://vk.com/dev/wall.edit +func (vk *VK) WallEdit(params Params) (response WallEditResponse, err error) { + err = vk.RequestUnmarshal("wall.edit", &response, params) + return +} + +// WallEditAdsStealth allows to edit hidden post. +// +// https://vk.com/dev/wall.editAdsStealth +func (vk *VK) WallEditAdsStealth(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.editAdsStealth", &response, params) + return +} + +// WallEditComment edits a comment on a user wall or community wall. +// +// https://vk.com/dev/wall.editComment +func (vk *VK) WallEditComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.editComment", &response, params) + return +} + +// WallGetResponse struct. +type WallGetResponse struct { + Count int `json:"count"` + Items []object.WallWallpost `json:"items"` +} + +// WallGet returns a list of posts on a user wall or community wall. +// +// extended=0 +// +// https://vk.com/dev/wall.get +func (vk *VK) WallGet(params Params) (response WallGetResponse, err error) { + err = vk.RequestUnmarshal("wall.get", &response, params, Params{"extended": false}) + + return +} + +// WallGetExtendedResponse struct. +type WallGetExtendedResponse struct { + Count int `json:"count"` + Items []object.WallWallpost `json:"items"` + object.ExtendedResponse +} + +// WallGetExtended returns a list of posts on a user wall or community wall. +// +// extended=1 +// +// https://vk.com/dev/wall.get +func (vk *VK) WallGetExtended(params Params) (response WallGetExtendedResponse, err error) { + err = vk.RequestUnmarshal("wall.get", &response, params, Params{"extended": true}) + + return +} + +// WallGetByIDResponse struct. +type WallGetByIDResponse []object.WallWallpost + +// WallGetByID returns a list of posts from user or community walls by their IDs. +// +// extended=0 +// +// https://vk.com/dev/wall.getById +func (vk *VK) WallGetByID(params Params) (response WallGetByIDResponse, err error) { + err = vk.RequestUnmarshal("wall.getById", &response, params, Params{"extended": false}) + + return +} + +// WallGetByIDExtendedResponse struct. +type WallGetByIDExtendedResponse struct { + Items []object.WallWallpost `json:"items"` + object.ExtendedResponse +} + +// WallGetByIDExtended returns a list of posts from user or community walls by their IDs. +// +// extended=1 +// +// https://vk.com/dev/wall.getById +func (vk *VK) WallGetByIDExtended(params Params) (response WallGetByIDExtendedResponse, err error) { + err = vk.RequestUnmarshal("wall.getById", &response, params, Params{"extended": true}) + + return +} + +// WallGetCommentResponse struct. +type WallGetCommentResponse struct { + Items []object.WallWallComment `json:"items"` + CanPost object.BaseBoolInt `json:"can_post"` + ShowReplyButton object.BaseBoolInt `json:"show_reply_button"` + GroupsCanPost object.BaseBoolInt `json:"groups_can_post"` + CurrentLevelCount int `json:"current_level_count"` +} + +// WallGetComment allows to obtain wall comment info. +// +// extended=0 +// +// https://vk.com/dev/wall.getComment +func (vk *VK) WallGetComment(params Params) (response WallGetCommentResponse, err error) { + err = vk.RequestUnmarshal("wall.getComment", &response, params, Params{"extended": false}) + + return +} + +// WallGetCommentExtendedResponse struct. +type WallGetCommentExtendedResponse struct { + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` + CanPost object.BaseBoolInt `json:"can_post"` + ShowReplyButton object.BaseBoolInt `json:"show_reply_button"` + GroupsCanPost object.BaseBoolInt `json:"groups_can_post"` + CurrentLevelCount int `json:"current_level_count"` + Profiles []object.UsersUser `json:"profiles"` + Groups []object.GroupsGroup `json:"groups"` +} + +// WallGetCommentExtended allows to obtain wall comment info. +// +// extended=1 +// +// https://vk.com/dev/wall.getComment +func (vk *VK) WallGetCommentExtended(params Params) (response WallGetCommentExtendedResponse, err error) { + err = vk.RequestUnmarshal("wall.getComment", &response, params, Params{"extended": true}) + + return +} + +// WallGetCommentsResponse struct. +type WallGetCommentsResponse struct { + CanPost object.BaseBoolInt `json:"can_post"` + ShowReplyButton object.BaseBoolInt `json:"show_reply_button"` + GroupsCanPost object.BaseBoolInt `json:"groups_can_post"` + CurrentLevelCount int `json:"current_level_count"` + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` +} + +// WallGetComments returns a list of comments on a post on a user wall or community wall. +// +// extended=0 +// +// https://vk.com/dev/wall.getComments +func (vk *VK) WallGetComments(params Params) (response WallGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("wall.getComments", &response, params, Params{"extended": false}) + + return +} + +// WallGetCommentsExtendedResponse struct. +type WallGetCommentsExtendedResponse struct { + CanPost object.BaseBoolInt `json:"can_post"` + ShowReplyButton object.BaseBoolInt `json:"show_reply_button"` + GroupsCanPost object.BaseBoolInt `json:"groups_can_post"` + CurrentLevelCount int `json:"current_level_count"` + Count int `json:"count"` + Items []object.WallWallComment `json:"items"` + object.ExtendedResponse +} + +// WallGetCommentsExtended returns a list of comments on a post on a user wall or community wall. +// +// extended=1 +// +// https://vk.com/dev/wall.getComments +func (vk *VK) WallGetCommentsExtended(params Params) (response WallGetCommentsExtendedResponse, err error) { + err = vk.RequestUnmarshal("wall.getComments", &response, params, Params{"extended": true}) + + return +} + +// WallGetRepostsResponse struct. +type WallGetRepostsResponse struct { + Items []object.WallWallpost `json:"items"` + object.ExtendedResponse +} + +// WallGetReposts returns information about reposts of a post on user wall or community wall. +// +// https://vk.com/dev/wall.getReposts +func (vk *VK) WallGetReposts(params Params) (response WallGetRepostsResponse, err error) { + err = vk.RequestUnmarshal("wall.getReposts", &response, params) + return +} + +// WallOpenComments includes posting comments. +// +// https://vk.com/dev/wall.openComments +func (vk *VK) WallOpenComments(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.openComments", &response, params) + return +} + +// WallPin pins the post on wall. +// +// https://vk.com/dev/wall.pin +func (vk *VK) WallPin(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.pin", &response, params) + return +} + +// WallPostResponse struct. +type WallPostResponse struct { + PostID int `json:"post_id"` +} + +// WallPost adds a new post on a user wall or community wall.Can also be used to publish suggested or scheduled posts. +// +// https://vk.com/dev/wall.post +func (vk *VK) WallPost(params Params) (response WallPostResponse, err error) { + err = vk.RequestUnmarshal("wall.post", &response, params) + return +} + +// WallPostAdsStealthResponse struct. +type WallPostAdsStealthResponse struct { + PostID int `json:"post_id"` +} + +// WallPostAdsStealth allows to create hidden post which will +// not be shown on the community's wall and can be used for creating +// an ad with type "Community post". +// +// https://vk.com/dev/wall.postAdsStealth +func (vk *VK) WallPostAdsStealth(params Params) (response WallPostAdsStealthResponse, err error) { + err = vk.RequestUnmarshal("wall.postAdsStealth", &response, params) + return +} + +// WallReportComment reports (submits a complaint about) a comment on a post on a user wall or community wall. +// +// https://vk.com/dev/wall.reportComment +func (vk *VK) WallReportComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.reportComment", &response, params) + return +} + +// WallReportPost reports (submits a complaint about) a post on a user wall or community wall. +// +// https://vk.com/dev/wall.reportPost +func (vk *VK) WallReportPost(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.reportPost", &response, params) + return +} + +// WallRepostResponse struct. +type WallRepostResponse struct { + Success int `json:"success"` + PostID int `json:"post_id"` + RepostsCount int `json:"reposts_count"` + LikesCount int `json:"likes_count"` + WallRepostCount int `json:"wall_repost_count"` + MailRepostCount int `json:"mail_repost_count"` +} + +// WallRepost reposts ( copies) an object to a user wall or community wall. +// +// https://vk.com/dev/wall.repost +func (vk *VK) WallRepost(params Params) (response WallRepostResponse, err error) { + err = vk.RequestUnmarshal("wall.repost", &response, params) + return +} + +// WallRestore restores a post deleted from a user wall or community wall. +// +// https://vk.com/dev/wall.restore +func (vk *VK) WallRestore(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.restore", &response, params) + return +} + +// WallRestoreComment restores a comment deleted from a user wall or community wall. +// +// https://vk.com/dev/wall.restoreComment +func (vk *VK) WallRestoreComment(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.restoreComment", &response, params) + return +} + +// WallSearchResponse struct. +type WallSearchResponse struct { + Count int `json:"count"` + Items []object.WallWallpost `json:"items"` +} + +// WallSearch allows to search posts on user or community walls. +// +// extended=0 +// +// https://vk.com/dev/wall.search +func (vk *VK) WallSearch(params Params) (response WallSearchResponse, err error) { + err = vk.RequestUnmarshal("wall.search", &response, params, Params{"extended": false}) + + return +} + +// WallSearchExtendedResponse struct. +type WallSearchExtendedResponse struct { + Count int `json:"count"` + Items []object.WallWallpost `json:"items"` + object.ExtendedResponse +} + +// WallSearchExtended allows to search posts on user or community walls. +// +// extended=1 +// +// https://vk.com/dev/wall.search +func (vk *VK) WallSearchExtended(params Params) (response WallSearchExtendedResponse, err error) { + err = vk.RequestUnmarshal("wall.search", &response, params, Params{"extended": true}) + + return +} + +// WallUnpin unpins the post on wall. +// +// https://vk.com/dev/wall.unpin +func (vk *VK) WallUnpin(params Params) (response int, err error) { + err = vk.RequestUnmarshal("wall.unpin", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/api/widgets.go b/vendor/github.com/SevereCloud/vksdk/v2/api/widgets.go new file mode 100644 index 00000000..a5f83f0c --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/api/widgets.go @@ -0,0 +1,33 @@ +package api // import "github.com/SevereCloud/vksdk/v2/api" + +import ( + "github.com/SevereCloud/vksdk/v2/object" +) + +// WidgetsGetCommentsResponse struct. +type WidgetsGetCommentsResponse struct { + Count int `json:"count"` + Posts []object.WidgetsWidgetComment `json:"posts"` +} + +// WidgetsGetComments gets a list of comments for the page added through the Comments widget. +// +// https://vk.com/dev/widgets.getComments +func (vk *VK) WidgetsGetComments(params Params) (response WidgetsGetCommentsResponse, err error) { + err = vk.RequestUnmarshal("widgets.getComments", &response, params) + return +} + +// WidgetsGetPagesResponse struct. +type WidgetsGetPagesResponse struct { + Count int `json:"count"` + Pages []object.WidgetsWidgetPage `json:"pages"` +} + +// WidgetsGetPages gets a list of application/site pages where the Comments widget or Like widget is installed. +// +// https://vk.com/dev/widgets.getPages +func (vk *VK) WidgetsGetPages(params Params) (response WidgetsGetPagesResponse, err error) { + err = vk.RequestUnmarshal("widgets.getPages", &response, params) + return +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/doc.go b/vendor/github.com/SevereCloud/vksdk/v2/doc.go new file mode 100644 index 00000000..7bb83d0c --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/doc.go @@ -0,0 +1,12 @@ +/* +Package vksdk implements the basic VK API functions. + +Source https://github.com/SevereCloud/vksdk +*/ +package vksdk + +// Module constants. +const ( + Version = "2.9.0" + API = "5.126" +) diff --git a/vendor/github.com/SevereCloud/vksdk/v2/events/context.go b/vendor/github.com/SevereCloud/vksdk/v2/events/context.go new file mode 100644 index 00000000..91264cc7 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/events/context.go @@ -0,0 +1,17 @@ +package events // import "github.com/SevereCloud/vksdk/v2/events" + +import ( + "context" + + "github.com/SevereCloud/vksdk/v2/internal" +) + +// GroupIDFromContext returns the GroupID from context. +func GroupIDFromContext(ctx context.Context) int { + return ctx.Value(internal.GroupIDKey).(int) +} + +// EventIDFromContext returns the EventID from context. +func EventIDFromContext(ctx context.Context) string { + return ctx.Value(internal.EventIDKey).(string) +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/events/events.go b/vendor/github.com/SevereCloud/vksdk/v2/events/events.go new file mode 100644 index 00000000..3f907d48 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/events/events.go @@ -0,0 +1,1241 @@ +/* +Package events for community events handling. + +See more https://vk.com/dev/groups_events +*/ +package events // import "github.com/SevereCloud/vksdk/v2/events" + +import ( + "context" + "encoding/json" + + "github.com/SevereCloud/vksdk/v2/internal" +) + +// EventType type. +type EventType string + +// EventType list. +const ( + EventConfirmation = "confirmation" + EventMessageNew = "message_new" + EventMessageReply = "message_reply" + EventMessageEdit = "message_edit" + EventMessageAllow = "message_allow" + EventMessageDeny = "message_deny" + EventMessageTypingState = "message_typing_state" + EventMessageEvent = "message_event" + EventPhotoNew = "photo_new" + EventPhotoCommentNew = "photo_comment_new" + EventPhotoCommentEdit = "photo_comment_edit" + EventPhotoCommentRestore = "photo_comment_restore" + EventPhotoCommentDelete = "photo_comment_delete" + EventAudioNew = "audio_new" + EventVideoNew = "video_new" + EventVideoCommentNew = "video_comment_new" + EventVideoCommentEdit = "video_comment_edit" + EventVideoCommentRestore = "video_comment_restore" + EventVideoCommentDelete = "video_comment_delete" + EventWallPostNew = "wall_post_new" + EventWallRepost = "wall_repost" + EventWallReplyNew = "wall_reply_new" + EventWallReplyEdit = "wall_reply_edit" + EventWallReplyRestore = "wall_reply_restore" + EventWallReplyDelete = "wall_reply_delete" + EventBoardPostNew = "board_post_new" + EventBoardPostEdit = "board_post_edit" + EventBoardPostRestore = "board_post_restore" + EventBoardPostDelete = "board_post_delete" + EventMarketCommentNew = "market_comment_new" + EventMarketCommentEdit = "market_comment_edit" + EventMarketCommentRestore = "market_comment_restore" + EventMarketCommentDelete = "market_comment_delete" + EventMarketOrderNew = "market_order_new" + EventMarketOrderEdit = "market_order_edit" + EventGroupLeave = "group_leave" + EventGroupJoin = "group_join" + EventUserBlock = "user_block" + EventUserUnblock = "user_unblock" + EventPollVoteNew = "poll_vote_new" + EventGroupOfficersEdit = "group_officers_edit" + EventGroupChangeSettings = "group_change_settings" + EventGroupChangePhoto = "group_change_photo" + EventVkpayTransaction = "vkpay_transaction" + EventLeadFormsNew = "lead_forms_new" + EventAppPayload = "app_payload" + EventMessageRead = "message_read" + EventLikeAdd = "like_add" + EventLikeRemove = "like_remove" + EventDonutSubscriptionCreate = "donut_subscription_create" + EventDonutSubscriptionProlonged = "donut_subscription_prolonged" + EventDonutSubscriptionExpired = "donut_subscription_expired" + EventDonutSubscriptionCancelled = "donut_subscription_cancelled" + EventDonutSubscriptionPriceChanged = "donut_subscription_price_changed" + EventDonutMoneyWithdraw = "donut_money_withdraw" + EventDonutMoneyWithdrawError = "donut_money_withdraw_error" +) + +// GroupEvent struct. +type GroupEvent struct { + Type EventType `json:"type"` + Object json.RawMessage `json:"object"` + GroupID int `json:"group_id"` + EventID string `json:"event_id"` + Secret string `json:"secret"` +} + +// FuncList struct. +type FuncList struct { + messageNew []func(context.Context, MessageNewObject) + messageReply []func(context.Context, MessageReplyObject) + messageEdit []func(context.Context, MessageEditObject) + messageAllow []func(context.Context, MessageAllowObject) + messageDeny []func(context.Context, MessageDenyObject) + messageTypingState []func(context.Context, MessageTypingStateObject) + messageEvent []func(context.Context, MessageEventObject) + photoNew []func(context.Context, PhotoNewObject) + photoCommentNew []func(context.Context, PhotoCommentNewObject) + photoCommentEdit []func(context.Context, PhotoCommentEditObject) + photoCommentRestore []func(context.Context, PhotoCommentRestoreObject) + photoCommentDelete []func(context.Context, PhotoCommentDeleteObject) + audioNew []func(context.Context, AudioNewObject) + videoNew []func(context.Context, VideoNewObject) + videoCommentNew []func(context.Context, VideoCommentNewObject) + videoCommentEdit []func(context.Context, VideoCommentEditObject) + videoCommentRestore []func(context.Context, VideoCommentRestoreObject) + videoCommentDelete []func(context.Context, VideoCommentDeleteObject) + wallPostNew []func(context.Context, WallPostNewObject) + wallRepost []func(context.Context, WallRepostObject) + wallReplyNew []func(context.Context, WallReplyNewObject) + wallReplyEdit []func(context.Context, WallReplyEditObject) + wallReplyRestore []func(context.Context, WallReplyRestoreObject) + wallReplyDelete []func(context.Context, WallReplyDeleteObject) + boardPostNew []func(context.Context, BoardPostNewObject) + boardPostEdit []func(context.Context, BoardPostEditObject) + boardPostRestore []func(context.Context, BoardPostRestoreObject) + boardPostDelete []func(context.Context, BoardPostDeleteObject) + marketCommentNew []func(context.Context, MarketCommentNewObject) + marketCommentEdit []func(context.Context, MarketCommentEditObject) + marketCommentRestore []func(context.Context, MarketCommentRestoreObject) + marketCommentDelete []func(context.Context, MarketCommentDeleteObject) + marketOrderNew []func(context.Context, MarketOrderNewObject) + marketOrderEdit []func(context.Context, MarketOrderEditObject) + groupLeave []func(context.Context, GroupLeaveObject) + groupJoin []func(context.Context, GroupJoinObject) + userBlock []func(context.Context, UserBlockObject) + userUnblock []func(context.Context, UserUnblockObject) + pollVoteNew []func(context.Context, PollVoteNewObject) + groupOfficersEdit []func(context.Context, GroupOfficersEditObject) + groupChangeSettings []func(context.Context, GroupChangeSettingsObject) + groupChangePhoto []func(context.Context, GroupChangePhotoObject) + vkpayTransaction []func(context.Context, VkpayTransactionObject) + leadFormsNew []func(context.Context, LeadFormsNewObject) + appPayload []func(context.Context, AppPayloadObject) + messageRead []func(context.Context, MessageReadObject) + likeAdd []func(context.Context, LikeAddObject) + likeRemove []func(context.Context, LikeRemoveObject) + donutSubscriptionCreate []func(context.Context, DonutSubscriptionCreateObject) + donutSubscriptionProlonged []func(context.Context, DonutSubscriptionProlongedObject) + donutSubscriptionExpired []func(context.Context, DonutSubscriptionExpiredObject) + donutSubscriptionCancelled []func(context.Context, DonutSubscriptionCancelledObject) + donutSubscriptionPriceChanged []func(context.Context, DonutSubscriptionPriceChangedObject) + donutMoneyWithdraw []func(context.Context, DonutMoneyWithdrawObject) + donutMoneyWithdrawError []func(context.Context, DonutMoneyWithdrawErrorObject) + special map[EventType][]func(context.Context, GroupEvent) + eventsList []EventType + + goroutine bool +} + +// NewFuncList returns a new FuncList. +func NewFuncList() *FuncList { + return &FuncList{ + special: make(map[EventType][]func(context.Context, GroupEvent)), + } +} + +// Handler group event handler. +func (fl FuncList) Handler(ctx context.Context, e GroupEvent) error { // nolint:gocyclo + ctx = context.WithValue(ctx, internal.GroupIDKey, e.GroupID) + ctx = context.WithValue(ctx, internal.EventIDKey, e.EventID) + + if sliceFunc, ok := fl.special[e.Type]; ok { + for _, f := range sliceFunc { + if fl.goroutine { + go func() { f(ctx, e) }() + } else { + f(ctx, e) + } + } + } + + switch e.Type { + case EventMessageNew: + var obj MessageNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageReply: + var obj MessageReplyObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageReply { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageEdit: + var obj MessageEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageAllow: + var obj MessageAllowObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageAllow { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageDeny: + var obj MessageDenyObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageDeny { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageTypingState: // На основе ответа + var obj MessageTypingStateObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageTypingState { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageEvent: + var obj MessageEventObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageEvent { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPhotoNew: + var obj PhotoNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.photoNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPhotoCommentNew: + var obj PhotoCommentNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.photoCommentNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPhotoCommentEdit: + var obj PhotoCommentEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.photoCommentEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPhotoCommentRestore: + var obj PhotoCommentRestoreObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.photoCommentRestore { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPhotoCommentDelete: + var obj PhotoCommentDeleteObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.photoCommentDelete { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventAudioNew: + var obj AudioNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.audioNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVideoNew: + var obj VideoNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.videoNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVideoCommentNew: + var obj VideoCommentNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.videoCommentNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVideoCommentEdit: + var obj VideoCommentEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.videoCommentEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVideoCommentRestore: + var obj VideoCommentRestoreObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.videoCommentRestore { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVideoCommentDelete: + var obj VideoCommentDeleteObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.videoCommentDelete { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallPostNew: + var obj WallPostNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallPostNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallRepost: + var obj WallRepostObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallRepost { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallReplyNew: + var obj WallReplyNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallReplyNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallReplyEdit: + var obj WallReplyEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallReplyEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallReplyRestore: + var obj WallReplyRestoreObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallReplyRestore { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventWallReplyDelete: + var obj WallReplyDeleteObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.wallReplyDelete { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventBoardPostNew: + var obj BoardPostNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.boardPostNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventBoardPostEdit: + var obj BoardPostEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.boardPostEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventBoardPostRestore: + var obj BoardPostRestoreObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.boardPostRestore { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventBoardPostDelete: + var obj BoardPostDeleteObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.boardPostDelete { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketCommentNew: + var obj MarketCommentNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketCommentNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketCommentEdit: + var obj MarketCommentEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketCommentEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketCommentRestore: + var obj MarketCommentRestoreObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketCommentRestore { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketCommentDelete: + var obj MarketCommentDeleteObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketCommentDelete { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketOrderNew: + var obj MarketOrderNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketOrderNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMarketOrderEdit: + var obj MarketOrderEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.marketOrderEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventGroupLeave: + var obj GroupLeaveObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.groupLeave { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventGroupJoin: + var obj GroupJoinObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.groupJoin { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventUserBlock: + var obj UserBlockObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.userBlock { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventUserUnblock: + var obj UserUnblockObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.userUnblock { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventPollVoteNew: + var obj PollVoteNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.pollVoteNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventGroupOfficersEdit: + var obj GroupOfficersEditObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.groupOfficersEdit { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventGroupChangeSettings: + var obj GroupChangeSettingsObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.groupChangeSettings { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventGroupChangePhoto: + var obj GroupChangePhotoObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.groupChangePhoto { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventVkpayTransaction: + var obj VkpayTransactionObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.vkpayTransaction { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventLeadFormsNew: + var obj LeadFormsNewObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.leadFormsNew { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventAppPayload: + var obj AppPayloadObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.appPayload { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventMessageRead: + var obj MessageReadObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.messageRead { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventLikeAdd: + var obj LikeAddObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.likeAdd { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventLikeRemove: + var obj LikeRemoveObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.likeRemove { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutSubscriptionCreate: + var obj DonutSubscriptionCreateObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutSubscriptionCreate { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutSubscriptionProlonged: + var obj DonutSubscriptionProlongedObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutSubscriptionProlonged { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutSubscriptionExpired: + var obj DonutSubscriptionExpiredObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutSubscriptionExpired { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutSubscriptionCancelled: + var obj DonutSubscriptionCancelledObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutSubscriptionCancelled { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutSubscriptionPriceChanged: + var obj DonutSubscriptionPriceChangedObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutSubscriptionPriceChanged { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutMoneyWithdraw: + var obj DonutMoneyWithdrawObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutMoneyWithdraw { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + case EventDonutMoneyWithdrawError: + var obj DonutMoneyWithdrawErrorObject + if err := json.Unmarshal(e.Object, &obj); err != nil { + return err + } + + for _, f := range fl.donutMoneyWithdrawError { + if fl.goroutine { + go func() { f(ctx, obj) }() + } else { + f(ctx, obj) + } + } + } + + return nil +} + +// ListEvents return list of events. +func (fl FuncList) ListEvents() []EventType { + return fl.eventsList +} + +// Goroutine invoke functions in a goroutine. +func (fl *FuncList) Goroutine(v bool) { + fl.goroutine = v +} + +// OnEvent handler. +func (fl *FuncList) OnEvent(eventType EventType, f func(context.Context, GroupEvent)) { + if fl.special == nil { + fl.special = make(map[EventType][]func(context.Context, GroupEvent)) + } + + fl.special[eventType] = append(fl.special[eventType], f) + fl.eventsList = append(fl.eventsList, eventType) +} + +// MessageNew handler. +func (fl *FuncList) MessageNew(f func(context.Context, MessageNewObject)) { + fl.messageNew = append(fl.messageNew, f) + fl.eventsList = append(fl.eventsList, EventMessageNew) +} + +// MessageReply handler. +func (fl *FuncList) MessageReply(f func(context.Context, MessageReplyObject)) { + fl.messageReply = append(fl.messageReply, f) + fl.eventsList = append(fl.eventsList, EventMessageReply) +} + +// MessageEdit handler. +func (fl *FuncList) MessageEdit(f func(context.Context, MessageEditObject)) { + fl.messageEdit = append(fl.messageEdit, f) + fl.eventsList = append(fl.eventsList, EventMessageEdit) +} + +// MessageAllow handler. +func (fl *FuncList) MessageAllow(f func(context.Context, MessageAllowObject)) { + fl.messageAllow = append(fl.messageAllow, f) + fl.eventsList = append(fl.eventsList, EventMessageAllow) +} + +// MessageDeny handler. +func (fl *FuncList) MessageDeny(f func(context.Context, MessageDenyObject)) { + fl.messageDeny = append(fl.messageDeny, f) + fl.eventsList = append(fl.eventsList, EventMessageDeny) +} + +// MessageTypingState handler. +func (fl *FuncList) MessageTypingState(f func(context.Context, MessageTypingStateObject)) { + fl.messageTypingState = append(fl.messageTypingState, f) + fl.eventsList = append(fl.eventsList, EventMessageTypingState) +} + +// MessageEvent handler. +func (fl *FuncList) MessageEvent(f func(context.Context, MessageEventObject)) { + fl.messageEvent = append(fl.messageEvent, f) + fl.eventsList = append(fl.eventsList, EventMessageEvent) +} + +// PhotoNew handler. +func (fl *FuncList) PhotoNew(f func(context.Context, PhotoNewObject)) { + fl.photoNew = append(fl.photoNew, f) + fl.eventsList = append(fl.eventsList, EventPhotoNew) +} + +// PhotoCommentNew handler. +func (fl *FuncList) PhotoCommentNew(f func(context.Context, PhotoCommentNewObject)) { + fl.photoCommentNew = append(fl.photoCommentNew, f) + fl.eventsList = append(fl.eventsList, EventPhotoCommentNew) +} + +// PhotoCommentEdit handler. +func (fl *FuncList) PhotoCommentEdit(f func(context.Context, PhotoCommentEditObject)) { + fl.photoCommentEdit = append(fl.photoCommentEdit, f) + fl.eventsList = append(fl.eventsList, EventPhotoCommentEdit) +} + +// PhotoCommentRestore handler. +func (fl *FuncList) PhotoCommentRestore(f func(context.Context, PhotoCommentRestoreObject)) { + fl.photoCommentRestore = append(fl.photoCommentRestore, f) + fl.eventsList = append(fl.eventsList, EventPhotoCommentRestore) +} + +// PhotoCommentDelete handler. +func (fl *FuncList) PhotoCommentDelete(f func(context.Context, PhotoCommentDeleteObject)) { + fl.photoCommentDelete = append(fl.photoCommentDelete, f) + fl.eventsList = append(fl.eventsList, EventPhotoCommentDelete) +} + +// AudioNew handler. +func (fl *FuncList) AudioNew(f func(context.Context, AudioNewObject)) { + fl.audioNew = append(fl.audioNew, f) + fl.eventsList = append(fl.eventsList, EventAudioNew) +} + +// VideoNew handler. +func (fl *FuncList) VideoNew(f func(context.Context, VideoNewObject)) { + fl.videoNew = append(fl.videoNew, f) + fl.eventsList = append(fl.eventsList, EventVideoNew) +} + +// VideoCommentNew handler. +func (fl *FuncList) VideoCommentNew(f func(context.Context, VideoCommentNewObject)) { + fl.videoCommentNew = append(fl.videoCommentNew, f) + fl.eventsList = append(fl.eventsList, EventVideoCommentNew) +} + +// VideoCommentEdit handler. +func (fl *FuncList) VideoCommentEdit(f func(context.Context, VideoCommentEditObject)) { + fl.videoCommentEdit = append(fl.videoCommentEdit, f) + fl.eventsList = append(fl.eventsList, EventVideoCommentEdit) +} + +// VideoCommentRestore handler. +func (fl *FuncList) VideoCommentRestore(f func(context.Context, VideoCommentRestoreObject)) { + fl.videoCommentRestore = append(fl.videoCommentRestore, f) + fl.eventsList = append(fl.eventsList, EventVideoCommentRestore) +} + +// VideoCommentDelete handler. +func (fl *FuncList) VideoCommentDelete(f func(context.Context, VideoCommentDeleteObject)) { + fl.videoCommentDelete = append(fl.videoCommentDelete, f) + fl.eventsList = append(fl.eventsList, EventVideoCommentDelete) +} + +// WallPostNew handler. +func (fl *FuncList) WallPostNew(f func(context.Context, WallPostNewObject)) { + fl.wallPostNew = append(fl.wallPostNew, f) + fl.eventsList = append(fl.eventsList, EventWallPostNew) +} + +// WallRepost handler. +func (fl *FuncList) WallRepost(f func(context.Context, WallRepostObject)) { + fl.wallRepost = append(fl.wallRepost, f) + fl.eventsList = append(fl.eventsList, EventWallRepost) +} + +// WallReplyNew handler. +func (fl *FuncList) WallReplyNew(f func(context.Context, WallReplyNewObject)) { + fl.wallReplyNew = append(fl.wallReplyNew, f) + fl.eventsList = append(fl.eventsList, EventWallReplyNew) +} + +// WallReplyEdit handler. +func (fl *FuncList) WallReplyEdit(f func(context.Context, WallReplyEditObject)) { + fl.wallReplyEdit = append(fl.wallReplyEdit, f) + fl.eventsList = append(fl.eventsList, EventWallReplyEdit) +} + +// WallReplyRestore handler. +func (fl *FuncList) WallReplyRestore(f func(context.Context, WallReplyRestoreObject)) { + fl.wallReplyRestore = append(fl.wallReplyRestore, f) + fl.eventsList = append(fl.eventsList, EventWallReplyRestore) +} + +// WallReplyDelete handler. +func (fl *FuncList) WallReplyDelete(f func(context.Context, WallReplyDeleteObject)) { + fl.wallReplyDelete = append(fl.wallReplyDelete, f) + fl.eventsList = append(fl.eventsList, EventWallReplyDelete) +} + +// BoardPostNew handler. +func (fl *FuncList) BoardPostNew(f func(context.Context, BoardPostNewObject)) { + fl.boardPostNew = append(fl.boardPostNew, f) + fl.eventsList = append(fl.eventsList, EventBoardPostNew) +} + +// BoardPostEdit handler. +func (fl *FuncList) BoardPostEdit(f func(context.Context, BoardPostEditObject)) { + fl.boardPostEdit = append(fl.boardPostEdit, f) + fl.eventsList = append(fl.eventsList, EventBoardPostEdit) +} + +// BoardPostRestore handler. +func (fl *FuncList) BoardPostRestore(f func(context.Context, BoardPostRestoreObject)) { + fl.boardPostRestore = append(fl.boardPostRestore, f) + fl.eventsList = append(fl.eventsList, EventBoardPostRestore) +} + +// BoardPostDelete handler. +func (fl *FuncList) BoardPostDelete(f func(context.Context, BoardPostDeleteObject)) { + fl.boardPostDelete = append(fl.boardPostDelete, f) + fl.eventsList = append(fl.eventsList, EventBoardPostDelete) +} + +// MarketCommentNew handler. +func (fl *FuncList) MarketCommentNew(f func(context.Context, MarketCommentNewObject)) { + fl.marketCommentNew = append(fl.marketCommentNew, f) + fl.eventsList = append(fl.eventsList, EventMarketCommentNew) +} + +// MarketCommentEdit handler. +func (fl *FuncList) MarketCommentEdit(f func(context.Context, MarketCommentEditObject)) { + fl.marketCommentEdit = append(fl.marketCommentEdit, f) + fl.eventsList = append(fl.eventsList, EventMarketCommentEdit) +} + +// MarketCommentRestore handler. +func (fl *FuncList) MarketCommentRestore(f func(context.Context, MarketCommentRestoreObject)) { + fl.marketCommentRestore = append(fl.marketCommentRestore, f) + fl.eventsList = append(fl.eventsList, EventMarketCommentRestore) +} + +// MarketCommentDelete handler. +func (fl *FuncList) MarketCommentDelete(f func(context.Context, MarketCommentDeleteObject)) { + fl.marketCommentDelete = append(fl.marketCommentDelete, f) + fl.eventsList = append(fl.eventsList, EventMarketCommentDelete) +} + +// MarketOrderNew handler. +func (fl *FuncList) MarketOrderNew(f func(context.Context, MarketOrderNewObject)) { + fl.marketOrderNew = append(fl.marketOrderNew, f) + fl.eventsList = append(fl.eventsList, EventMarketOrderNew) +} + +// MarketOrderEdit handler. +func (fl *FuncList) MarketOrderEdit(f func(context.Context, MarketOrderEditObject)) { + fl.marketOrderEdit = append(fl.marketOrderEdit, f) + fl.eventsList = append(fl.eventsList, EventMarketOrderEdit) +} + +// GroupLeave handler. +func (fl *FuncList) GroupLeave(f func(context.Context, GroupLeaveObject)) { + fl.groupLeave = append(fl.groupLeave, f) + fl.eventsList = append(fl.eventsList, EventGroupLeave) +} + +// GroupJoin handler. +func (fl *FuncList) GroupJoin(f func(context.Context, GroupJoinObject)) { + fl.groupJoin = append(fl.groupJoin, f) + fl.eventsList = append(fl.eventsList, EventGroupJoin) +} + +// UserBlock handler. +func (fl *FuncList) UserBlock(f func(context.Context, UserBlockObject)) { + fl.userBlock = append(fl.userBlock, f) + fl.eventsList = append(fl.eventsList, EventUserBlock) +} + +// UserUnblock handler. +func (fl *FuncList) UserUnblock(f func(context.Context, UserUnblockObject)) { + fl.userUnblock = append(fl.userUnblock, f) + fl.eventsList = append(fl.eventsList, EventUserUnblock) +} + +// PollVoteNew handler. +func (fl *FuncList) PollVoteNew(f func(context.Context, PollVoteNewObject)) { + fl.pollVoteNew = append(fl.pollVoteNew, f) + fl.eventsList = append(fl.eventsList, EventPollVoteNew) +} + +// GroupOfficersEdit handler. +func (fl *FuncList) GroupOfficersEdit(f func(context.Context, GroupOfficersEditObject)) { + fl.groupOfficersEdit = append(fl.groupOfficersEdit, f) + fl.eventsList = append(fl.eventsList, EventGroupOfficersEdit) +} + +// GroupChangeSettings handler. +func (fl *FuncList) GroupChangeSettings(f func(context.Context, GroupChangeSettingsObject)) { + fl.groupChangeSettings = append(fl.groupChangeSettings, f) + fl.eventsList = append(fl.eventsList, EventGroupChangeSettings) +} + +// GroupChangePhoto handler. +func (fl *FuncList) GroupChangePhoto(f func(context.Context, GroupChangePhotoObject)) { + fl.groupChangePhoto = append(fl.groupChangePhoto, f) + fl.eventsList = append(fl.eventsList, EventGroupChangePhoto) +} + +// VkpayTransaction handler. +func (fl *FuncList) VkpayTransaction(f func(context.Context, VkpayTransactionObject)) { + fl.vkpayTransaction = append(fl.vkpayTransaction, f) + fl.eventsList = append(fl.eventsList, EventVkpayTransaction) +} + +// LeadFormsNew handler. +func (fl *FuncList) LeadFormsNew(f func(context.Context, LeadFormsNewObject)) { + fl.leadFormsNew = append(fl.leadFormsNew, f) + fl.eventsList = append(fl.eventsList, EventLeadFormsNew) +} + +// AppPayload handler. +func (fl *FuncList) AppPayload(f func(context.Context, AppPayloadObject)) { + fl.appPayload = append(fl.appPayload, f) + fl.eventsList = append(fl.eventsList, EventAppPayload) +} + +// MessageRead handler. +func (fl *FuncList) MessageRead(f func(context.Context, MessageReadObject)) { + fl.messageRead = append(fl.messageRead, f) + fl.eventsList = append(fl.eventsList, EventMessageRead) +} + +// LikeAdd handler. +func (fl *FuncList) LikeAdd(f func(context.Context, LikeAddObject)) { + fl.likeAdd = append(fl.likeAdd, f) + fl.eventsList = append(fl.eventsList, EventLikeAdd) +} + +// LikeRemove handler. +func (fl *FuncList) LikeRemove(f func(context.Context, LikeRemoveObject)) { + fl.likeRemove = append(fl.likeRemove, f) + fl.eventsList = append(fl.eventsList, EventLikeRemove) +} + +// DonutSubscriptionCreate handler. +func (fl *FuncList) DonutSubscriptionCreate(f func(context.Context, DonutSubscriptionCreateObject)) { + fl.donutSubscriptionCreate = append(fl.donutSubscriptionCreate, f) + fl.eventsList = append(fl.eventsList, EventDonutSubscriptionCreate) +} + +// DonutSubscriptionProlonged handler. +func (fl *FuncList) DonutSubscriptionProlonged(f func(context.Context, DonutSubscriptionProlongedObject)) { + fl.donutSubscriptionProlonged = append(fl.donutSubscriptionProlonged, f) + fl.eventsList = append(fl.eventsList, EventDonutSubscriptionProlonged) +} + +// DonutSubscriptionExpired handler. +func (fl *FuncList) DonutSubscriptionExpired(f func(context.Context, DonutSubscriptionExpiredObject)) { + fl.donutSubscriptionExpired = append(fl.donutSubscriptionExpired, f) + fl.eventsList = append(fl.eventsList, EventDonutSubscriptionExpired) +} + +// DonutSubscriptionCancelled handler. +func (fl *FuncList) DonutSubscriptionCancelled(f func(context.Context, DonutSubscriptionCancelledObject)) { + fl.donutSubscriptionCancelled = append(fl.donutSubscriptionCancelled, f) + fl.eventsList = append(fl.eventsList, EventDonutSubscriptionCancelled) +} + +// DonutSubscriptionPriceChanged handler. +func (fl *FuncList) DonutSubscriptionPriceChanged(f func(context.Context, DonutSubscriptionPriceChangedObject)) { + fl.donutSubscriptionPriceChanged = append(fl.donutSubscriptionPriceChanged, f) + fl.eventsList = append(fl.eventsList, EventDonutSubscriptionPriceChanged) +} + +// DonutMoneyWithdraw handler. +func (fl *FuncList) DonutMoneyWithdraw(f func(context.Context, DonutMoneyWithdrawObject)) { + fl.donutMoneyWithdraw = append(fl.donutMoneyWithdraw, f) + fl.eventsList = append(fl.eventsList, EventDonutMoneyWithdraw) +} + +// DonutMoneyWithdrawError handler. +func (fl *FuncList) DonutMoneyWithdrawError(f func(context.Context, DonutMoneyWithdrawErrorObject)) { + fl.donutMoneyWithdrawError = append(fl.donutMoneyWithdrawError, f) + fl.eventsList = append(fl.eventsList, EventDonutMoneyWithdrawError) +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/events/objects.go b/vendor/github.com/SevereCloud/vksdk/v2/events/objects.go new file mode 100644 index 00000000..8cd94a91 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/events/objects.go @@ -0,0 +1,359 @@ +package events // import "github.com/SevereCloud/vksdk/v2/events" + +import ( + "encoding/json" + + "github.com/SevereCloud/vksdk/v2/object" +) + +// MessageNewObject struct. +type MessageNewObject struct { + Message object.MessagesMessage `json:"message"` + ClientInfo object.ClientInfo `json:"client_info"` +} + +// MessageReplyObject struct. +type MessageReplyObject object.MessagesMessage + +// MessageEditObject struct. +type MessageEditObject object.MessagesMessage + +// MessageAllowObject struct. +type MessageAllowObject struct { + UserID int `json:"user_id"` + Key string `json:"key"` +} + +// MessageDenyObject struct. +type MessageDenyObject struct { + UserID int `json:"user_id"` +} + +// MessageTypingStateObject struct. +type MessageTypingStateObject struct { + State string `json:"state"` + FromID int `json:"from_id"` + ToID int `json:"to_id"` +} + +// MessageEventObject struct. +type MessageEventObject struct { + UserID int `json:"user_id"` + PeerID int `json:"peer_id"` + EventID string `json:"event_id"` + Payload json.RawMessage `json:"payload"` + ConversationMessageID int `json:"conversation_message_id"` +} + +// PhotoNewObject struct. +type PhotoNewObject object.PhotosPhoto + +// PhotoCommentNewObject struct. +type PhotoCommentNewObject object.WallWallComment + +// PhotoCommentEditObject struct. +type PhotoCommentEditObject object.WallWallComment + +// PhotoCommentRestoreObject struct. +type PhotoCommentRestoreObject object.WallWallComment + +// PhotoCommentDeleteObject struct. +type PhotoCommentDeleteObject struct { + OwnerID int `json:"owner_id"` + ID int `json:"id"` + UserID int `json:"user_id"` + DeleterID int `json:"deleter_id"` + PhotoID int `json:"photo_id"` +} + +// AudioNewObject struct. +type AudioNewObject object.AudioAudio + +// VideoNewObject struct. +type VideoNewObject object.VideoVideo + +// VideoCommentNewObject struct. +type VideoCommentNewObject object.WallWallComment + +// VideoCommentEditObject struct. +type VideoCommentEditObject object.WallWallComment + +// VideoCommentRestoreObject struct. +type VideoCommentRestoreObject object.WallWallComment + +// VideoCommentDeleteObject struct. +type VideoCommentDeleteObject struct { + OwnerID int `json:"owner_id"` + ID int `json:"id"` + UserID int `json:"user_id"` + DeleterID int `json:"deleter_id"` + VideoID int `json:"video_id"` +} + +// WallPostNewObject struct. +type WallPostNewObject object.WallWallpost + +// WallRepostObject struct. +type WallRepostObject object.WallWallpost + +// WallReplyNewObject struct. +type WallReplyNewObject object.WallWallComment + +// WallReplyEditObject struct. +type WallReplyEditObject object.WallWallComment + +// WallReplyRestoreObject struct. +type WallReplyRestoreObject object.WallWallComment + +// WallReplyDeleteObject struct. +type WallReplyDeleteObject struct { + OwnerID int `json:"owner_id"` + ID int `json:"id"` + DeleterID int `json:"deleter_id"` + PostID int `json:"post_id"` +} + +// BoardPostNewObject struct. +type BoardPostNewObject object.BoardTopicComment + +// BoardPostEditObject struct. +type BoardPostEditObject object.BoardTopicComment + +// BoardPostRestoreObject struct. +type BoardPostRestoreObject object.BoardTopicComment + +// BoardPostDeleteObject struct. +type BoardPostDeleteObject struct { + TopicOwnerID int `json:"topic_owner_id"` + TopicID int `json:"topic_id"` + ID int `json:"id"` +} + +// MarketCommentNewObject struct. +type MarketCommentNewObject object.WallWallComment + +// MarketCommentEditObject struct. +type MarketCommentEditObject object.WallWallComment + +// MarketCommentRestoreObject struct. +type MarketCommentRestoreObject object.WallWallComment + +// MarketCommentDeleteObject struct. +type MarketCommentDeleteObject struct { + OwnerID int `json:"owner_id"` + ID int `json:"id"` + UserID int `json:"user_id"` + DeleterID int `json:"deleter_id"` + ItemID int `json:"item_id"` +} + +// MarketOrderNewObject struct. +type MarketOrderNewObject object.MarketOrder + +// MarketOrderEditObject struct. +type MarketOrderEditObject object.MarketOrder + +// GroupLeaveObject struct. +type GroupLeaveObject struct { + UserID int `json:"user_id"` + Self object.BaseBoolInt `json:"self"` +} + +// GroupJoinObject struct. +type GroupJoinObject struct { + UserID int `json:"user_id"` + JoinType string `json:"join_type"` +} + +// UserBlockObject struct. +type UserBlockObject struct { + AdminID int `json:"admin_id"` + UserID int `json:"user_id"` + UnblockDate int `json:"unblock_date"` + Reason int `json:"reason"` + Comment string `json:"comment"` +} + +// UserUnblockObject struct. +type UserUnblockObject struct { + AdminID int `json:"admin_id"` + UserID int `json:"user_id"` + ByEndDate int `json:"by_end_date"` +} + +// PollVoteNewObject struct. +// +// BUG(VK): при голосовании за несколько вариантов, возвращается только один. +type PollVoteNewObject struct { + OwnerID int `json:"owner_id"` + PollID int `json:"poll_id"` + OptionID int `json:"option_id"` + UserID int `json:"user_id"` +} + +// GroupOfficersEditObject struct. +type GroupOfficersEditObject struct { + AdminID int `json:"admin_id"` + UserID int `json:"user_id"` + LevelOld int `json:"level_old"` + LevelNew int `json:"level_new"` +} + +// Changes struct. +type Changes struct { + OldValue string `json:"old_value"` + NewValue string `json:"new_value"` +} + +// ChangesInt struct. +type ChangesInt struct { + OldValue int `json:"old_value"` + NewValue int `json:"new_value"` +} + +// GroupChangeSettingsObject struct. +// +// BUG(VK): Phone https://vk.com/bugtracker?act=show&id=64240 +// +// BUG(VK): Email https://vk.com/bugtracker?act=show&id=86650 +type GroupChangeSettingsObject struct { + UserID int `json:"user_id"` + Changes struct { + Title Changes `json:"title"` + Description Changes `json:"description"` + Access ChangesInt `json:"access"` + ScreenName Changes `json:"screen_name"` + PublicCategory ChangesInt `json:"public_category"` + PublicSubcategory ChangesInt `json:"public_subcategory"` + AgeLimits ChangesInt `json:"age_limits"` + Website Changes `json:"website"` + StatusDefault Changes `json:"status_default"` + Wall ChangesInt `json:"wall"` // на основе ответа + Replies ChangesInt `json:"replies"` // на основе ответа + Topics ChangesInt `json:"topics"` // на основе ответа + Audio ChangesInt `json:"audio"` // на основе ответа + Photos ChangesInt `json:"photos"` // на основе ответа + Video ChangesInt `json:"video"` // на основе ответа + Market ChangesInt `json:"market"` // на основе ответа + Docs ChangesInt `json:"docs"` // на основе ответа + Messages ChangesInt `json:"messages"` // на основе ответа + EventGroupID ChangesInt `json:"event_group_id"` // на основе ответа + Links Changes `json:"links"` // на основе ответа + Email Changes `json:"email"` // на основе ответа + EventStartDate ChangesInt `json:"event_start_date::"` // на основе ответа + EventFinishDate ChangesInt `json:"event_finish_date:"` // на основе ответа + Subject Changes `json:"subject"` // на основе ответа + MarketWiki Changes `json:"market_wiki"` // на основе ответа + DisableMarketComments ChangesInt `json:"disable_market_comments"` // на основе ответа + Phone ChangesInt `json:"phone"` // на основе ответа + CountryID ChangesInt `json:"country_id"` // на основе ответа + CityID ChangesInt `json:"city_id"` // на основе ответа + } `json:"Changes"` +} + +// GroupChangePhotoObject struct. +type GroupChangePhotoObject struct { + UserID int `json:"user_id"` + Photo object.PhotosPhoto `json:"photo"` +} + +// VkpayTransactionObject struct. +type VkpayTransactionObject struct { + FromID int `json:"from_id"` + Amount int `json:"amount"` + Description string `json:"description"` + Date int `json:"date"` +} + +// LeadFormsNewObject struct. +type LeadFormsNewObject struct { + LeadID int `json:"lead_id"` + GroupID int `json:"group_id"` + UserID int `json:"user_id"` + FormID int `json:"form_id"` + FormName string `json:"form_name"` + AdID int `json:"ad_id"` + Answers []struct { + Key string `json:"key"` + Question string `json:"question"` + Answer string `json:"answer"` + } `json:"answers"` +} + +// AppPayloadObject struct. +type AppPayloadObject struct { + UserID int `json:"user_id"` + AppID int `json:"app_id"` + Payload string `json:"payload"` +} + +// MessageReadObject struct. +type MessageReadObject struct { + FromID int `json:"from_id"` + PeerID int `json:"peer_id"` + ReadMessageID int `json:"read_message_id"` +} + +// LikeAddObject struct. +type LikeAddObject struct { + LikerID int `json:"liker_id"` + ObjectType string `json:"object_type"` + ObjectOwnerID int `json:"object_owner_id"` + ObjectID int `json:"object_id"` + ThreadReplyID int `json:"thread_reply_id"` + PostID int `json:"post_id"` // for comment +} + +// LikeRemoveObject struct. +type LikeRemoveObject struct { + LikerID int `json:"liker_id"` + ObjectType string `json:"object_type"` + ObjectOwnerID int `json:"object_owner_id"` + ObjectID int `json:"object_id"` + ThreadReplyID int `json:"thread_reply_id"` + PostID int `json:"post_id"` // for comment +} + +// DonutSubscriptionCreateObject struct. +type DonutSubscriptionCreateObject struct { + Amount int `json:"amount"` + AmountWithoutFee float64 `json:"amount_without_fee"` + UserID int `json:"user_id"` +} + +// DonutSubscriptionProlongedObject struct. +type DonutSubscriptionProlongedObject struct { + Amount int `json:"amount"` + AmountWithoutFee float64 `json:"amount_without_fee"` + UserID int `json:"user_id"` +} + +// DonutSubscriptionExpiredObject struct. +type DonutSubscriptionExpiredObject struct { + UserID int `json:"user_id"` +} + +// DonutSubscriptionCancelledObject struct. +type DonutSubscriptionCancelledObject struct { + UserID int `json:"user_id"` +} + +// DonutSubscriptionPriceChangedObject struct. +type DonutSubscriptionPriceChangedObject struct { + AmountOld int `json:"amount_old"` + AmountNew int `json:"amount_new"` + AmountDiff float64 `json:"amount_diff"` + AmountDiffWithoutFee float64 `json:"amount_diff_without_fee"` + UserID int `json:"user_id"` +} + +// DonutMoneyWithdrawObject struct. +type DonutMoneyWithdrawObject struct { + Amount int `json:"amount"` + AmountWithoutFee float64 `json:"amount_without_fee"` +} + +// DonutMoneyWithdrawErrorObject struct. +type DonutMoneyWithdrawErrorObject struct { + Reason string `json:"reason"` +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/go.mod b/vendor/github.com/SevereCloud/vksdk/v2/go.mod new file mode 100644 index 00000000..27f7256f --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/go.mod @@ -0,0 +1,10 @@ +module github.com/SevereCloud/vksdk/v2 + +go 1.13 + +require ( + github.com/gorilla/schema v1.2.0 + github.com/gorilla/websocket v1.4.2 + github.com/stretchr/testify v1.6.1 + golang.org/x/text v0.3.4 +) diff --git a/vendor/github.com/SevereCloud/vksdk/v2/go.sum b/vendor/github.com/SevereCloud/vksdk/v2/go.sum new file mode 100644 index 00000000..a9885d73 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/go.sum @@ -0,0 +1,18 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc= +github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go b/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go new file mode 100644 index 00000000..0174ebf2 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go @@ -0,0 +1,60 @@ +/* +Package internal unimportable +*/ +package internal // import "github.com/SevereCloud/vksdk/v2/internal" + +import ( + "io" + "strings" + + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/runes" + "golang.org/x/text/transform" +) + +// illegal is a collection of runes. +type illegal struct{} + +// Contains return true. +func (i illegal) Contains(r rune) bool { + return !(r == 0x09 || + r == 0x0A || + r == 0x0D || + r >= 0x20 && r <= 0xDF77 || + r >= 0xE000 && r <= 0xFFFD || + r >= 0x10000 && r <= 0x10FFFF) +} + +// XMLSanitizerReader creates an io.Reader that +// wraps another io.Reader and removes illegal xml +// characters from the io stream. +func XMLSanitizerReader(xml io.Reader) io.Reader { + var i illegal + t := transform.Chain(runes.Remove(i)) + + return transform.NewReader(xml, t) +} + +// CharsetUnknownError unknown charset. +type CharsetUnknownError struct { + Name string +} + +// Error returns the message of a CharsetUnknownError. +func (c *CharsetUnknownError) Error() string { + return "unknown charset: " + c.Name +} + +// CharsetReader if non-nil, defines a function to generate +// charset-conversion readers, converting from the provided +// non-UTF-8 charset into UTF-8. If CharsetReader is nil or +// returns an error, parsing stops with an error. One of the +// the CharsetReader's result values must be non-nil. +func CharsetReader(charset string, input io.Reader) (io.Reader, error) { + switch strings.ToLower(charset) { + case "windows-1251": + return charmap.Windows1251.NewDecoder().Reader(input), nil + default: + return nil, &CharsetUnknownError{Name: charset} + } +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go b/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go new file mode 100644 index 00000000..2ff8fbb3 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go @@ -0,0 +1,74 @@ +/* +Package internal unimportable +*/ +package internal // import "github.com/SevereCloud/vksdk/v2/internal" + +import ( + "context" + "net/http" + + "github.com/SevereCloud/vksdk/v2" +) + +// UserAgent module. +const UserAgent = "vksdk/" + vksdk.Version + " (+https://github.com/SevereCloud/vksdk)" + +// ContextKey is just an empty struct. It exists so HTTPClient can be +// an immutable public variable with a unique type. It's immutable +// because nobody else can create a ContextKey, being unexported. +type ContextKey int + +// ContextKey list. +const ( + HTTPClientKey ContextKey = iota + UserAgentKey + GroupIDKey + EventIDKey + LongPollTsKey + CallbackRetryCounterKey + CallbackRetryAfterKey +) + +// ContextClient return *http.Client. +func ContextClient(ctx context.Context) *http.Client { + if ctx != nil { + if hc, ok := ctx.Value(HTTPClientKey).(*http.Client); ok { + return hc + } + } + + return http.DefaultClient +} + +// ContextUserAgent return User-Agent from context. +func ContextUserAgent(ctx context.Context) string { + if ctx != nil { + if hc, ok := ctx.Value(UserAgentKey).(string); ok { + return hc + } + } + + return UserAgent +} + +// DoRequest sends an HTTP request and returns an HTTP response. +// +// The provided ctx must be non-nil. If it is canceled or times out, +// ctx.Err() will be returned. +func DoRequest(ctx context.Context, req *http.Request) (*http.Response, error) { + client := ContextClient(ctx) + + if req.UserAgent() == "" { + req.Header.Set("User-Agent", ContextUserAgent(ctx)) + } + + resp, err := client.Do(req.WithContext(ctx)) + // If we got an error, and the context has been canceled, + // the context's error is probably more useful. + if err != nil { + <-ctx.Done() + err = ctx.Err() + } + + return resp, err +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/README.md b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/README.md new file mode 100644 index 00000000..94d87dba --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/README.md @@ -0,0 +1,132 @@ +# Bots Long Poll API + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/SevereCloud/vksdk/v2/longpoll-bot)](https://pkg.go.dev/github.com/SevereCloud/vksdk/v2/longpoll-bot) +[![VK](https://img.shields.io/badge/developers-%234a76a8.svg?logo=VK&logoColor=white)](https://vk.com/dev/bots_longpoll) + +## Подключение Bots Long Poll API + +Long Poll настраивается автоматически. Вам не требуется заходить в настройки +сообщества. + +### Версия API + +Данная библиотека поддерживает версию API **5.122**. + +### Инициализация + +Модуль можно использовать с ключом доступа пользователя, полученным в +Standalone-приложении через Implicit Flow(требуются права доступа: **groups**) +или с ключом доступа сообщества(требуются права доступа: **manage**). + +В начале необходимо инициализировать api: + +```go +vk := api.NewVK("<TOKEN>") +``` + +А потом сам longpoll + +```go +lp, err := longpoll.NewLongPoll(vk api.VK, groupID int) +// По умолчанию Wait = 25 +// lp.Wait = 90 +// lp.Ts = "123" +``` + +### HTTP client + +В модуле реализована возможность изменять HTTP клиент - `lp.Client` + +Пример прокси + +```go +dialer, _ := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, proxy.Direct) +httpTransport := &http.Transport{ + Dial: dialer.Dial, + // DisableKeepAlives: true, +} +httpTransport.Dial = dialer.Dial +lp.Client.Transport = httpTransport +``` + +### Обработчик событий + +Для каждого события существует отдельный обработчик, который передает функции +`ctx` и `object`. + +Пример для события `message_new` + +```go +lp.MessageNew(func(ctx context.Context, obj events.MessageNewObject) { + ... +}) +``` + +Если вы хотите получать полный ответ от Long Poll(например для сохранения `ts` +или специальной обработки `failed`), можно воспользоваться следующим обработчиком. + +```go +lp.FullResponse(func(resp object.LongPollBotResponse) { + ... +}) +``` + +Полный список событий Вы найдёте [в документации](https://vk.com/dev/groups_events) + +### Контекст + +Поля `groupID`, `ts` и `eventID` передаются в `ctx`. Чтобы получить их, можно +воспользоваться следующими функциями: + +```go +groupID := events.GroupIDFromContext(ctx) +eventID := events.EventIDFromContext(ctx) +ts := longpoll.TsFromContext(ctx) +``` + +### Запуск и остановка + +```go +// Запуск +if err := lp.Run(); err != nil { + log.Fatal(err) +} + +// Безопасное завершение +// Ждет пока соединение закроется и события обработаются +lp.Shutdown() + +// Закрыть соединение +// Требует lp.Client.Transport = &http.Transport{DisableKeepAlives: true} +lp.Client.CloseIdleConnections() +``` + +## Пример + +```go +package main + +import ( + "log" + + "github.com/SevereCloud/vksdk/v2/api" + + longpoll "github.com/SevereCloud/vksdk/v2/longpoll-bot" + "github.com/SevereCloud/vksdk/v2/events" +) + +func main() { + vk := api.NewVK("<TOKEN>") + lp, err := longpoll.NewLongPoll(vk, 12345678) + if err != nil { + panic(err) + } + + lp.MessageNew(func(ctx context.Context, obj events.MessageNewObject) { + log.Print(obj.Message.Text) + }) + + lp.Run() +} + +``` diff --git a/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/context.go b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/context.go new file mode 100644 index 00000000..cfc4fd90 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/context.go @@ -0,0 +1,12 @@ +package longpoll // import "github.com/SevereCloud/vksdk/v2/longpoll-bot" + +import ( + "context" + + "github.com/SevereCloud/vksdk/v2/internal" +) + +// TsFromContext returns the ts from context. +func TsFromContext(ctx context.Context) int { + return ctx.Value(internal.LongPollTsKey).(int) +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/errors.go b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/errors.go new file mode 100644 index 00000000..58d97c96 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/errors.go @@ -0,0 +1,18 @@ +package longpoll + +import ( + "fmt" +) + +// Failed struct. +type Failed struct { + Code int +} + +// Error returns the message of a Failed. +func (e Failed) Error() string { + return fmt.Sprintf( + "longpoll: failed code %d", + e.Code, + ) +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/longpoll.go b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/longpoll.go new file mode 100644 index 00000000..b230c4c1 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/longpoll-bot/longpoll.go @@ -0,0 +1,219 @@ +/* +Package longpoll implements Bots Long Poll API. + +See more https://vk.com/dev/bots_longpoll +*/ +package longpoll // import "github.com/SevereCloud/vksdk/v2/longpoll-bot" + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + + "github.com/SevereCloud/vksdk/v2" + "github.com/SevereCloud/vksdk/v2/api" + "github.com/SevereCloud/vksdk/v2/events" + "github.com/SevereCloud/vksdk/v2/internal" +) + +// Response struct. +type Response struct { + Ts string `json:"ts"` + Updates []events.GroupEvent `json:"updates"` + Failed int `json:"failed"` +} + +// LongPoll struct. +type LongPoll struct { + GroupID int + Server string + Key string + Ts string + Wait int + VK *api.VK + Client *http.Client + cancel context.CancelFunc + + funcFullResponseList []func(Response) + + events.FuncList +} + +// NewLongPoll returns a new LongPoll. +// +// The LongPoll will use the http.DefaultClient. +// This means that if the http.DefaultClient is modified by other components +// of your application the modifications will be picked up by the SDK as well. +func NewLongPoll(vk *api.VK, groupID int) (*LongPoll, error) { + lp := &LongPoll{ + VK: vk, + GroupID: groupID, + Wait: 25, + Client: http.DefaultClient, + } + lp.FuncList = *events.NewFuncList() + + err := lp.updateServer(true) + + return lp, err +} + +// NewLongPollCommunity returns a new LongPoll for community token. +// +// The LongPoll will use the http.DefaultClient. +// This means that if the http.DefaultClient is modified by other components +// of your application the modifications will be picked up by the SDK as well. +func NewLongPollCommunity(vk *api.VK) (*LongPoll, error) { + resp, err := vk.GroupsGetByID(nil) + if err != nil { + return nil, err + } + + lp := &LongPoll{ + VK: vk, + GroupID: resp[0].ID, + Wait: 25, + Client: http.DefaultClient, + } + lp.FuncList = *events.NewFuncList() + + err = lp.updateServer(true) + + return lp, err +} + +func (lp *LongPoll) updateServer(updateTs bool) error { + params := api.Params{ + "group_id": lp.GroupID, + } + + serverSetting, err := lp.VK.GroupsGetLongPollServer(params) + if err != nil { + return err + } + + lp.Key = serverSetting.Key + lp.Server = serverSetting.Server + + if updateTs { + lp.Ts = serverSetting.Ts + } + + return nil +} + +func (lp *LongPoll) check(ctx context.Context) (response Response, err error) { + u := fmt.Sprintf("%s?act=a_check&key=%s&ts=%s&wait=%d", lp.Server, lp.Key, lp.Ts, lp.Wait) + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) + if err != nil { + return response, err + } + + resp, err := lp.Client.Do(req) + if err != nil { + return response, err + } + defer resp.Body.Close() + + err = json.NewDecoder(resp.Body).Decode(&response) + if err != nil { + return response, err + } + + err = lp.checkResponse(response) + + return response, err +} + +func (lp *LongPoll) checkResponse(response Response) (err error) { + switch response.Failed { + case 0: + lp.Ts = response.Ts + case 1: + lp.Ts = response.Ts + case 2: + err = lp.updateServer(false) + case 3: + err = lp.updateServer(true) + default: + err = &Failed{response.Failed} + } + + return +} + +func (lp *LongPoll) autoSetting(ctx context.Context) error { + params := api.Params{ + "group_id": lp.GroupID, + "enabled": true, + "api_version": vksdk.API, + }.WithContext(ctx) + for _, event := range lp.ListEvents() { + params[string(event)] = true + } + + // Updating LongPoll settings + _, err := lp.VK.GroupsSetLongPollSettings(params) + + return err +} + +// Run handler. +func (lp *LongPoll) Run() error { + return lp.RunWithContext(context.Background()) +} + +// RunWithContext handler. +func (lp *LongPoll) RunWithContext(ctx context.Context) error { + return lp.run(ctx) +} + +func (lp *LongPoll) run(ctx context.Context) error { + ctx, lp.cancel = context.WithCancel(ctx) + + err := lp.autoSetting(ctx) + if err != nil { + return err + } + + for { + select { + case _, ok := <-ctx.Done(): + if !ok { + return nil + } + default: + resp, err := lp.check(ctx) + if err != nil { + return err + } + + ctx = context.WithValue(ctx, internal.LongPollTsKey, resp.Ts) + + for _, event := range resp.Updates { + err = lp.Handler(ctx, event) + if err != nil { + return err + } + } + + for _, f := range lp.funcFullResponseList { + f(resp) + } + } + } +} + +// Shutdown gracefully shuts down the longpoll without interrupting any active connections. +func (lp *LongPoll) Shutdown() { + if lp.cancel != nil { + lp.cancel() + } +} + +// FullResponse handler. +func (lp *LongPoll) FullResponse(f func(Response)) { + lp.funcFullResponseList = append(lp.funcFullResponseList, f) +} 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 +} |