Compare commits

..

34 Commits

Author SHA1 Message Date
Wim
b979aff270 Release v1.22.1 (#1447) 2021-04-03 23:55:06 +02:00
Paul
b293e3fa75 Adding caption to send telegram images. Fixes #1357 (#1358)
* Used tgbotapi caption option to attach caption to photos / documents

* remove "text/template/parse"

* added TGGetParseMode to clean up. Added tg upload function for video, audio and voice

* fixed varname Textout. Changed fileextension logic to avoid chaining regex

* fixed textout varname

* fixed parsemode varname

* gofmt

Co-authored-by: Wim <wim@42.be>
2021-04-03 23:15:19 +02:00
Wim
21eb37e471 Update vendor (#1446)
* Update vendor

* Use upstream emoji lib again
2021-04-03 19:16:46 +02:00
Millesimus
d3b60cc445 Add MatterBukkit and Forge / Bukkit distinction (#1444) 2021-04-02 23:40:04 +02:00
Wim
7466e1d014 Set ogg as default audiomessage when none found (whatsapp). Fixes #1427 (#1431) 2021-03-20 23:12:59 +01:00
James Lu
2a7f28606c Declare GUILD_MEMBERS privileged intent (discord) (#1428)
Without this declared, it seems that Discord will not send any member update
events after connection, even if the privileged gateway intent is enabled for
the bot in settings. This causes nick tracking to get out of sync when people
change their nicks after the bot connects.

See: https://discord.com/developers/docs/topics/gateway#gateway-intents
2021-03-20 22:46:36 +01:00
Ben Wiederhake
0450482e6e Make lottie_convert work on platforms without /dev/stdout (#1424)
Fixes #1423.
2021-03-20 22:42:41 +01:00
Wim
ee5d9b43b5 Update vendor (#1414) 2021-03-20 22:40:23 +01:00
powerjungle
3a8857c8c9 Add Facebook messenger api bridge URL to README.md (#1425) 2021-03-13 22:06:01 +01:00
Wim
be3dfb251d Check rune length instead of bytes (telegram). Fixes #1409 (#1412) 2021-02-25 23:28:54 +01:00
Wim
4e11e29f70 Use go1.16 as binary builder. Remove go1.14 (#1407) 2021-02-17 21:37:14 +01:00
Alexander
763bb95cea Fix webhooks for channels with special characters (xmpp) (#1405) 2021-02-17 21:30:06 +01:00
Qais Patankar
668e7407e6 Change workflow from go 1.16.0-rc1 to go 1.16.x (#1406) 2021-02-17 21:14:21 +01:00
Tadeo Kondrak
c147ba1da1 Handle Rocket.Chat attachments (#1395) 2021-02-15 22:34:14 +01:00
Qais Patankar
10f044c3dd Use valid transmitter Log default (discord) (#1402)
* Use valid transmitter Log default (discord)

Using a logger created by `log.NewEntry(nil)` would crash. (matterbridge does not encounter this issue as it updates the Log field manually.)
2021-02-15 22:20:08 +01:00
Alexander
ce5140febd Fix panic when the webhook fails (xmpp) (#1401) 2021-02-15 22:18:30 +01:00
PeGaSuS
858cdc86f5 Fix missing word in matterbridge.toml.sample (#1398)
Co-authored-by: Qais Patankar <qaisjp@gmail.com>
2021-02-11 13:11:59 +00:00
Wim
9a25297d51 Add scoop repo 2021-02-02 01:02:36 +01:00
Wim
e24f7f5151 Add go 1.16.0-rc1 to github workflow (#1386) 2021-02-02 00:05:12 +01:00
Wim
eff5f1e119 Bump version 2021-02-01 23:59:35 +01:00
Wim
afcd362cd1 Release v1.22.0 (#1385) 2021-02-01 23:44:17 +01:00
Wim
0452be0cb3 Update vendor (#1384) 2021-02-01 21:29:04 +01:00
Wim
1624f10773 Pick up all the webhooks (discord) (#1383) 2021-02-01 20:44:34 +01:00
Ivanik
8764be7461 Add vk bridge (#1372)
* Add vk bridge

* Vk bridge attachments

* Vk bridge forwarded messages

* Vk bridge sample config and code cleanup

* Vk bridge add vendor

* Vk bridge message edit

* Vk bridge: fix fetching names of other bots

* Vk bridge: code cleanup

* Vk bridge: fix shadows declaration

* Vk bridge: remove UseFileURL
2021-01-29 00:25:14 +01:00
Wim
5dd15ef8e7 Add an even more debug option (discord) (#1368)
Enable discordgo debugging with debuglevel=1 under the [discord.xxx] section, for even more debugging fun.
2021-01-23 00:09:56 +01:00
Alexander
4ac6366706 Allow the XMPP bridge to use slack compatible webhooks (xmpp) (#1364)
* Add mod_slack_webhook support to the XMPP bridge

* Replace b.webhookURL with b.GetString

* Do not return a message ID on webhook POST

* Add the XMPP webhook to the sample configuration
2021-01-21 22:50:04 +01:00
Wim
adc0912efa Update README (#1362) 2021-01-15 23:21:48 +01:00
Wim
536823ce55 Optimize Dockerfile (#1361) 2021-01-15 22:44:01 +01:00
Peter Dave Hello
207cd24edb Unify/sync apk index cache control in Dockerfile (#1352)
The second stage is using a single `apk` command with `--no-cache` which is better.
2021-01-14 23:48:02 +01:00
Paul
b039da1eba Add jpe as valid image filename extension (telegram) (#1360) 2021-01-14 23:42:13 +01:00
Qais Patankar
8fcd0f3b6f Improve Markdown in transmitter docs (discord) (#1351) 2021-01-03 18:57:06 +00:00
Wim
16fde6935c Rename .oga audio files to .ogg (telegram) (#1349) 2021-01-02 00:55:20 +01:00
Wim
9592cff9fa Update README about unsupported steam chat 2021-01-02 00:12:10 +01:00
Wim
109148988c Bump version 2020-12-31 23:42:41 +01:00
349 changed files with 43114 additions and 6654 deletions

View File

@@ -16,7 +16,7 @@ jobs:
test-build-upload:
strategy:
matrix:
go-version: [1.14.x, 1.15.x]
go-version: [1.15.x, 1.16.x]
platform: [ubuntu-latest]
runs-on: ${{ matrix.platform }}
steps:
@@ -24,6 +24,7 @@ jobs:
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
stable: false
- name: Checkout code
uses: actions/checkout@v2
with:
@@ -34,23 +35,23 @@ jobs:
run: |
mkdir -p output/{win,lin,arm,mac}
VERSION=$(git describe --tags)
GOOS=linux GOARCH=amd64 go build -mod=vendor -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/lin/matterbridge-$VERSION-linux-amd64
GOOS=windows GOARCH=amd64 go build -mod=vendor -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/win/matterbridge-$VERSION-windows-amd64.exe
GOOS=darwin GOARCH=amd64 go build -mod=vendor -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/mac/matterbridge-$VERSION-darwin-amd64
GOOS=linux GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/lin/matterbridge-$VERSION-linux-amd64
GOOS=windows GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/win/matterbridge-$VERSION-windows-amd64.exe
GOOS=darwin GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/mac/matterbridge-$VERSION-darwin-amd64
- name: Upload linux 64-bit
if: startsWith(matrix.go-version,'1.15')
if: startsWith(matrix.go-version,'1.16')
uses: actions/upload-artifact@v2
with:
name: matterbridge-linux-64bit
path: output/lin
- name: Upload windows 64-bit
if: startsWith(matrix.go-version,'1.15')
if: startsWith(matrix.go-version,'1.16')
uses: actions/upload-artifact@v2
with:
name: matterbridge-windows-64bit
path: output/win
- name: Upload darwin 64-bit
if: startsWith(matrix.go-version,'1.15')
if: startsWith(matrix.go-version,'1.16')
uses: actions/upload-artifact@v2
with:
name: matterbridge-darwin-64bit

View File

@@ -1,11 +1,9 @@
FROM alpine AS builder
COPY . /go/src/github.com/42wim/matterbridge
RUN apk update && apk add go git gcc musl-dev \
&& cd /go/src/github.com/42wim/matterbridge \
&& export GOPATH=/go \
&& go get \
&& go build -x -ldflags "-X main.githash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge
COPY . /go/src/matterbridge
RUN apk --no-cache add go git \
&& cd /go/src/matterbridge \
&& go build -mod vendor -ldflags "-X main.githash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge
FROM alpine
RUN apk --no-cache add ca-certificates mailcap

View File

@@ -70,7 +70,7 @@ And more...
- [Changelog](#changelog)
- [FAQ](#faq)
- [Related projects](#related-projects)
- [Articles](#articles)
- [Articles / Tutorials](#articles--tutorials)
- [Thanks](#thanks)
## Features
@@ -91,16 +91,18 @@ And more...
- [IRC](http://www.mirc.com/servers.html)
- [Keybase](https://keybase.io)
- [Matrix](https://matrix.org)
- [Mattermost](https://github.com/mattermost/mattermost-server/) 4.x, 5.x
- [Mattermost](https://github.com/mattermost/mattermost-server/)
- [Microsoft Teams](https://teams.microsoft.com)
- [Mumble](https://www.mumble.info/)
- [Nextcloud Talk](https://nextcloud.com/talk/)
- [Rocket.chat](https://rocket.chat)
- [Slack](https://slack.com)
- [Ssh-chat](https://github.com/shazow/ssh-chat)
- [Steam](https://store.steampowered.com/)
- ~~[Steam](https://store.steampowered.com/)~~
- Not supported anymore, see [here](https://github.com/Philipp15b/go-steam/issues/94) for more info.
- [Telegram](https://telegram.org)
- [Twitch](https://twitch.tv)
- [VK](https://vk.com/)
- [WhatsApp](https://www.whatsapp.com/)
- [XMPP](https://xmpp.org)
- [Zulip](https://zulipchat.com)
@@ -108,11 +110,15 @@ And more...
### 3rd party via matterbridge api
- [Discourse](https://github.com/DeclanHoare/matterbabble)
- [Facebook messenger](https://github.com/powerjungle/fbridge-asyncio)
- [Facebook messenger](https://github.com/VictorNine/fbridge)
- [Minecraft](https://github.com/elytra/MatterLink)
- [Minecraft](https://github.com/raws/mattercraft)
- [Minecraft](https://gitlab.com/Programie/MatterBukkit)
- [Reddit](https://github.com/bonehurtingjuice/mattereddit)
- [Counter-Strike, half-life and more](https://forums.alliedmods.net/showthread.php?t=319430)
- [MatterAMXX](https://github.com/GabeIggy/MatterAMXX)
- [Vintage Story](https://github.com/NikkyAI/vs-matterbridge)
### API
@@ -121,12 +127,16 @@ More info and examples on the [wiki](https://github.com/42wim/matterbridge/wiki/
Used by the projects below. Feel free to make a PR to add your project to this list.
- [MatterLink](https://github.com/elytra/MatterLink) (Matterbridge link for Minecraft Server chat)
- [MatterLink](https://github.com/elytra/MatterLink) (Matterbridge link for Minecraft Forge server chat, archived)
- [MatterCraft](https://github.com/raws/mattercraft) (Matterbridge link for Minecraft Forge server chat)
- [MatterBukkit](https://gitlab.com/Programie/MatterBukkit) (Matterbridge link for Minecraft Bukkit/Spigot server chat)
- [pyCord](https://github.com/NikkyAI/pyCord) (crossplatform chatbot)
- [Mattereddit](https://github.com/bonehurtingjuice/mattereddit) (Reddit chat support)
- [fbridge-asyncio](https://github.com/powerjungle/fbridge-asyncio) (Facebook messenger support)
- [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
- [matterbabble](https://github.com/DeclanHoare/matterbabble) (Discourse support)
- [MatterAMXX](https://forums.alliedmods.net/showthread.php?t=319430) (Counter-Strike, half-life and more via AMXX mod)
- [Vintage Story](https://github.com/NikkyAI/vs-matterbridge)
## Chat with us
@@ -153,7 +163,7 @@ See <https://github.com/42wim/matterbridge/wiki>
### Binaries
- Latest stable release [v1.21.0](https://github.com/42wim/matterbridge/releases/latest)
- Latest stable release [v1.22.1](https://github.com/42wim/matterbridge/releases/latest)
- Development releases (follows master) can be downloaded [here](https://github.com/42wim/matterbridge/actions) selecting the latest green build and then artifacts.
To install or upgrade just download the latest [binary](https://github.com/42wim/matterbridge/releases/latest). On \*nix platforms you may need to make the binary executable - you can do this by running `chmod a+x` on the binary (example: `chmod a+x matterbridge-1.20.0-linux-64bit`). After downloading (and making the binary executable, if necessary), follow the instructions on the [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration.
@@ -162,13 +172,14 @@ To install or upgrade just download the latest [binary](https://github.com/42wim
- [Overview](https://repology.org/metapackage/matterbridge/versions)
- [snap](https://snapcraft.io/matterbridge)
- [scoop](https://github.com/42wim/scoop-bucket)
## Building
Most people just want to use binaries, you can find those [here](https://github.com/42wim/matterbridge/releases/latest)
If you really want to build from source, follow these instructions:
Go 1.12+ is required. Make sure you have [Go](https://golang.org/doc/install) properly installed.
Go 1.13+ is required. Make sure you have [Go](https://golang.org/doc/install) properly installed.
```bash
go get github.com/42wim/matterbridge
@@ -296,8 +307,11 @@ See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
- [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
- [isla](https://github.com/alphachung/isla) (Bot for Discord-Telegram groups used alongside matterbridge)
- [matterbabble](https://github.com/DeclanHoare/matterbabble) (Connect Discourse threads to Matterbridge)
- [nextcloud talk](https://github.com/nextcloud/talk_matterbridge) (Integrates matterbridge in Nextcloud Talk)
- [mattercraft](https://github.com/raws/mattercraft) (Minecraft bridge)
- [vs-matterbridge](https://github.com/NikkyAI/vs-matterbridge) (Vintage Story bridge)
## Articles
## Articles / Tutorials
- [matterbridge on kubernetes](https://medium.freecodecamp.org/using-kubernetes-to-deploy-a-chat-gateway-or-when-technology-works-like-its-supposed-to-a169a8cd69a3)
- <https://mattermost.com/blog/connect-irc-to-mattermost/>
@@ -308,6 +322,8 @@ See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
- <https://www.stitcher.com/s/?eid=52382713>
- <https://daniele.tech/2019/02/how-to-use-matterbridge-to-connect-2-different-slack-workspaces/>
- <https://userlinux.net/mattermost-and-matterbridge.html>
- <https://nextcloud.com/blog/bridging-chat-services-in-talk/>
- Youtube: [whatsapp - telegram bridging](https://www.youtube.com/watch?v=W-VXISoKtNc)
## Thanks
@@ -338,6 +354,7 @@ Matterbridge wouldn't exist without these libraries:
- steam - <https://github.com/Philipp15b/go-steam>
- telegram - <https://github.com/go-telegram-bot-api/telegram-bot-api>
- tengo - <https://github.com/d5/tengo>
- vk - <https://github.com/SevereCloud/vksdk>
- whatsapp - <https://github.com/Rhymen/go-whatsapp>
- xmpp - <https://github.com/mattn/go-xmpp>
- zulip - <https://github.com/ifo/gozulipbot>

View File

@@ -75,6 +75,11 @@ func (b *Bdiscord) Connect() error {
b.c.AddHandler(b.messageDeleteBulk)
b.c.AddHandler(b.memberAdd)
b.c.AddHandler(b.memberRemove)
// Add privileged intent for guild member tracking. This is needed to track nicks
// for display names and @mention translation
b.c.Identify.Intents = discordgo.MakeIntent(discordgo.IntentsAllWithoutPrivileged |
discordgo.IntentsGuildMembers)
err = b.c.Open()
if err != nil {
return err
@@ -148,6 +153,11 @@ func (b *Bdiscord) Connect() error {
return fmt.Errorf("use of removed WebhookURL setting")
}
if b.GetInt("debuglevel") > 0 {
b.Log.Debug("enabling even more discord debug")
b.c.Debug = true
}
// Initialise webhook management
b.transmitter = transmitter.New(b.c, b.guildID, "matterbridge", b.useAutoWebhooks)
b.transmitter.Log = b.Log

View File

@@ -2,6 +2,7 @@
// arbitrary webhook messages to Discord.
//
// The package provides the following functionality:
//
// - Creating new webhooks, whenever necessary
// - Loading webhooks that we have previously created
// - Sending new messages
@@ -43,9 +44,8 @@ var ErrWebhookNotFound = errors.New("webhook for this channel and message does n
// ErrPermissionDenied is returned if the bot does not have permission to manage webhooks.
//
// It's important to note that:
// - a bot can have both a guild-wide permission and a channel-specific permission to manage webhooks
// - even if a bot has permission to manage the guild's webhooks, there could be channel specific overrides
// Bots can be granted a guild-wide permission and channel-specific permissions to manage webhooks.
// Despite potentially having guild-wide permission, channel specific overrides could deny a bot's permission to manage webhooks.
var ErrPermissionDenied = errors.New("missing 'Manage Webhooks' permission")
// New returns a new Transmitter given a Discord session, guild ID, and title.
@@ -58,13 +58,11 @@ func New(session *discordgo.Session, guild string, title string, autoCreate bool
channelWebhooks: make(map[string]*discordgo.Webhook),
Log: log.NewEntry(nil),
Log: log.NewEntry(log.StandardLogger()),
}
}
// Send transmits a message to the given channel with the provided webhook data.
//
// Note that this function will wait until Discord responds with an answer.
// Send transmits a message to the given channel with the provided webhook data, and waits until Discord responds with message data.
func (t *Transmitter) Send(channelID string, params *discordgo.WebhookParams) (*discordgo.Message, error) {
wh, err := t.getOrCreateWebhook(channelID)
if err != nil {
@@ -124,16 +122,19 @@ func (t *Transmitter) AddWebhook(channelID string, webhook *discordgo.Webhook) b
// RefreshGuildWebhooks loads "relevant" webhooks into the transmitter, with careful permission handling.
//
// Notes:
//
// - A webhook is "relevant" if it was created by this bot -- the ApplicationID should match the bot's ID.
// - The term "having permission" means having the "Manage Webhooks" permission. See ErrPermissionDenied for more information.
// - This function is additive and will not unload previously loaded webhooks.
// - A nil channelIDs slice is treated the same as an empty one.
//
// If the bot has guild-wide permission:
//
// 1. it will load any "relevant" webhooks from the entire guild
// 2. the given slice is ignored
//
// If the bot does not have guild-wide permission:
//
// 1. it will load any "relevant" webhooks in each channel
// 2. a single error will be returned if any error occurs (incl. if there is no permission for any of these channels)
//
@@ -252,6 +253,5 @@ func (t *Transmitter) assignHooksByAppID(hooks []*discordgo.Webhook, appID strin
"name": wh.Name,
"channel": wh.ChannelID,
}).Println(logLine)
break
}
}

View File

@@ -51,6 +51,30 @@ func DownloadFileAuth(url string, auth string) (*[]byte, error) {
return &data, nil
}
// DownloadFileAuthRocket downloads the given URL using the specified Rocket user ID and authentication token.
func DownloadFileAuthRocket(url, token, userID string) (*[]byte, error) {
var buf bytes.Buffer
client := &http.Client{
Timeout: time.Second * 5,
}
req, err := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Token", token)
req.Header.Add("X-User-Id", userID)
if err != nil {
return nil, err
}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
_, err = io.Copy(&buf, resp.Body)
data := buf.Bytes()
return &data, err
}
// GetSubLines splits messages in newline-delimited lines. If maxLineLength is
// specified as non-zero GetSubLines will also clip long lines to the maximum
// length and insert a warning marker that the line was clipped.
@@ -224,35 +248,52 @@ func CanConvertTgsToX() error {
// This relies on an external command, which is ugly, but works.
func ConvertTgsToX(data *[]byte, outputFormat string, logger *logrus.Entry) error {
// lottie can't handle input from a pipe, so write to a temporary file:
tmpFile, err := ioutil.TempFile(os.TempDir(), "matterbridge-lottie-*.tgs")
tmpInFile, err := ioutil.TempFile(os.TempDir(), "matterbridge-lottie-input-*.tgs")
if err != nil {
return err
}
tmpFileName := tmpFile.Name()
tmpInFileName := tmpInFile.Name()
defer func() {
if removeErr := os.Remove(tmpFileName); removeErr != nil {
logger.Errorf("Could not delete temporary file %s: %v", tmpFileName, removeErr)
if removeErr := os.Remove(tmpInFileName); removeErr != nil {
logger.Errorf("Could not delete temporary (input) file %s: %v", tmpInFileName, removeErr)
}
}()
// lottie can handle writing to a pipe, but there is no way to do that platform-independently.
// "/dev/stdout" won't work on Windows, and "-" upsets Cairo for some reason. So we need another file:
tmpOutFile, err := ioutil.TempFile(os.TempDir(), "matterbridge-lottie-output-*.data")
if err != nil {
return err
}
tmpOutFileName := tmpOutFile.Name()
defer func() {
if removeErr := os.Remove(tmpOutFileName); removeErr != nil {
logger.Errorf("Could not delete temporary (output) file %s: %v", tmpOutFileName, removeErr)
}
}()
if _, writeErr := tmpFile.Write(*data); writeErr != nil {
if _, writeErr := tmpInFile.Write(*data); writeErr != nil {
return writeErr
}
// Must close before calling lottie to avoid data races:
if closeErr := tmpFile.Close(); closeErr != nil {
if closeErr := tmpInFile.Close(); closeErr != nil {
return closeErr
}
// Call lottie to transform:
cmd := exec.Command("lottie_convert.py", "--input-format", "lottie", "--output-format", outputFormat, tmpFileName, "/dev/stdout")
cmd := exec.Command("lottie_convert.py", "--input-format", "lottie", "--output-format", outputFormat, tmpInFileName, tmpOutFileName)
cmd.Stdout = nil
cmd.Stderr = nil
// NB: lottie writes progress into to stderr in all cases.
stdout, stderr := cmd.Output()
_, stderr := cmd.Output()
if stderr != nil {
// 'stderr' already contains some parts of Stderr, because it was set to 'nil'.
return stderr
}
dataContents, err := ioutil.ReadFile(tmpOutFileName)
if err != nil {
return err
}
*data = stdout
*data = dataContents
return nil
}

View File

@@ -1,7 +1,10 @@
package brocketchat
import (
"fmt"
"github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper"
"github.com/matterbridge/Rocket.Chat.Go.SDK/models"
)
@@ -58,6 +61,7 @@ func (b *Brocketchat) handleStatusEvent(ev models.Message, rmsg *config.Message)
func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
for message := range b.messageChan {
message := message
// skip messages with same ID, apparently messages get duplicated for an unknown reason
if _, ok := b.cache.Get(message.ID); ok {
continue
@@ -76,8 +80,11 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
Account: b.Account,
UserID: message.User.ID,
ID: message.ID,
Extra: make(map[string][]interface{}),
}
b.handleAttachments(&message, rmsg)
// handleStatusEvent returns false if the message should be dropped
// in that case it is probably some modification to the channel we do not want to relay
if b.handleStatusEvent(m, rmsg) {
@@ -86,6 +93,38 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
}
}
func (b *Brocketchat) handleAttachments(message *models.Message, rmsg *config.Message) {
if rmsg.Text == "" {
for _, attachment := range message.Attachments {
if attachment.Title != "" {
rmsg.Text = attachment.Title + "\n"
}
if attachment.Title != "" && attachment.Text != "" {
rmsg.Text += "\n"
}
if attachment.Text != "" {
rmsg.Text += attachment.Text
}
}
}
for i := range message.Attachments {
if err := b.handleDownloadFile(rmsg, &message.Attachments[i]); err != nil {
b.Log.Errorf("Could not download incoming file: %#v", err)
}
}
}
func (b *Brocketchat) handleDownloadFile(rmsg *config.Message, file *models.Attachment) error {
downloadURL := b.GetString("server") + file.TitleLink
data, err := helper.DownloadFileAuthRocket(downloadURL, b.user.Token, b.user.ID)
if err != nil {
return fmt.Errorf("download %s failed %#v", downloadURL, err)
}
helper.HandleDownloadData(b.Log, rmsg, file.Title, rmsg.Text, downloadURL, data, b.General)
return nil
}
func (b *Brocketchat) handleUploadFile(msg *config.Message) error {
for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo)

View File

@@ -2,7 +2,7 @@ package btelegram
import (
"html"
"regexp"
"path/filepath"
"strconv"
"strings"
"unicode/utf16"
@@ -181,13 +181,15 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {
// sends a EVENT_AVATAR_DOWNLOAD message to the gateway if successful.
// logs an error message if it fails
func (b *Btelegram) handleDownloadAvatar(userid int, channel string) {
rmsg := config.Message{Username: "system",
Text: "avatar",
Channel: channel,
Account: b.Account,
UserID: strconv.Itoa(userid),
Event: config.EventAvatarDownload,
Extra: make(map[string][]interface{})}
rmsg := config.Message{
Username: "system",
Text: "avatar",
Channel: channel,
Account: b.Account,
UserID: strconv.Itoa(userid),
Event: config.EventAvatarDownload,
Extra: make(map[string][]interface{}),
}
if _, ok := b.avatarMap[strconv.Itoa(userid)]; !ok {
photos, err := b.c.GetUserProfilePhotos(tgbotapi.UserProfilePhotosConfig{UserID: userid, Limit: 1})
@@ -311,6 +313,11 @@ func (b *Btelegram) handleDownload(rmsg *config.Message, message *tgbotapi.Messa
b.maybeConvertWebp(&name, data)
}
// rename .oga to .ogg https://github.com/42wim/matterbridge/issues/906#issuecomment-741793512
if strings.HasSuffix(name, ".oga") && message.Audio != nil {
name = strings.Replace(name, ".oga", ".ogg", 1)
}
helper.HandleDownloadData(b.Log, rmsg, name, message.Caption, "", data, b.General)
return nil
}
@@ -384,21 +391,32 @@ func (b *Btelegram) handleUploadFile(msg *config.Message, chatid int64) string {
Name: fi.Name,
Bytes: *fi.Data,
}
re := regexp.MustCompile(".(jpg|png)$")
if re.MatchString(fi.Name) {
c = tgbotapi.NewPhotoUpload(chatid, file)
} else {
c = tgbotapi.NewDocumentUpload(chatid, file)
switch filepath.Ext(fi.Name) {
case ".jpg", ".jpe", ".png":
pc := tgbotapi.NewPhotoUpload(chatid, file)
pc.Caption, pc.ParseMode = TGGetParseMode(b, msg.Username, fi.Comment)
c = pc
case ".mp4", ".m4v":
vc := tgbotapi.NewVideoUpload(chatid, file)
vc.Caption, vc.ParseMode = TGGetParseMode(b, msg.Username, fi.Comment)
c = vc
case ".mp3", ".oga":
ac := tgbotapi.NewAudioUpload(chatid, file)
ac.Caption, ac.ParseMode = TGGetParseMode(b, msg.Username, fi.Comment)
c = ac
case ".ogg":
voc := tgbotapi.NewVoiceUpload(chatid, file)
voc.Caption, voc.ParseMode = TGGetParseMode(b, msg.Username, fi.Comment)
c = voc
default:
dc := tgbotapi.NewDocumentUpload(chatid, file)
dc.Caption, dc.ParseMode = TGGetParseMode(b, msg.Username, fi.Comment)
c = dc
}
_, err := b.c.Send(c)
if err != nil {
b.Log.Errorf("file upload failed: %#v", err)
}
if fi.Comment != "" {
if _, err := b.sendMessage(chatid, msg.Username, fi.Comment); err != nil {
b.Log.Errorf("posting file comment %s failed: %s", fi.Comment, err)
}
}
}
return ""
}
@@ -408,7 +426,7 @@ func (b *Btelegram) handleQuote(message, quoteNick, quoteMessage string) string
if format == "" {
format = "{MESSAGE} (re @{QUOTENICK}: {QUOTEMESSAGE})"
}
quoteMessagelength := len(quoteMessage)
quoteMessagelength := len([]rune(quoteMessage))
if b.GetInt("QuoteLengthLimit") != 0 && quoteMessagelength >= b.GetInt("QuoteLengthLimit") {
runes := []rune(quoteMessage)
quoteMessage = string(runes[0:b.GetInt("QuoteLengthLimit")])

View File

@@ -69,6 +69,28 @@ func (b *Btelegram) JoinChannel(channel config.ChannelInfo) error {
return nil
}
func TGGetParseMode(b *Btelegram, username string, text string) (textout string, parsemode string) {
textout = username + text
if b.GetString("MessageFormat") == HTMLFormat {
b.Log.Debug("Using mode HTML")
parsemode = tgbotapi.ModeHTML
}
if b.GetString("MessageFormat") == "Markdown" {
b.Log.Debug("Using mode markdown")
parsemode = tgbotapi.ModeMarkdown
}
if b.GetString("MessageFormat") == MarkdownV2 {
b.Log.Debug("Using mode MarkdownV2")
parsemode = MarkdownV2
}
if strings.ToLower(b.GetString("MessageFormat")) == HTMLNick {
b.Log.Debug("Using mode HTML - nick only")
textout = username + html.EscapeString(text)
parsemode = tgbotapi.ModeHTML
}
return textout, parsemode
}
func (b *Btelegram) Send(msg config.Message) (string, error) {
b.Log.Debugf("=> Receiving %#v", msg)
@@ -131,24 +153,7 @@ func (b *Btelegram) getFileDirectURL(id string) string {
func (b *Btelegram) sendMessage(chatid int64, username, text string) (string, error) {
m := tgbotapi.NewMessage(chatid, "")
m.Text = username + text
if b.GetString("MessageFormat") == HTMLFormat {
b.Log.Debug("Using mode HTML")
m.ParseMode = tgbotapi.ModeHTML
}
if b.GetString("MessageFormat") == "Markdown" {
b.Log.Debug("Using mode markdown")
m.ParseMode = tgbotapi.ModeMarkdown
}
if b.GetString("MessageFormat") == MarkdownV2 {
b.Log.Debug("Using mode MarkdownV2")
m.ParseMode = MarkdownV2
}
if strings.ToLower(b.GetString("MessageFormat")) == HTMLNick {
b.Log.Debug("Using mode HTML - nick only")
m.Text = username + html.EscapeString(text)
m.ParseMode = tgbotapi.ModeHTML
}
m.Text, m.ParseMode = TGGetParseMode(b, username, text)
m.DisableWebPagePreview = b.GetBool("DisableWebPagePreview")

327
bridge/vk/vk.go Normal file
View File

@@ -0,0 +1,327 @@
package bvk
import (
"bytes"
"context"
"regexp"
"strconv"
"strings"
"time"
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper"
"github.com/SevereCloud/vksdk/v2/api"
"github.com/SevereCloud/vksdk/v2/events"
longpoll "github.com/SevereCloud/vksdk/v2/longpoll-bot"
"github.com/SevereCloud/vksdk/v2/object"
)
const (
audioMessage = "audio_message"
document = "doc"
photo = "photo"
video = "video"
graffiti = "graffiti"
sticker = "sticker"
wall = "wall"
)
type user struct {
lastname, firstname, avatar string
}
type Bvk struct {
c *api.VK
usernamesMap map[int]user // cache of user names and avatar URLs
*bridge.Config
}
func New(cfg *bridge.Config) bridge.Bridger {
return &Bvk{usernamesMap: make(map[int]user), Config: cfg}
}
func (b *Bvk) Connect() error {
b.Log.Info("Connecting")
b.c = api.NewVK(b.GetString("Token"))
lp, err := longpoll.NewLongPoll(b.c, b.GetInt("GroupID"))
if err != nil {
b.Log.Debugf("%#v", err)
return err
}
lp.MessageNew(func(ctx context.Context, obj events.MessageNewObject) {
b.handleMessage(obj.Message, false)
})
b.Log.Info("Connection succeeded")
go func() {
err := lp.Run()
if err != nil {
b.Log.Fatal("Enable longpoll in group management")
}
}()
return nil
}
func (b *Bvk) Disconnect() error {
return nil
}
func (b *Bvk) JoinChannel(channel config.ChannelInfo) error {
return nil
}
func (b *Bvk) Send(msg config.Message) (string, error) {
b.Log.Debugf("=> Receiving %#v", msg)
peerID, err := strconv.Atoi(msg.Channel)
if err != nil {
return "", err
}
params := api.Params{}
text := msg.Username + msg.Text
if msg.Extra != nil {
if len(msg.Extra["file"]) > 0 {
// generate attachments string
attachment, urls := b.uploadFiles(msg.Extra, peerID)
params["attachment"] = attachment
text += urls
}
}
params["message"] = text
if msg.ID == "" {
// New message
params["random_id"] = time.Now().Unix()
params["peer_ids"] = msg.Channel
res, e := b.c.MessagesSendPeerIDs(params)
if e != nil {
return "", err
}
return strconv.Itoa(res[0].ConversationMessageID), nil
}
// Edit message
messageID, err := strconv.ParseInt(msg.ID, 10, 64)
if err != nil {
return "", err
}
params["peer_id"] = peerID
params["conversation_message_id"] = messageID
_, err = b.c.MessagesEdit(params)
if err != nil {
return "", err
}
return msg.ID, nil
}
func (b *Bvk) getUser(id int) user {
u, found := b.usernamesMap[id]
if !found {
b.Log.Debug("Fetching username for ", id)
if id >= 0 {
result, _ := b.c.UsersGet(api.Params{
"user_ids": id,
"fields": "photo_200",
})
resUser := result[0]
u = user{lastname: resUser.LastName, firstname: resUser.FirstName, avatar: resUser.Photo200}
b.usernamesMap[id] = u
} else {
result, _ := b.c.GroupsGetByID(api.Params{
"group_id": id * -1,
})
resGroup := result[0]
u = user{lastname: resGroup.Name, avatar: resGroup.Photo200}
}
}
return u
}
func (b *Bvk) handleMessage(msg object.MessagesMessage, isFwd bool) {
b.Log.Debug("ChatID: ", msg.PeerID)
// fetch user info
u := b.getUser(msg.FromID)
rmsg := config.Message{
Text: msg.Text,
Username: u.firstname + " " + u.lastname,
Avatar: u.avatar,
Channel: strconv.Itoa(msg.PeerID),
Account: b.Account,
UserID: strconv.Itoa(msg.FromID),
ID: strconv.Itoa(msg.ConversationMessageID),
Extra: make(map[string][]interface{}),
}
if msg.ReplyMessage != nil {
ur := b.getUser(msg.ReplyMessage.FromID)
rmsg.Text = "Re: " + ur.firstname + " " + ur.lastname + "\n" + rmsg.Text
}
if isFwd {
rmsg.Username = "Fwd: " + rmsg.Username
}
if len(msg.Attachments) > 0 {
urls, text := b.getFiles(msg.Attachments)
if text != "" {
rmsg.Text += "\n" + text
}
// download
b.downloadFiles(&rmsg, urls)
}
if len(msg.FwdMessages) > 0 {
rmsg.Text += strconv.Itoa(len(msg.FwdMessages)) + " forwarded messages"
}
b.Remote <- rmsg
if len(msg.FwdMessages) > 0 {
// recursive processing of forwarded messages
for _, m := range msg.FwdMessages {
m.PeerID = msg.PeerID
b.handleMessage(m, true)
}
}
}
func (b *Bvk) uploadFiles(extra map[string][]interface{}, peerID int) (string, string) {
var attachments []string
text := ""
for _, f := range extra["file"] {
fi := f.(config.FileInfo)
if fi.Comment != "" {
text += fi.Comment + "\n"
}
a, err := b.uploadFile(fi, peerID)
if err != nil {
b.Log.Error("File upload error ", fi.Name)
}
attachments = append(attachments, a)
}
return strings.Join(attachments, ","), text
}
func (b *Bvk) uploadFile(file config.FileInfo, peerID int) (string, error) {
r := bytes.NewReader(*file.Data)
photoRE := regexp.MustCompile(".(jpg|jpe|png)$")
if photoRE.MatchString(file.Name) {
p, err := b.c.UploadMessagesPhoto(peerID, r)
if err != nil {
return "", err
}
return photo + strconv.Itoa(p[0].OwnerID) + "_" + strconv.Itoa(p[0].ID), nil
}
var doctype string
if strings.Contains(file.Name, ".ogg") {
doctype = audioMessage
} else {
doctype = document
}
doc, err := b.c.UploadMessagesDoc(peerID, doctype, file.Name, "", r)
if err != nil {
return "", err
}
switch doc.Type {
case audioMessage:
return document + strconv.Itoa(doc.AudioMessage.OwnerID) + "_" + strconv.Itoa(doc.AudioMessage.ID), nil
case document:
return document + strconv.Itoa(doc.Doc.OwnerID) + "_" + strconv.Itoa(doc.Doc.ID), nil
}
return "", nil
}
func (b *Bvk) getFiles(attachments []object.MessagesMessageAttachment) ([]string, string) {
var urls []string
var text []string
for _, a := range attachments {
switch a.Type {
case photo:
var resolution float64 = 0
url := a.Photo.Sizes[0].URL
for _, size := range a.Photo.Sizes {
r := size.Height * size.Width
if resolution < r {
resolution = r
url = size.URL
}
}
urls = append(urls, url)
case document:
urls = append(urls, a.Doc.URL)
case graffiti:
urls = append(urls, a.Graffiti.URL)
case audioMessage:
urls = append(urls, a.AudioMessage.DocsDocPreviewAudioMessage.LinkOgg)
case sticker:
var resolution float64 = 0
url := a.Sticker.Images[0].URL
for _, size := range a.Sticker.Images {
r := size.Height * size.Width
if resolution < r {
resolution = r
url = size.URL
}
}
urls = append(urls, url+".png")
case video:
text = append(text, "https://vk.com/video"+strconv.Itoa(a.Video.OwnerID)+"_"+strconv.Itoa(a.Video.ID))
case wall:
text = append(text, "https://vk.com/wall"+strconv.Itoa(a.Wall.FromID)+"_"+strconv.Itoa(a.Wall.ID))
default:
text = append(text, "This attachment is not supported ("+a.Type+")")
}
}
return urls, strings.Join(text, "\n")
}
func (b *Bvk) downloadFiles(rmsg *config.Message, urls []string) {
for _, url := range urls {
data, err := helper.DownloadFile(url)
if err == nil {
urlPart := strings.Split(url, "/")
name := strings.Split(urlPart[len(urlPart)-1], "?")[0]
helper.HandleDownloadData(b.Log, rmsg, name, "", url, data, b.General)
}
}
}

View File

@@ -289,6 +289,10 @@ func (b *Bwhatsapp) HandleAudioMessage(message whatsapp.AudioMessage) {
return
}
if len(fileExt) == 0 {
fileExt = append(fileExt, ".ogg")
}
filename := fmt.Sprintf("%v%v", message.Info.Id, fileExt[0])
b.Log.Debugf("Trying to download %s with size %#v and type %s", filename, message.Length, message.Type)

View File

@@ -1,8 +1,12 @@
package bxmpp
import (
"bytes"
"crypto/tls"
"encoding/json"
"fmt"
"net/http"
"net/url"
"strings"
"sync"
"time"
@@ -86,14 +90,21 @@ func (b *Bxmpp) Send(msg config.Message) (string, error) {
}
// Upload a file (in XMPP case send the upload URL because XMPP has no native upload support).
var err error
if msg.Extra != nil {
for _, rmsg := range helper.HandleExtra(&msg, b.General) {
b.Log.Debugf("=> Sending attachement message %#v", rmsg)
if _, err := b.xc.Send(xmpp.Chat{
Type: "groupchat",
Remote: rmsg.Channel + "@" + b.GetString("Muc"),
Text: rmsg.Username + rmsg.Text,
}); err != nil {
if b.GetString("WebhookURL") != "" {
err = b.postSlackCompatibleWebhook(msg)
} else {
_, err = b.xc.Send(xmpp.Chat{
Type: "groupchat",
Remote: rmsg.Channel + "@" + b.GetString("Muc"),
Text: rmsg.Username + rmsg.Text,
})
}
if err != nil {
b.Log.WithError(err).Error("Unable to send message with share URL.")
}
}
@@ -102,13 +113,24 @@ func (b *Bxmpp) Send(msg config.Message) (string, error) {
}
}
if b.GetString("WebhookURL") != "" {
b.Log.Debugf("Sending message using Webhook")
err := b.postSlackCompatibleWebhook(msg)
if err != nil {
b.Log.Errorf("Failed to send message using webhook: %s", err)
return "", err
}
return "", nil
}
// Post normal message.
var msgReplaceID string
msgID := xid.New().String()
if msg.ID != "" {
msgID = msg.ID
msgReplaceID = msg.ID
}
// Post normal message.
b.Log.Debugf("=> Sending message %#v", msg)
if _, err := b.xc.Send(xmpp.Chat{
Type: "groupchat",
@@ -122,6 +144,30 @@ func (b *Bxmpp) Send(msg config.Message) (string, error) {
return msgID, nil
}
func (b *Bxmpp) postSlackCompatibleWebhook(msg config.Message) error {
type XMPPWebhook struct {
Username string `json:"username"`
Text string `json:"text"`
}
webhookBody, err := json.Marshal(XMPPWebhook{
Username: msg.Username,
Text: msg.Text,
})
if err != nil {
b.Log.Errorf("Failed to marshal webhook: %s", err)
return err
}
resp, err := http.Post(b.GetString("WebhookURL")+"/"+url.QueryEscape(msg.Channel), "application/json", bytes.NewReader(webhookBody))
if err != nil {
b.Log.Errorf("Failed to POST webhook: %s", err)
return err
}
resp.Body.Close()
return nil
}
func (b *Bxmpp) createXMPP() error {
if !strings.Contains(b.GetString("Jid"), "@") {
return fmt.Errorf("the Jid %s doesn't contain an @", b.GetString("Jid"))
@@ -378,6 +424,11 @@ func (b *Bxmpp) skipMessage(message xmpp.Chat) bool {
return true
}
// Ignore messages posted by our webhook
if b.GetString("WebhookURL") != "" && strings.Contains(message.ID, "webhookbot") {
return true
}
// skip delayed messages
return !message.Stamp.IsZero() && time.Since(message.Stamp).Minutes() > 5
}

File diff suppressed because it is too large Load Diff

11
gateway/bridgemap/bvk.go Normal file
View File

@@ -0,0 +1,11 @@
// +build !novk
package bridgemap
import (
bvk "github.com/42wim/matterbridge/bridge/vk"
)
func init() {
FullMap["vk"] = bvk.New
}

View File

@@ -14,7 +14,7 @@ import (
"github.com/d5/tengo/v2"
"github.com/d5/tengo/v2/stdlib"
lru "github.com/hashicorp/golang-lru"
"github.com/matterbridge/emoji"
"github.com/kyokomi/emoji/v2"
"github.com/sirupsen/logrus"
)
@@ -127,7 +127,7 @@ func (gw *Gateway) AddConfig(cfg *config.Gateway) error {
gw.logger.Errorf("mapChannels() failed: %s", err)
}
for _, br := range append(gw.MyConfig.In, append(gw.MyConfig.InOut, gw.MyConfig.Out...)...) {
br := br //scopelint
br := br // scopelint
err := gw.AddBridge(&br)
if err != nil {
return err
@@ -386,6 +386,7 @@ func (gw *Gateway) modifyMessage(msg *config.Message) {
}
// replace :emoji: to unicode
emoji.ReplacePadding = ""
msg.Text = emoji.Sprint(msg.Text)
br := gw.Bridges[msg.Account]
@@ -496,7 +497,7 @@ func (gw *Gateway) SendMessage(
if mID != "" {
gw.logger.Debugf("mID %s: %s", dest.Account, mID)
return mID, nil
//brMsgIDs = append(brMsgIDs, &BrMsgID{dest, dest.Protocol + " " + mID, channel.ID})
// brMsgIDs = append(brMsgIDs, &BrMsgID{dest, dest.Protocol + " " + mID, channel.ID})
}
return "", nil
}

42
go.mod
View File

@@ -3,56 +3,56 @@ module github.com/42wim/matterbridge
require (
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f
github.com/Jeffail/gabs v1.4.0 // indirect
github.com/Philipp15b/go-steam v1.0.1-0.20200727090957-6ae9b3c0a560
github.com/Rhymen/go-whatsapp v0.1.2-0.20201226125722-8029c28f5c5a
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20200922220614-e4a51dfb52e4 // indirect
github.com/d5/tengo/v2 v2.6.2
github.com/Rhymen/go-whatsapp v0.1.2-0.20210126174449-3c094ebae0ce
github.com/SevereCloud/vksdk/v2 v2.9.0
github.com/d5/tengo/v2 v2.7.0
github.com/davecgh/go-spew v1.1.1
github.com/fsnotify/fsnotify v1.4.9
github.com/go-telegram-bot-api/telegram-bot-api v1.0.1-0.20200524105306-7434b0456e81
github.com/gomarkdown/markdown v0.0.0-20201113031856-722100d81a8e
github.com/google/gops v0.3.14
github.com/gomarkdown/markdown v0.0.0-20210208175418-bda154fe17d8
github.com/google/gops v0.3.17
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect
github.com/gorilla/schema v1.2.0
github.com/gorilla/websocket v1.4.2
github.com/hashicorp/golang-lru v0.5.4
github.com/jpillora/backoff v1.0.0
github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da
github.com/labstack/echo/v4 v4.1.17
github.com/kyokomi/emoji/v2 v2.2.8
github.com/labstack/echo/v4 v4.2.1
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7
github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20201206215757-c1d86d75b9f8
github.com/matterbridge/discordgo v0.22.1
github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20210403163225-761e8622445d
github.com/matterbridge/discordgo v0.21.2-0.20210201201054-fb39a175b4f7
github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050
github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913
github.com/matterbridge/logrus-prefixed-formatter v0.5.3-0.20200523233437-d971309a77ba
github.com/mattermost/mattermost-server/v5 v5.30.1
github.com/mattn/godown v0.0.1
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/missdeer/golib v1.0.4
github.com/mitchellh/mapstructure v1.3.3 // indirect
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 // indirect
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d // indirect
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c
github.com/rs/xid v1.2.1
github.com/rs/xid v1.3.0
github.com/russross/blackfriday v1.6.0
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
github.com/shazow/ssh-chat v1.10.1
github.com/sirupsen/logrus v1.7.0
github.com/slack-go/slack v0.7.4
github.com/sirupsen/logrus v1.8.1
github.com/slack-go/slack v0.8.2
github.com/spf13/afero v1.3.4 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.6.1
github.com/stretchr/testify v1.7.0
github.com/vincent-petithory/dataurl v0.0.0-20191104211930-d1553a71de50
github.com/writeas/go-strip-markdown v2.0.1+incompatible
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
github.com/yaegashi/msgraph.go v0.1.4
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2
golang.org/x/image v0.0.0-20201208152932-35266b937fa6
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5
github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602
gomod.garykim.dev/nc-talk v0.1.7
gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376
layeh.com/gumble v0.0.0-20200818122324-146f9205029b

154
go.sum
View File

@@ -77,20 +77,19 @@ github.com/Philipp15b/go-steam v1.0.1-0.20200727090957-6ae9b3c0a560/go.mod h1:o3
github.com/PuerkitoBio/goquery v1.4.1/go.mod h1:T9ezsOHcCrDCgA8aF1Cqr3sSYbO/xgdy8/R/XiIMAhA=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/Rhymen/go-whatsapp v0.0.0/go.mod h1:rdQr95g2C1xcOfM7QGOhza58HeI3I+tZ/bbluv7VazA=
github.com/Rhymen/go-whatsapp v0.1.2-0.20201226125722-8029c28f5c5a h1:xE1ogaIgFJQbEDoIkiAkMH9wVEAmlKOy/M+kf1xmtCY=
github.com/Rhymen/go-whatsapp v0.1.2-0.20201226125722-8029c28f5c5a/go.mod h1:o7jjkvKnigfu432dMbQ/w4PH0Yp5u4Y6ysCNjUlcYCk=
github.com/Rhymen/go-whatsapp v0.1.2-0.20210126174449-3c094ebae0ce h1:qitALaMtz6i05smexphqLty1gGc7Viwhn8bdSRmp4UM=
github.com/Rhymen/go-whatsapp v0.1.2-0.20210126174449-3c094ebae0ce/go.mod h1:o7jjkvKnigfu432dMbQ/w4PH0Yp5u4Y6ysCNjUlcYCk=
github.com/Rhymen/go-whatsapp/examples/echo v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:zgCiQtBtZ4P4gFWvwl9aashsdwOcbb/EHOGRmSzM8ME=
github.com/Rhymen/go-whatsapp/examples/restoreSession v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:5sCUSpG616ZoSJhlt9iBNI/KXBqrVLcNUJqg7J9+8pU=
github.com/Rhymen/go-whatsapp/examples/sendImage v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:RdiyhanVEGXTam+mZ3k6Y3VDCCvXYCwReOoxGozqhHw=
github.com/Rhymen/go-whatsapp/examples/sendTextMessages v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:suwzklatySS3Q0+NCxCDh5hYfgXdQUWU1DNcxwAxStM=
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
github.com/RoaringBitmap/roaring v0.5.1/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20200922220614-e4a51dfb52e4 h1:u7UvmSK6McEMXFZB310/YZ6uvfDaSFrSoqWoy/qaOW0=
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20200922220614-e4a51dfb52e4/go.mod h1:wVff6N8s2foRPCYeynerOM/FF44uyI60/HMiboL0SXw=
github.com/SevereCloud/vksdk/v2 v2.9.0 h1:39qjzmozK5FDfnDkfA+YN0CtKi4mDrzjPtoT5GN9Xg0=
github.com/SevereCloud/vksdk/v2 v2.9.0/go.mod h1:IBmfJ3rs+zDLD9NHCoJEpgg5A4UOoxgUU/g8p5lYb48=
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/advancedlogic/GoOse v0.0.0-20191112112754-e742535969c1/go.mod h1:f3HCSN1fBWjcpGtXyM119MJgeQl838v6so/PQOqvE1w=
@@ -102,7 +101,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58 h1:MkpmYfld/S8kXqTYI68DfL8/hHXjHogL120Dy00TIxc=
github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE=
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
@@ -189,8 +187,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
github.com/d5/tengo/v2 v2.6.2 h1:AnPhA/Y5qrNLb5QSWHU9uXq25T3QTTdd2waTgsAHMdc=
github.com/d5/tengo/v2 v2.6.2/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8=
github.com/d5/tengo/v2 v2.7.0 h1:oAGQ+gcas0/T0bdqvNxfKzjOJhpQRwceWIF5gldB3aM=
github.com/d5/tengo/v2 v2.7.0/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -271,7 +269,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo=
github.com/go-resty/resty/v2 v2.0.0/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
@@ -308,7 +305,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
@@ -324,8 +320,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomarkdown/markdown v0.0.0-20201113031856-722100d81a8e h1:/Y3B7hM9H3TOWPhe8eWGBGS4r09pjvS5Z0uoPADyjmU=
github.com/gomarkdown/markdown v0.0.0-20201113031856-722100d81a8e/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
github.com/gomarkdown/markdown v0.0.0-20210208175418-bda154fe17d8 h1:nWU6p08f1VgIalT6iZyqXi4o5cZsz4X6qa87nusfcsc=
github.com/gomarkdown/markdown v0.0.0-20210208175418-bda154fe17d8/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -333,19 +329,17 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gops v0.3.14 h1:4Gpv4sABlEsVqrtKxiSynzD0//kzjTIUwUm5UgkGILI=
github.com/google/gops v0.3.14/go.mod h1:zjT9F4XsKzazOvdVad3+Zwga79UHKziX3r9TN05rVN8=
github.com/google/gops v0.3.17 h1:CguOcnDVYG32soOj2YevV8mW9asrIh1lZw3d7Ovty/o=
github.com/google/gops v0.3.17/go.mod h1:Pfp8hWGIFdV/7rY9/O/U5WgdjYQXf/GiEK4NVuVd2ZE=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -357,7 +351,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -367,9 +360,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 h1:4EZlYQIiyecYJlUbVkFXCXHz1QPhVXcHnQKAzBTPfQo=
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4/go.mod h1:lEO7XoHJ/xNRBCxrn4h/CEB67h0kW1B0t4ooP2yrjUA=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -402,7 +393,6 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -441,7 +431,6 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -491,7 +480,6 @@ github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6i
github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0=
github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da h1:LK+8uBG3kNikj664cjFt88RBmuGmonxkXv2rUVfbqz4=
github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da/go.mod h1:xJA+X9ZVyT/irGldcb7q1XnJBq5F9s5H9h2L44Y+poY=
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68=
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -510,19 +498,19 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kyokomi/emoji/v2 v2.2.8 h1:jcofPxjHWEkJtkIbcLHvZhxKgCPl6C7MyjTrD4KDqUE=
github.com/kyokomi/emoji/v2 v2.2.8/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE=
github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
github.com/labstack/echo/v4 v4.1.17 h1:PQIBaRplyRy3OjwILGkPg89JRtH2x5bssi59G2EL3fo=
github.com/labstack/echo/v4 v4.1.17/go.mod h1:Tn2yRQL/UclUalpb5rPdXDevbkJ+lp/2svdyFBg6CHQ=
github.com/labstack/echo/v4 v4.2.1 h1:LF5Iq7t/jrtUuSutNuiEWtB5eiHfZ5gSe2pcu5exjQw=
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
@@ -544,14 +532,12 @@ github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd h1:xVrqJK3xHREMNjwjljkAUaadalWc0rRbmVuQatzmgwg=
github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s=
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20201206215757-c1d86d75b9f8 h1:2iHni9FGPRRnaZrknLp+Kyr1CWbRIRUjp89TNpkqy3I=
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20201206215757-c1d86d75b9f8/go.mod h1:c6MxwqHD+0HvtAJjsHMIdPCiAwGiQwPRPTp69ACMg8A=
github.com/matterbridge/discordgo v0.22.1 h1:Wh2NXfvF4egJDxX7jEvtgxJgT/ZOqD/5tfcIsNnHJ9o=
github.com/matterbridge/discordgo v0.22.1/go.mod h1:411nZYv0UMMrtppR5glXop1foboJiFAowy+42U+Ahvw=
github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible h1:oaOqwbg5HxHRxvAbd84ks0Okwoc1ISyUZ87EiVJFhGI=
github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible/go.mod h1:igE6rUAn3jai2wCdsjFHfhUoekjrFthoEjFObKKwSb4=
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16 h1:ZtO5uywdd5dLDCud4r0r55eP4j9FuUNpl60Gmntcop4=
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s=
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20210403163225-761e8622445d h1:Csy27nDj00vRGp2+QvwSanaW0RA60SZUHXCk4BBT0AU=
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20210403163225-761e8622445d/go.mod h1:c6MxwqHD+0HvtAJjsHMIdPCiAwGiQwPRPTp69ACMg8A=
github.com/matterbridge/discordgo v0.21.2-0.20210201201054-fb39a175b4f7 h1:4J2YZuY8dIYrxbLMsWGqPZb/B59ygCwSBkyZHez5PSY=
github.com/matterbridge/discordgo v0.21.2-0.20210201201054-fb39a175b4f7/go.mod h1:411nZYv0UMMrtppR5glXop1foboJiFAowy+42U+Ahvw=
github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050 h1:kWkP1lXpkvtoNL08jkP3XQH/zvDOEXJpdCJd/DlIvMw=
github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913 h1:5UGr9fLsvAvhjP6i5XJmd0ZIwYVR2gZCzU1lJZ7wfLY=
@@ -573,7 +559,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@@ -590,7 +575,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0=
github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
@@ -602,8 +586,8 @@ github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpe
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg=
github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mholt/archiver/v3 v3.4.0/go.mod h1:00RcBMhNszoMqnda/5VHHL9+cBoTgj+AkLnmwr3HGrA=
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
@@ -628,8 +612,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
@@ -637,8 +619,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
github.com/monaco-io/request v1.0.5 h1:QAJb5m1pCPZUGv3zzTZn7GlQI3q+uJWi7fH9QxDGbm4=
github.com/monaco-io/request v1.0.5/go.mod h1:EmggwHktBsbJmCgwZXqy7o0H1NNsAstQBWZrFVd3xtQ=
github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 h1:oKIteTqeSpenyTrOVj5zkiyCaflLa8B+CD0324otT+o=
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d h1:tLWCMSjfL8XyZwpu1RzI2UpJSPbZCOZ6DVHQFnlpL7A=
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff h1:HLGD5/9UxxfEuO9DtP8gnTmNtMxbPyhYltfxsITel8g=
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff/go.mod h1:B8jLfIIPn2sKyWr0D7cL2v7tnrDD5z291s2Zypdu89E=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
@@ -673,22 +655,17 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
github.com/olekukonko/tablewriter v0.0.0-20180506121414-d4647c9c7a84/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
github.com/olivere/elastic v6.2.35+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y=
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4=
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs=
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -713,11 +690,9 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c h1:P6XGcuPTigoHf4TSu+3D/7QOQ1MbL6alNwrGhcW7sKw=
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c/go.mod h1:YnNlZP7l4MhyGQ4CBRwv6ohZTPrUJJZtEv4ZgADkbs4=
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw=
github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM=
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
@@ -731,7 +706,6 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
github.com/pierrec/lz4/v3 v3.3.2/go.mod h1:280XNCGS8jAcG++AHdd6SeWnzyJ1w9oow2vbORyey8Q=
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -784,11 +758,11 @@ github.com/rickb777/plural v1.2.0/go.mod h1:UdpyWFCGbo3mvK3f/PfZOAOrkjzJlYN/sD46
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4=
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rudderlabs/analytics-go v3.2.1+incompatible/go.mod h1:LF8/ty9kUX4PTY3l5c97K3nZZaX5Hwsvt+NBaRL/f30=
github.com/russellhaering/goxmldsig v1.1.0/go.mod h1:QK8GhXPB3+AfuCrfo0oRISa9NfzeCpWmxeGnqEpDF9o=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
@@ -809,8 +783,7 @@ github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4 h1:zwQ1HBo5FYwn1ksMd
github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
github.com/shazow/ssh-chat v1.10.1 h1:ePS+ngEYqm+yUuXegDPutysqLV2WoI22XDOeRgI6CE0=
github.com/shazow/ssh-chat v1.10.1/go.mod h1:0+7szsKylcre0vljkVnbuI6q7Odtc+QCDHxa+fFNV54=
github.com/shirou/gopsutil v2.20.4+incompatible h1:cMT4rxS55zx9NVUnCkrmXCsEB/RNfG9SwHY9evtX8Ng=
github.com/shirou/gopsutil v2.20.4+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw=
github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM=
github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0=
@@ -838,13 +811,13 @@ github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyq
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9 h1:lpEzuenPuO1XNTeikEmvqYFcU37GVLl8SRNblzyvGBE=
github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo=
github.com/slack-go/slack v0.7.4 h1:Z+7CmUDV+ym4lYLA4NNLFIpr3+nDgViHrx8xsuXgrYs=
github.com/slack-go/slack v0.7.4/go.mod h1:FGqNzJBmxIsZURAxh2a8D21AnOVvvXZvGligs4npPUM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/slack-go/slack v0.8.2 h1:D7jNu0AInBfdQ4QyKPtVSp+ZxQes3EzWW17RZ/va4JE=
github.com/slack-go/slack v0.8.2/go.mod h1:FGqNzJBmxIsZURAxh2a8D21AnOVvvXZvGligs4npPUM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
@@ -856,11 +829,9 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.3.4 h1:8q6vk3hthlpb2SouZcnBVKboxWQWMDNF38bwholZrJc=
github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
@@ -869,10 +840,7 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -890,15 +858,14 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As=
github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -910,6 +877,8 @@ github.com/throttled/throttled v2.2.5+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLs
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ=
github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek=
github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
@@ -957,7 +926,6 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v1.0.0 h1:J0TkWtiuYgtdlrkkrDLISYBQ92M+X5m4LrIIMKrbDTs=
github.com/xlab/treeprint v1.0.0/go.mod h1:IoImgRak9i3zJyuxOKUP1v4UZd1tMoKkq/Cimt1uhCg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c/go.mod h1:UrdRz5enIKZ63MEE3IF9l2/ebyx59GyGgPi+tICQdmM=
@@ -972,8 +940,8 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2 h1:UQwvu7FjUEdVYofx0U6bsc5odNE7wa5TSA0fl559GcA=
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134 h1:itYC8Ycx8aVBN7a8q1Yr187W5WmQthvYU13+f4rOWkU=
github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -991,23 +959,17 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
@@ -1030,9 +992,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg=
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
@@ -1053,10 +1013,9 @@ golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMx
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 h1:QelT11PB4FXiDEXucrfNckHoFxwt8USGY1ajP1ZF5lM=
golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20201208152932-35266b937fa6 h1:nfeHNc1nAqecKCy2FCy4HY+soOOe5sDLJ/gZLbx6GYI=
golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk=
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1076,9 +1035,7 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -1117,9 +1074,7 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
@@ -1128,10 +1083,7 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 h1:wBouT66WTYFXdxfVdz9sVWARVd/2vfGcmI45D2gj45M=
golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1141,10 +1093,9 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr
golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1203,27 +1154,22 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 h1:YTzHMGlqJu67/uEo1lBv0n3wBXhXNeUbB1XfN2vmTm0=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6 h1:DvY3Zkh7KabQE/kfzMvYvKirSiguP9Q/veMtkYyf0o8=
golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201007165808-a893ed343c85/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65 h1:Qo9oJ566/Sq7N4hrGftVXs8GI2CXBCuOd4S2wHE/e0M=
golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d h1:MiWWjyhUzZ+jvhZvloX6ZrUsdEghn8a64Upd8EMHglE=
golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210217105451-b926d437f341 h1:2/QtM1mL37YmcsT8HaDNHDgTqqFVw+zr8UzMiBVLzYU=
golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -1231,6 +1177,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1281,19 +1229,16 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200529172331-a64b76657301 h1:G6CNEgFU8/XwexSnuFw+Jq/WePjRitgy6ofBcPnAIPo=
golang.org/x/tools v0.0.0-20200529172331-a64b76657301/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20201008025239-9df69603baec h1:RY2OghEV/7X1MLaecgm1mwFd3sGvUddm5pGVSxQvX0c=
golang.org/x/tools v0.0.0-20201008025239-9df69603baec/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1326,7 +1271,6 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
@@ -1397,7 +1341,6 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
@@ -1406,19 +1349,16 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
@@ -1440,11 +1380,9 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
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=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -1456,7 +1394,6 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
@@ -1464,7 +1401,6 @@ layeh.com/gopus v0.0.0-20161224163843-0ebf989153aa/go.mod h1:AOef7vHz0+v4sWwJnr0
layeh.com/gumble v0.0.0-20200818122324-146f9205029b h1:Kne6wkHqbqrygRsqs5XUNhSs84DFG5TYMeCkCbM56sY=
layeh.com/gumble v0.0.0-20200818122324-146f9205029b/go.mod h1:tWPVA9ZAfImNwabjcd9uDE+Mtz0Hfs7a7G3vxrnrwyc=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/goversion v1.2.0 h1:SPn+NLTiAG7w30IRK/DKp1BjvpWabYgxlLp/+kx5J8w=
rsc.io/goversion v1.2.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

View File

@@ -16,7 +16,7 @@ import (
)
var (
version = "1.21.0"
version = "1.22.1"
githash string
flagConfig = flag.String("conf", "matterbridge.toml", "config file")

View File

@@ -310,6 +310,11 @@ StripNick=false
#OPTIONAL (default false)
ShowTopicChange=false
#Enable sending messages using a webhook instead of regular MUC messages.
#Only works with a prosody server using mod_slack_webhook. Does not support editing.
#OPTIONAL (default "")
WebhookURL="https://yourdomain/prosody/msg/someid"
###################################################################
#mattermost section
###################################################################
@@ -1481,6 +1486,18 @@ TLSCACertificate=mumble-ca.crt
# OPTIONAL (default false)
SkipTLSVerify=false
###################################################################
#VK
###################################################################
[vk.myvk]
#Group access token
#See https://vk.com/dev/bots_docs
Token="Yourtokenhere"
#Group ID
#For example in URL https://vk.com/public168963511 group ID is 168963511
GroupID=123456789
###################################################################
#
# WhatsApp
@@ -1830,7 +1847,7 @@ enable=true
# rocketchat | channel | #channel | # is required for private channels too
# -------------------------------------------------------------------------------------------------------------------------------------
# slack | channel name | general | Do not include the # symbol
# | channel id | ID:C123456 | The underlying ID of a channel. This doesn't work with
# | channel id | ID:C123456 | The underlying ID of a channel. This doesn't work with webhooks.
# -------------------------------------------------------------------------------------------------------------------------------------
# steam | chatid | example needed | The number in the URL when you click "enter chat room" in the browser
# -------------------------------------------------------------------------------------------------------------------------------------
@@ -1838,6 +1855,8 @@ enable=true
# -------------------------------------------------------------------------------------------------------------------------------------
# telegram | chatid | -123456789 | A large negative number. see https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau
# -------------------------------------------------------------------------------------------------------------------------------------
# vk | peerid | 2000000002 | A number that starts form 2000000000. Use --debug and send any message in chat to get PeerID in the logs
# -------------------------------------------------------------------------------------------------------------------------------------
# whatsapp | group JID | 48111222333-123455678999@g.us | A unique group JID. If you specify an empty string, bridge will list all the possibilities
# | "Group Name" | "Family Chat" | if you specify a group name, the bridge will find hint the JID to specify. Names can change over time and are not stable.
# -------------------------------------------------------------------------------------------------------------------------------------

View File

@@ -2,9 +2,11 @@ package whatsapp
import (
"fmt"
"github.com/Rhymen/go-whatsapp/binary"
"strconv"
"strings"
"time"
"github.com/Rhymen/go-whatsapp/binary"
)
type Presence string
@@ -241,3 +243,46 @@ func buildParticipantNodes(participants []string) []binary.Node {
}
return p
}
func (wac *Conn) BlockContact(jid string) (<-chan string, error) {
return wac.handleBlockContact("add", jid)
}
func (wac *Conn) UnblockContact(jid string) (<-chan string, error) {
return wac.handleBlockContact("remove", jid)
}
func (wac *Conn) handleBlockContact(action, jid string) (<-chan string, error) {
ts := time.Now().Unix()
tag := fmt.Sprintf("%d.--%d", ts, wac.msgCount)
netsplit := strings.Split(jid, "@")
cusjid := netsplit[0] + "@c.us"
n := binary.Node{
Description: "action",
Attributes: map[string]string{
"type": "set",
"epoch": strconv.Itoa(wac.msgCount),
},
Content: []interface{}{
binary.Node{
Description: "block",
Attributes: map[string]string{
"type": action,
},
Content: []binary.Node{
{
Description: "user",
Attributes: map[string]string{
"jid": cusjid,
},
Content: nil,
},
},
},
},
}
return wac.writeBinary(n, contact, ignore, tag)
}

View File

@@ -83,10 +83,8 @@ func (wac *Conn) processReadData(msgType int, msg []byte) error {
// chan string to something like chan map[string]interface{}. The unmarshalling
// in several places, especially in session.go, would then be gone.
listener <- data[1]
wac.listener.Lock()
delete(wac.listener.m, data[0])
wac.listener.Unlock()
close(listener)
wac.removeListener(data[0])
} else if msgType == websocket.BinaryMessage {
wac.loginSessionLock.RLock()
sess := wac.session

View File

@@ -15,15 +15,30 @@ import (
"github.com/pkg/errors"
)
func (wac *Conn) addListener(ch chan string, messageTag string) {
wac.listener.Lock()
wac.listener.m[messageTag] = ch
wac.listener.Unlock()
}
func (wac *Conn) removeListener(answerMessageTag string) {
wac.listener.Lock()
delete(wac.listener.m, answerMessageTag)
wac.listener.Unlock()
}
//writeJson enqueues a json message into the writeChan
func (wac *Conn) writeJson(data []interface{}) (<-chan string, error) {
ch := make(chan string, 1)
wac.writerLock.Lock()
defer wac.writerLock.Unlock()
d, err := json.Marshal(data)
if err != nil {
return nil, err
close(ch)
return ch, err
}
ts := time.Now().Unix()
@@ -35,9 +50,13 @@ func (wac *Conn) writeJson(data []interface{}) (<-chan string, error) {
wac.timeTag = tss[len(tss)-3:]
}
ch, err := wac.write(websocket.TextMessage, messageTag, bytes)
wac.addListener(ch, messageTag)
err = wac.write(websocket.TextMessage, bytes)
if err != nil {
return nil, err
close(ch)
wac.removeListener(messageTag)
return ch, err
}
wac.msgCount++
@@ -45,8 +64,12 @@ func (wac *Conn) writeJson(data []interface{}) (<-chan string, error) {
}
func (wac *Conn) writeBinary(node binary.Node, metric metric, flag flag, messageTag string) (<-chan string, error) {
ch := make(chan string, 1)
if len(messageTag) < 2 {
return nil, ErrMissingMessageTag
close(ch)
return ch, ErrMissingMessageTag
}
wac.writerLock.Lock()
@@ -54,16 +77,21 @@ func (wac *Conn) writeBinary(node binary.Node, metric metric, flag flag, message
data, err := wac.encryptBinaryMessage(node)
if err != nil {
return nil, errors.Wrap(err, "encryptBinaryMessage(node) failed")
close(ch)
return ch, errors.Wrap(err, "encryptBinaryMessage(node) failed")
}
bytes := []byte(messageTag + ",")
bytes = append(bytes, byte(metric), byte(flag))
bytes = append(bytes, data...)
ch, err := wac.write(websocket.BinaryMessage, messageTag, bytes)
wac.addListener(ch, messageTag)
err = wac.write(websocket.BinaryMessage, bytes)
if err != nil {
return nil, errors.Wrap(err, "failed to write message")
close(ch)
wac.removeListener(messageTag)
return ch, errors.Wrap(err, "failed to write message")
}
wac.msgCount++
@@ -71,9 +99,15 @@ func (wac *Conn) writeBinary(node binary.Node, metric metric, flag flag, message
}
func (wac *Conn) sendKeepAlive() error {
respChan := make(chan string, 1)
wac.addListener(respChan, "!")
bytes := []byte("?,,")
respChan, err := wac.write(websocket.TextMessage, "!", bytes)
err := wac.write(websocket.TextMessage, bytes)
if err != nil {
close(respChan)
wac.removeListener("!")
return errors.Wrap(err, "error sending keepAlive")
}
@@ -122,32 +156,21 @@ func (wac *Conn) sendAdminTest() (bool, error) {
}
}
func (wac *Conn) write(messageType int, answerMessageTag string, data []byte) (<-chan string, error) {
var ch chan string
if answerMessageTag != "" {
ch = make(chan string, 1)
wac.listener.Lock()
wac.listener.m[answerMessageTag] = ch
wac.listener.Unlock()
}
func (wac *Conn) write(messageType int, data []byte) error {
if wac == nil || wac.ws == nil {
return nil, ErrInvalidWebsocket
return ErrInvalidWebsocket
}
wac.ws.Lock()
err := wac.ws.conn.WriteMessage(messageType, data)
wac.ws.Unlock()
if err != nil {
if answerMessageTag != "" {
wac.listener.Lock()
delete(wac.listener.m, answerMessageTag)
wac.listener.Unlock()
}
return nil, errors.Wrap(err, "error writing to websocket")
return errors.Wrap(err, "error writing to websocket")
}
return ch, nil
return nil
}
func (wac *Conn) encryptBinaryMessage(node binary.Node) (data []byte, err error) {

5
vendor/github.com/SevereCloud/vksdk/v2/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,5 @@
_vendor/
vendor/
*.out
coverage.txt
*.test

84
vendor/github.com/SevereCloud/vksdk/v2/.golangci.yml generated vendored Normal file
View File

@@ -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

View File

@@ -0,0 +1,2 @@
---
no-hard-tabs: false

20
vendor/github.com/SevereCloud/vksdk/v2/.travis.yml generated vendored Normal file
View File

@@ -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)

92
vendor/github.com/SevereCloud/vksdk/v2/CONTRIBUTING.md generated vendored Normal file
View File

@@ -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` если это новая фича

21
vendor/github.com/SevereCloud/vksdk/v2/LICENSE generated vendored Normal file
View File

@@ -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.

121
vendor/github.com/SevereCloud/vksdk/v2/README.md generated vendored Normal file
View File

@@ -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)

555
vendor/github.com/SevereCloud/vksdk/v2/api/README.md generated vendored Normal file
View File

@@ -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)
}
```

196
vendor/github.com/SevereCloud/vksdk/v2/api/account.go generated vendored Normal file
View File

@@ -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
}

581
vendor/github.com/SevereCloud/vksdk/v2/api/ads.go generated vendored Normal file
View File

@@ -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
}

359
vendor/github.com/SevereCloud/vksdk/v2/api/api.go generated vendored Normal file
View File

@@ -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)
}

149
vendor/github.com/SevereCloud/vksdk/v2/api/apps.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

26
vendor/github.com/SevereCloud/vksdk/v2/api/auth.go generated vendored Normal file
View File

@@ -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
}

173
vendor/github.com/SevereCloud/vksdk/v2/api/board.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

163
vendor/github.com/SevereCloud/vksdk/v2/api/database.go generated vendored Normal file
View File

@@ -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
}

137
vendor/github.com/SevereCloud/vksdk/v2/api/docs.go generated vendored Normal file
View File

@@ -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
}

49
vendor/github.com/SevereCloud/vksdk/v2/api/donut.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

927
vendor/github.com/SevereCloud/vksdk/v2/api/errors.go generated vendored Normal file
View File

@@ -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}&section=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
}

52
vendor/github.com/SevereCloud/vksdk/v2/api/execute.go generated vendored Normal file
View File

@@ -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"
}

231
vendor/github.com/SevereCloud/vksdk/v2/api/fave.go generated vendored Normal file
View File

@@ -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
}

295
vendor/github.com/SevereCloud/vksdk/v2/api/friends.go generated vendored Normal file
View File

@@ -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
}

32
vendor/github.com/SevereCloud/vksdk/v2/api/gifts.go generated vendored Normal file
View File

@@ -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
}

712
vendor/github.com/SevereCloud/vksdk/v2/api/groups.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

74
vendor/github.com/SevereCloud/vksdk/v2/api/leads.go generated vendored Normal file
View File

@@ -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
}

79
vendor/github.com/SevereCloud/vksdk/v2/api/likes.go generated vendored Normal file
View File

@@ -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
}

319
vendor/github.com/SevereCloud/vksdk/v2/api/market.go generated vendored Normal file
View File

@@ -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
}

616
vendor/github.com/SevereCloud/vksdk/v2/api/messages.go generated vendored Normal file
View File

@@ -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
}

230
vendor/github.com/SevereCloud/vksdk/v2/api/newsfeed.go generated vendored Normal file
View File

@@ -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
}

100
vendor/github.com/SevereCloud/vksdk/v2/api/notes.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

90
vendor/github.com/SevereCloud/vksdk/v2/api/orders.go generated vendored Normal file
View File

@@ -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
}

81
vendor/github.com/SevereCloud/vksdk/v2/api/pages.go generated vendored Normal file
View File

@@ -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
}

613
vendor/github.com/SevereCloud/vksdk/v2/api/photos.go generated vendored Normal file
View File

@@ -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
}

179
vendor/github.com/SevereCloud/vksdk/v2/api/podcasts.go generated vendored Normal file
View File

@@ -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
}

106
vendor/github.com/SevereCloud/vksdk/v2/api/polls.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

17
vendor/github.com/SevereCloud/vksdk/v2/api/search.go generated vendored Normal file
View File

@@ -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
}

110
vendor/github.com/SevereCloud/vksdk/v2/api/secure.go generated vendored Normal file
View File

@@ -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
}

35
vendor/github.com/SevereCloud/vksdk/v2/api/stats.go generated vendored Normal file
View File

@@ -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
}

23
vendor/github.com/SevereCloud/vksdk/v2/api/status.go generated vendored Normal file
View File

@@ -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
}

48
vendor/github.com/SevereCloud/vksdk/v2/api/storage.go generated vendored Normal file
View File

@@ -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
}

305
vendor/github.com/SevereCloud/vksdk/v2/api/stories.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

961
vendor/github.com/SevereCloud/vksdk/v2/api/upload.go generated vendored Normal file
View File

@@ -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
}

104
vendor/github.com/SevereCloud/vksdk/v2/api/users.go generated vendored Normal file
View File

@@ -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
}

105
vendor/github.com/SevereCloud/vksdk/v2/api/utils.go generated vendored Normal file
View File

@@ -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
}

338
vendor/github.com/SevereCloud/vksdk/v2/api/video.go generated vendored Normal file
View File

@@ -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
}

383
vendor/github.com/SevereCloud/vksdk/v2/api/wall.go generated vendored Normal file
View File

@@ -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
}

33
vendor/github.com/SevereCloud/vksdk/v2/api/widgets.go generated vendored Normal file
View File

@@ -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
}

12
vendor/github.com/SevereCloud/vksdk/v2/doc.go generated vendored Normal file
View File

@@ -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"
)

View File

@@ -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)
}

1241
vendor/github.com/SevereCloud/vksdk/v2/events/events.go generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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"`
}

10
vendor/github.com/SevereCloud/vksdk/v2/go.mod generated vendored Normal file
View File

@@ -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
)

18
vendor/github.com/SevereCloud/vksdk/v2/go.sum generated vendored Normal file
View File

@@ -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=

View File

@@ -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}
}
}

View File

@@ -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
}

View File

@@ -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()
}
```

View File

@@ -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)
}

View File

@@ -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,
)
}

View File

@@ -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)
}

View File

@@ -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)
}

321
vendor/github.com/SevereCloud/vksdk/v2/object/ads.go generated vendored Normal file
View File

@@ -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
}

101
vendor/github.com/SevereCloud/vksdk/v2/object/apps.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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"`
}

67
vendor/github.com/SevereCloud/vksdk/v2/object/audio.go generated vendored Normal file
View File

@@ -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"`
}

40
vendor/github.com/SevereCloud/vksdk/v2/object/board.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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
}

117
vendor/github.com/SevereCloud/vksdk/v2/object/docs.go generated vendored Normal file
View File

@@ -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
}

View File

@@ -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"`
}

41
vendor/github.com/SevereCloud/vksdk/v2/object/fave.go generated vendored Normal file
View File

@@ -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"`
}

View File

@@ -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
}

34
vendor/github.com/SevereCloud/vksdk/v2/object/gifts.go generated vendored Normal file
View File

@@ -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"`
}

807
vendor/github.com/SevereCloud/vksdk/v2/object/groups.go generated vendored Normal file
View File

@@ -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"`
}

Some files were not shown because too many files have changed in this diff Show More