forked from lug/matterbridge
Compare commits
2 Commits
v1.16.3
...
discord-we
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
831b5b332f | ||
|
|
d93879bca5 |
@@ -1,3 +0,0 @@
|
|||||||
go:
|
|
||||||
comments:
|
|
||||||
disabled: true
|
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,5 @@
|
|||||||
# Exclude matterbridge binary
|
# Exclude matterbridge binary
|
||||||
/matterbridge
|
matterbridge
|
||||||
/matterbridge.exe
|
|
||||||
|
|
||||||
# Exclude configuration file
|
# Exclude configuration file
|
||||||
matterbridge.toml
|
matterbridge.toml
|
||||||
|
|||||||
@@ -174,7 +174,6 @@ linters:
|
|||||||
- lll
|
- lll
|
||||||
- maligned
|
- maligned
|
||||||
- prealloc
|
- prealloc
|
||||||
- wsl
|
|
||||||
|
|
||||||
|
|
||||||
# rules to deal with reported isues
|
# rules to deal with reported isues
|
||||||
|
|||||||
@@ -21,11 +21,7 @@ builds:
|
|||||||
ldflags:
|
ldflags:
|
||||||
- -s -w -X main.githash={{.ShortCommit}}
|
- -s -w -X main.githash={{.ShortCommit}}
|
||||||
|
|
||||||
archives:
|
archive:
|
||||||
-
|
|
||||||
id: matterbridge
|
|
||||||
builds:
|
|
||||||
- matterbridge
|
|
||||||
name_template: "{{ .Binary }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
|
name_template: "{{ .Binary }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
|
||||||
format: binary
|
format: binary
|
||||||
files:
|
files:
|
||||||
|
|||||||
10
.travis.yml
10
.travis.yml
@@ -20,22 +20,22 @@ jobs:
|
|||||||
- stage: lint
|
- stage: lint
|
||||||
# Run linting in one Go environment only.
|
# Run linting in one Go environment only.
|
||||||
script: ./ci/lint.sh
|
script: ./ci/lint.sh
|
||||||
go: 1.13.x
|
go: 1.12.x
|
||||||
env:
|
env:
|
||||||
- GO111MODULE=on
|
- GO111MODULE=on
|
||||||
- GOLANGCI_VERSION="v1.21.0"
|
- GOLANGCI_VERSION="v1.17.1"
|
||||||
- stage: test
|
- stage: test
|
||||||
# Run tests in a combination of Go environments.
|
# Run tests in a combination of Go environments.
|
||||||
script: ./ci/test.sh
|
script: ./ci/test.sh
|
||||||
go: 1.12.x
|
go: 1.11.x
|
||||||
env:
|
env:
|
||||||
- GO111MODULE=off
|
- GO111MODULE=off
|
||||||
- script: ./ci/test.sh
|
- script: ./ci/test.sh
|
||||||
go: 1.12.x
|
go: 1.11.x
|
||||||
env:
|
env:
|
||||||
- GO111MODULE=on
|
- GO111MODULE=on
|
||||||
- script: ./ci/test.sh
|
- script: ./ci/test.sh
|
||||||
go: 1.13.x
|
go: 1.12.x
|
||||||
env:
|
env:
|
||||||
- GO111MODULE=on
|
- GO111MODULE=on
|
||||||
- REPORT_COVERAGE=1
|
- REPORT_COVERAGE=1
|
||||||
|
|||||||
308
README.md
308
README.md
@@ -3,35 +3,32 @@
|
|||||||
# matterbridge
|
# matterbridge
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
**A simple chat bridge**<br />
|
**A simple chat bridge**<br />
|
||||||
Letting people be where they want to be.<br />
|
Letting people be where they want to be.<br />
|
||||||
<sub>Bridges between a growing number of protocols. Click below to demo or join the development chat.</sub>
|
<sub>Bridges between a growing number of protocols. Click below to demo or join the development chat.</sub>
|
||||||
|
|
||||||
<sup>
|
<sup>
|
||||||
|
|
||||||
[Gitter][mb-gitter] |
|
[Gitter][mb-gitter] |
|
||||||
[IRC][mb-irc] |
|
[IRC][mb-irc] |
|
||||||
[Discord][mb-discord] |
|
[Discord][mb-discord] |
|
||||||
[Matrix][mb-matrix] |
|
[Matrix][mb-matrix] |
|
||||||
[Slack][mb-slack] |
|
[Slack][mb-slack] |
|
||||||
[Mattermost][mb-mattermost] |
|
[Mattermost][mb-mattermost] |
|
||||||
[Rocket.Chat][mb-rocketchat] |
|
[Rocket.Chat][mb-rocketchat] |
|
||||||
[XMPP][mb-xmpp] |
|
[XMPP][mb-xmpp] |
|
||||||
[Twitch][mb-twitch] |
|
[Twitch][mb-twitch] |
|
||||||
[WhatsApp][mb-whatsapp] |
|
[WhatsApp][mb-whatsapp] |
|
||||||
[Zulip][mb-zulip] |
|
[Zulip][mb-zulip] |
|
||||||
[Telegram][mb-telegram] |
|
[Telegram][mb-telegram] |
|
||||||
[Keybase][mb-keybase] |
|
And more...
|
||||||
And more...
|
</sup>
|
||||||
</sup>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
----
|
||||||
[](https://github.com/42wim/matterbridge/releases/latest)
|
[](https://github.com/42wim/matterbridge/releases/latest)
|
||||||
[](https://bintray.com/42wim/nightly/Matterbridge/_latestVersion)
|
[](https://bintray.com/42wim/nightly/Matterbridge/_latestVersion)
|
||||||
[](https://codeclimate.com/github/42wim/matterbridge/maintainability)
|
[](https://codeclimate.com/github/42wim/matterbridge/maintainability)
|
||||||
[](https://codeclimate.com/github/42wim/matterbridge/test_coverage)<br />
|
[](https://codeclimate.com/github/42wim/matterbridge/test_coverage)<br />
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
</div>
|
</div>
|
||||||
<div align="right"><sup>
|
<div align="right"><sup>
|
||||||
@@ -45,149 +42,133 @@ And more...
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
### Table of Contents
|
### Table of Contents
|
||||||
|
* [Features](https://github.com/42wim/matterbridge/wiki/Features)
|
||||||
- [Features](https://github.com/42wim/matterbridge/wiki/Features)
|
* [Natively supported](#natively-supported)
|
||||||
- [Natively supported](#natively-supported)
|
* [3rd party via matterbridge api](#3rd-party-via-matterbridge-api)
|
||||||
- [3rd party via matterbridge api](#3rd-party-via-matterbridge-api)
|
* [API](#API)
|
||||||
- [API](#API)
|
* [Chat with us](#chat-with-us)
|
||||||
- [Chat with us](#chat-with-us)
|
* [Screenshots](https://github.com/42wim/matterbridge/wiki/)
|
||||||
- [Screenshots](https://github.com/42wim/matterbridge/wiki/)
|
* [Installing/upgrading](#installing--upgrading)
|
||||||
- [Installing/upgrading](#installing--upgrading)
|
* [Binaries](#binaries)
|
||||||
- [Binaries](#binaries)
|
* [Building](#building)
|
||||||
- [Building](#building)
|
* [Configuration](#configuration)
|
||||||
- [Configuration](#configuration)
|
* [Howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config)
|
||||||
- [Howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config)
|
* [Settings](#settings)
|
||||||
- [Settings](#settings)
|
* [Examples](#examples)
|
||||||
- [Examples](#examples)
|
* [Running](#running)
|
||||||
- [Running](#running)
|
* [Docker](#docker)
|
||||||
- [Docker](#docker)
|
* [Changelog](#changelog)
|
||||||
- [Changelog](#changelog)
|
* [FAQ](#faq)
|
||||||
- [FAQ](#faq)
|
* [Related projects](#related-projects)
|
||||||
- [Related projects](#related-projects)
|
* [Articles](#articles)
|
||||||
- [Articles](#articles)
|
* [Thanks](#thanks)
|
||||||
- [Thanks](#thanks)
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
* [Support bridging between any protocols](https://github.com/42wim/matterbridge/wiki/Features#support-bridging-between-any-protocols)
|
||||||
- [Support bridging between any protocols](https://github.com/42wim/matterbridge/wiki/Features#support-bridging-between-any-protocols)
|
* [Support multiple gateways(bridges) for your protocols](https://github.com/42wim/matterbridge/wiki/Features#support-multiple-gatewaysbridges-for-your-protocols)
|
||||||
- [Support multiple gateways(bridges) for your protocols](https://github.com/42wim/matterbridge/wiki/Features#support-multiple-gatewaysbridges-for-your-protocols)
|
* [Message edits and deletes](https://github.com/42wim/matterbridge/wiki/Features#message-edits-and-deletes)
|
||||||
- [Message edits and deletes](https://github.com/42wim/matterbridge/wiki/Features#message-edits-and-deletes)
|
* Preserves threading when possible
|
||||||
- Preserves threading when possible
|
* [Attachment / files handling](https://github.com/42wim/matterbridge/wiki/Features#attachment--files-handling)
|
||||||
- [Attachment / files handling](https://github.com/42wim/matterbridge/wiki/Features#attachment--files-handling)
|
* [Username and avatar spoofing](https://github.com/42wim/matterbridge/wiki/Features#username-and-avatar-spoofing)
|
||||||
- [Username and avatar spoofing](https://github.com/42wim/matterbridge/wiki/Features#username-and-avatar-spoofing)
|
* [Private groups](https://github.com/42wim/matterbridge/wiki/Features#private-groups)
|
||||||
- [Private groups](https://github.com/42wim/matterbridge/wiki/Features#private-groups)
|
* [API](https://github.com/42wim/matterbridge/wiki/Features#api)
|
||||||
- [API](https://github.com/42wim/matterbridge/wiki/Features#api)
|
|
||||||
|
|
||||||
### Natively supported
|
### Natively supported
|
||||||
|
|
||||||
- [Mattermost](https://github.com/mattermost/mattermost-server/) 4.x, 5.x
|
* [Mattermost](https://github.com/mattermost/mattermost-server/) 4.x, 5.x
|
||||||
- [IRC](http://www.mirc.com/servers.html)
|
* [IRC](http://www.mirc.com/servers.html)
|
||||||
- [XMPP](https://xmpp.org)
|
* [XMPP](https://xmpp.org)
|
||||||
- [Gitter](https://gitter.im)
|
* [Gitter](https://gitter.im)
|
||||||
- [Slack](https://slack.com)
|
* [Slack](https://slack.com)
|
||||||
- [Discord](https://discordapp.com)
|
* [Discord](https://discordapp.com)
|
||||||
- [Telegram](https://telegram.org)
|
* [Telegram](https://telegram.org)
|
||||||
- [Rocket.chat](https://rocket.chat)
|
* [Rocket.chat](https://rocket.chat)
|
||||||
- [Matrix](https://matrix.org)
|
* [Matrix](https://matrix.org)
|
||||||
- [Steam](https://store.steampowered.com/)
|
* [Steam](https://store.steampowered.com/)
|
||||||
- [Twitch](https://twitch.tv)
|
* [Twitch](https://twitch.tv)
|
||||||
- [Ssh-chat](https://github.com/shazow/ssh-chat)
|
* [Ssh-chat](https://github.com/shazow/ssh-chat)
|
||||||
- [WhatsApp](https://www.whatsapp.com/)
|
* [WhatsApp](https://www.whatsapp.com/)
|
||||||
- [Zulip](https://zulipchat.com)
|
* [Zulip](https://zulipchat.com)
|
||||||
- [Keybase](https://keybase.io)
|
|
||||||
|
|
||||||
### 3rd party via matterbridge api
|
### 3rd party via matterbridge api
|
||||||
|
* [Minecraft](https://github.com/elytra/MatterLink)
|
||||||
- [Minecraft](https://github.com/elytra/MatterLink)
|
* [Reddit](https://github.com/bonehurtingjuice/mattereddit)
|
||||||
- [Reddit](https://github.com/bonehurtingjuice/mattereddit)
|
* [Facebook messenger](https://github.com/VictorNine/fbridge)
|
||||||
- [Facebook messenger](https://github.com/VictorNine/fbridge)
|
* [Discourse](https://github.com/DeclanHoare/matterbabble)
|
||||||
- [Discourse](https://github.com/DeclanHoare/matterbabble)
|
|
||||||
- [Counter-Strike, half-life and more](https://forums.alliedmods.net/showthread.php?t=319430)
|
|
||||||
|
|
||||||
### API
|
### API
|
||||||
|
|
||||||
The API is basic at the moment.
|
The API is basic at the moment.
|
||||||
More info and examples on the [wiki](https://github.com/42wim/matterbridge/wiki/Api).
|
More info and examples on the [wiki](https://github.com/42wim/matterbridge/wiki/Api).
|
||||||
|
|
||||||
Used by the projects below. Feel free to make a PR to add your project to this list.
|
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 Server chat)
|
||||||
- [pyCord](https://github.com/NikkyAI/pyCord) (crossplatform chatbot)
|
* [pyCord](https://github.com/NikkyAI/pyCord) (crossplatform chatbot)
|
||||||
- [Mattereddit](https://github.com/bonehurtingjuice/mattereddit) (Reddit chat support)
|
* [Mattereddit](https://github.com/bonehurtingjuice/mattereddit) (Reddit chat support)
|
||||||
- [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
|
* [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
|
||||||
- [matterbabble](https://github.com/DeclanHoare/matterbabble) (Discourse 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)
|
|
||||||
|
|
||||||
## Chat with us
|
## Chat with us
|
||||||
|
|
||||||
Questions or want to test on your favorite platform? Join below:
|
Questions or want to test on your favorite platform? Join below:
|
||||||
|
|
||||||
- [Gitter][mb-gitter]
|
* [Gitter][mb-gitter]
|
||||||
- [IRC][mb-irc]
|
* [IRC][mb-irc]
|
||||||
- [Discord][mb-discord]
|
* [Discord][mb-discord]
|
||||||
- [Matrix][mb-matrix]
|
* [Matrix][mb-matrix]
|
||||||
- [Slack][mb-slack]
|
* [Slack][mb-slack]
|
||||||
- [Mattermost][mb-mattermost]
|
* [Mattermost][mb-mattermost]
|
||||||
- [Rocket.Chat][mb-rocketchat]
|
* [Rocket.Chat][mb-rocketchat]
|
||||||
- [XMPP][mb-xmpp] (matterbridge@conference.jabber.de)
|
* [XMPP][mb-xmpp] (matterbridge@conference.jabber.de)
|
||||||
- [Twitch][mb-twitch]
|
* [Twitch][mb-twitch]
|
||||||
- [Zulip][mb-zulip]
|
* [Zulip][mb-zulip]
|
||||||
- [Telegram][mb-telegram]
|
* [Telegram][mb-telegram]
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
See https://github.com/42wim/matterbridge/wiki
|
See https://github.com/42wim/matterbridge/wiki
|
||||||
|
|
||||||
## Installing / upgrading
|
## Installing / upgrading
|
||||||
|
|
||||||
### Binaries
|
### Binaries
|
||||||
|
* Latest stable release [v1.15.1](https://github.com/42wim/matterbridge/releases/latest)
|
||||||
- Latest stable release [v1.16.3](https://github.com/42wim/matterbridge/releases/latest)
|
* Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)
|
||||||
- Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)
|
|
||||||
|
|
||||||
To install or upgrade just download the latest [binary](https://github.com/42wim/matterbridge/releases/latest) and 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.
|
To install or upgrade just download the latest [binary](https://github.com/42wim/matterbridge/releases/latest) and 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.
|
||||||
|
|
||||||
### Packages
|
### Packages
|
||||||
|
* [Overview](https://repology.org/metapackage/matterbridge/versions)
|
||||||
- [Overview](https://repology.org/metapackage/matterbridge/versions)
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Most people just want to use binaries, you can find those [here](https://github.com/42wim/matterbridge/releases/latest)
|
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:
|
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.9+ is required. Make sure you have [Go](https://golang.org/doc/install) properly installed, including setting up your [GOPATH](https://golang.org/doc/code.html#GOPATH).
|
||||||
|
|
||||||
|
After Go is setup, download matterbridge to your $GOPATH directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
cd $GOPATH
|
||||||
go get github.com/42wim/matterbridge
|
go get github.com/42wim/matterbridge
|
||||||
```
|
```
|
||||||
|
|
||||||
You should now have matterbridge binary in the ~/go/bin directory:
|
You should now have matterbridge binary in the bin directory:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ls ~/go/bin/
|
$ ls bin/
|
||||||
matterbridge
|
matterbridge
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
### Basic configuration
|
### Basic configuration
|
||||||
|
|
||||||
See [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration.
|
See [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration.
|
||||||
|
|
||||||
### Settings
|
### Settings
|
||||||
|
|
||||||
All possible [settings](https://github.com/42wim/matterbridge/wiki/Settings) for each bridge.
|
All possible [settings](https://github.com/42wim/matterbridge/wiki/Settings) for each bridge.
|
||||||
|
|
||||||
### Advanced configuration
|
### Advanced configuration
|
||||||
|
* [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example.
|
||||||
- [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example.
|
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
#### Bridge mattermost (off-topic) - irc (#testing)
|
#### Bridge mattermost (off-topic) - irc (#testing)
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[irc]
|
[irc]
|
||||||
[irc.freenode]
|
[irc.freenode]
|
||||||
@@ -216,7 +197,6 @@ enable=true
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Bridge slack (#general) - discord (general)
|
#### Bridge slack (#general) - discord (general)
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[slack]
|
[slack]
|
||||||
[slack.test]
|
[slack.test]
|
||||||
@@ -261,15 +241,12 @@ Usage of ./matterbridge:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
|
|
||||||
Create your matterbridge.toml file locally eg in `/tmp/matterbridge.toml`
|
Create your matterbridge.toml file locally eg in `/tmp/matterbridge.toml`
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run -ti -v /tmp/matterbridge.toml:/matterbridge.toml 42wim/matterbridge
|
docker run -ti -v /tmp/matterbridge.toml:/matterbridge.toml 42wim/matterbridge
|
||||||
```
|
```
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
See [changelog.md](https://github.com/42wim/matterbridge/blob/master/changelog.md)
|
See [changelog.md](https://github.com/42wim/matterbridge/blob/master/changelog.md)
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
@@ -277,30 +254,28 @@ See [changelog.md](https://github.com/42wim/matterbridge/blob/master/changelog.m
|
|||||||
See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
|
See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
|
||||||
|
|
||||||
## Related projects
|
## Related projects
|
||||||
|
* [FOSSRIT/infrastructure - roles/matterbridge](https://github.com/FOSSRIT/infrastructure/tree/master/roles/matterbridge) (Ansible role used to automate deployments of Matterbridge)
|
||||||
- [FOSSRIT/infrastructure - roles/matterbridge](https://github.com/FOSSRIT/infrastructure/tree/master/roles/matterbridge) (Ansible role used to automate deployments of Matterbridge)
|
* [matterbridge autoconfig](https://github.com/patcon/matterbridge-autoconfig)
|
||||||
- [matterbridge autoconfig](https://github.com/patcon/matterbridge-autoconfig)
|
* [matterbridge config viewer](https://github.com/patcon/matterbridge-heroku-viewer)
|
||||||
- [matterbridge config viewer](https://github.com/patcon/matterbridge-heroku-viewer)
|
* [matterbridge-heroku](https://github.com/cadecairos/matterbridge-heroku)
|
||||||
- [matterbridge-heroku](https://github.com/cadecairos/matterbridge-heroku)
|
* [mattereddit](https://github.com/bonehurtingjuice/mattereddit)
|
||||||
- [mattereddit](https://github.com/bonehurtingjuice/mattereddit)
|
* [matterlink](https://github.com/elytra/MatterLink)
|
||||||
- [matterlink](https://github.com/elytra/MatterLink)
|
* [mattermost-plugin](https://github.com/matterbridge/mattermost-plugin) - Run matterbridge as a plugin in mattermost
|
||||||
- [mattermost-plugin](https://github.com/matterbridge/mattermost-plugin) - Run matterbridge as a plugin in mattermost
|
* [pyCord](https://github.com/NikkyAI/pyCord) (crossplatform chatbot)
|
||||||
- [pyCord](https://github.com/NikkyAI/pyCord) (crossplatform chatbot)
|
* [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
|
||||||
- [fbridge](https://github.com/VictorNine/fbridge) (Facebook messenger support)
|
* [isla](https://github.com/alphachung/isla) (Bot for Discord-Telegram groups used alongside matterbridge)
|
||||||
- [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)
|
||||||
- [matterbabble](https://github.com/DeclanHoare/matterbabble) (Connect Discourse threads to Matterbridge)
|
|
||||||
|
|
||||||
## Articles
|
## Articles
|
||||||
|
* [matterbridge on kubernetes](https://medium.freecodecamp.org/using-kubernetes-to-deploy-a-chat-gateway-or-when-technology-works-like-its-supposed-to-a169a8cd69a3)
|
||||||
- [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/
|
||||||
- https://mattermost.com/blog/connect-irc-to-mattermost/
|
* https://blog.valvin.fr/2016/09/17/mattermost-et-un-channel-irc-cest-possible/
|
||||||
- https://blog.valvin.fr/2016/09/17/mattermost-et-un-channel-irc-cest-possible/
|
* https://blog.brightscout.com/top-10-mattermost-integrations/
|
||||||
- https://blog.brightscout.com/top-10-mattermost-integrations/
|
* http://bencey.co.nz/2018/09/17/bridge/
|
||||||
- http://bencey.co.nz/2018/09/17/bridge/
|
* https://www.algoo.fr/blog/2018/01/19/recouvrez-votre-liberte-en-quittant-slack-pour-un-mattermost-auto-heberge/
|
||||||
- https://www.algoo.fr/blog/2018/01/19/recouvrez-votre-liberte-en-quittant-slack-pour-un-mattermost-auto-heberge/
|
* https://kopano.com/blog/matterbridge-bridging-mattermost-chat/
|
||||||
- https://kopano.com/blog/matterbridge-bridging-mattermost-chat/
|
* https://www.stitcher.com/s/?eid=52382713
|
||||||
- https://www.stitcher.com/s/?eid=52382713
|
* https://daniele.tech/2019/02/how-to-use-matterbridge-to-connect-2-different-slack-workspaces/
|
||||||
- https://daniele.tech/2019/02/how-to-use-matterbridge-to-connect-2-different-slack-workspaces/
|
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
@@ -312,37 +287,34 @@ See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
Matterbridge wouldn't exist without these libraries:
|
Matterbridge wouldn't exist without these libraries:
|
||||||
|
* discord - https://github.com/bwmarrin/discordgo
|
||||||
- discord - https://github.com/bwmarrin/discordgo
|
* echo - https://github.com/labstack/echo
|
||||||
- echo - https://github.com/labstack/echo
|
* gitter - https://github.com/sromku/go-gitter
|
||||||
- gitter - https://github.com/sromku/go-gitter
|
* gops - https://github.com/google/gops
|
||||||
- gops - https://github.com/google/gops
|
* gozulipbot - https://github.com/ifo/gozulipbot
|
||||||
- gozulipbot - https://github.com/ifo/gozulipbot
|
* irc - https://github.com/lrstanley/girc
|
||||||
- irc - https://github.com/lrstanley/girc
|
* mattermost - https://github.com/mattermost/mattermost-server
|
||||||
- mattermost - https://github.com/mattermost/mattermost-server
|
* matrix - https://github.com/matrix-org/gomatrix
|
||||||
- matrix - https://github.com/matrix-org/gomatrix
|
* sshchat - https://github.com/shazow/ssh-chat
|
||||||
- sshchat - https://github.com/shazow/ssh-chat
|
* slack - https://github.com/nlopes/slack
|
||||||
- slack - https://github.com/nlopes/slack
|
* steam - https://github.com/Philipp15b/go-steam
|
||||||
- steam - https://github.com/Philipp15b/go-steam
|
* telegram - https://github.com/go-telegram-bot-api/telegram-bot-api
|
||||||
- telegram - https://github.com/go-telegram-bot-api/telegram-bot-api
|
* xmpp - https://github.com/mattn/go-xmpp
|
||||||
- xmpp - https://github.com/mattn/go-xmpp
|
* whatsapp - https://github.com/Rhymen/go-whatsapp/
|
||||||
- whatsapp - https://github.com/Rhymen/go-whatsapp/
|
* zulip - https://github.com/ifo/gozulipbot
|
||||||
- zulip - https://github.com/ifo/gozulipbot
|
* tengo - https://github.com/d5/tengo
|
||||||
- tengo - https://github.com/d5/tengo
|
|
||||||
- keybase - https://github.com/keybase/go-keybase-chat-bot
|
|
||||||
|
|
||||||
<!-- Links -->
|
<!-- Links -->
|
||||||
|
|
||||||
[mb-gitter]: https://gitter.im/42wim/matterbridge
|
[mb-gitter]: https://gitter.im/42wim/matterbridge
|
||||||
[mb-irc]: https://webchat.freenode.net/?channels=matterbridgechat
|
[mb-irc]: https://webchat.freenode.net/?channels=matterbridgechat
|
||||||
[mb-discord]: https://discord.gg/AkKPtrQ
|
[mb-discord]: https://discord.gg/AkKPtrQ
|
||||||
[mb-matrix]: https://riot.im/app/#/room/#matterbridge:matrix.org
|
[mb-matrix]: https://riot.im/app/#/room/#matterbridge:matrix.org
|
||||||
[mb-slack]: https://join.slack.com/matterbridgechat/shared_invite/MjEwODMxNjU1NDMwLTE0OTk2MTU3NTMtMzZkZmRiNDZhOA
|
[mb-slack]: https://join.slack.com/matterbridgechat/shared_invite/MjEwODMxNjU1NDMwLTE0OTk2MTU3NTMtMzZkZmRiNDZhOA
|
||||||
[mb-mattermost]: https://framateam.org/signup_user_complete/?id=tfqm33ggop8x3qgu4boeieta6e
|
[mb-mattermost]: https://framateam.org/signup_user_complete/?id=tfqm33ggop8x3qgu4boeieta6e
|
||||||
[mb-rocketchat]: https://open.rocket.chat/channel/matterbridge
|
[mb-rocketchat]: https://open.rocket.chat/channel/matterbridge
|
||||||
[mb-xmpp]: https://inverse.chat/
|
[mb-xmpp]: https://inverse.chat/
|
||||||
[mb-twitch]: https://www.twitch.tv/matterbridge
|
[mb-twitch]: https://www.twitch.tv/matterbridge
|
||||||
[mb-whatsapp]: https://www.whatsapp.com/
|
[mb-whatsapp]: https://www.whatsapp.com/
|
||||||
[mb-keybase]: https://keybase.io
|
[mb-zulip]: https://matterbridge.zulipchat.com/register/
|
||||||
[mb-zulip]: https://matterbridge.zulipchat.com/register/
|
[mb-telegram]: https://t.me/Matterbridge
|
||||||
[mb-telegram]: https://t.me/Matterbridge
|
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ type Protocol struct {
|
|||||||
StripNick bool // all protocols
|
StripNick bool // all protocols
|
||||||
SyncTopic bool // slack
|
SyncTopic bool // slack
|
||||||
TengoModifyMessage string // general
|
TengoModifyMessage string // general
|
||||||
Team string // mattermost, keybase
|
Team string // mattermost
|
||||||
Token string // gitter, slack, discord, api
|
Token string // gitter, slack, discord, api
|
||||||
Topic string // zulip
|
Topic string // zulip
|
||||||
URL string // mattermost, slack // DEPRECATED
|
URL string // mattermost, slack // DEPRECATED
|
||||||
@@ -198,7 +198,6 @@ type BridgeValues struct {
|
|||||||
SSHChat map[string]Protocol
|
SSHChat map[string]Protocol
|
||||||
WhatsApp map[string]Protocol // TODO is this struct used? Search for "SlackLegacy" for example didn't return any results
|
WhatsApp map[string]Protocol // TODO is this struct used? Search for "SlackLegacy" for example didn't return any results
|
||||||
Zulip map[string]Protocol
|
Zulip map[string]Protocol
|
||||||
Keybase map[string]Protocol
|
|
||||||
General Protocol
|
General Protocol
|
||||||
Tengo Tengo
|
Tengo Tengo
|
||||||
Gateway []Gateway
|
Gateway []Gateway
|
||||||
@@ -206,7 +205,6 @@ type BridgeValues struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Config interface {
|
type Config interface {
|
||||||
Viper() *viper.Viper
|
|
||||||
BridgeValues() *BridgeValues
|
BridgeValues() *BridgeValues
|
||||||
GetBool(key string) (bool, bool)
|
GetBool(key string) (bool, bool)
|
||||||
GetInt(key string) (int, bool)
|
GetInt(key string) (int, bool)
|
||||||
@@ -275,10 +273,6 @@ func (c *config) BridgeValues() *BridgeValues {
|
|||||||
return c.cv
|
return c.cv
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *config) Viper() *viper.Viper {
|
|
||||||
return c.v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *config) GetBool(key string) (bool, bool) {
|
func (c *config) GetBool(key string) (bool, bool) {
|
||||||
c.RLock()
|
c.RLock()
|
||||||
defer c.RUnlock()
|
defer c.RUnlock()
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ func (b *Bdiscord) Connect() error {
|
|||||||
}
|
}
|
||||||
b.Log.Info("Connection succeeded")
|
b.Log.Info("Connection succeeded")
|
||||||
b.c.AddHandler(b.messageCreate)
|
b.c.AddHandler(b.messageCreate)
|
||||||
b.c.AddHandler(b.messageTyping)
|
|
||||||
b.c.AddHandler(b.memberUpdate)
|
b.c.AddHandler(b.memberUpdate)
|
||||||
b.c.AddHandler(b.messageUpdate)
|
b.c.AddHandler(b.messageUpdate)
|
||||||
b.c.AddHandler(b.messageDelete)
|
b.c.AddHandler(b.messageDelete)
|
||||||
@@ -189,14 +188,6 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
|
|||||||
return "", fmt.Errorf("Could not find channelID for %v", msg.Channel)
|
return "", fmt.Errorf("Could not find channelID for %v", msg.Channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg.Event == config.EventUserTyping {
|
|
||||||
if b.GetBool("ShowUserTyping") {
|
|
||||||
err := b.c.ChannelTyping(channelID)
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make a action /me of the message
|
// Make a action /me of the message
|
||||||
if msg.Event == config.EventUserAction {
|
if msg.Event == config.EventUserAction {
|
||||||
msg.Text = "_" + msg.Text + "_"
|
msg.Text = "_" + msg.Text + "_"
|
||||||
@@ -234,10 +225,20 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b.Log.Debugf("Broadcasting using Webhook")
|
b.Log.Debugf("Broadcasting using Webhook")
|
||||||
|
for _, f := range msg.Extra["file"] {
|
||||||
|
fi := f.(config.FileInfo)
|
||||||
|
if fi.Comment != "" {
|
||||||
|
msg.Text += fi.Comment + ": "
|
||||||
|
}
|
||||||
|
if fi.URL != "" {
|
||||||
|
msg.Text = fi.URL
|
||||||
|
if fi.Comment != "" {
|
||||||
|
msg.Text = fi.Comment + ": " + fi.URL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// skip empty messages
|
// skip empty messages
|
||||||
if msg.Text == "" && (msg.Extra == nil || len(msg.Extra["file"]) == 0) {
|
if msg.Text == "" {
|
||||||
b.Log.Debugf("Skipping empty message %#v", msg)
|
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,15 +261,10 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
b.Log.Debugf("Processing webhook sending for message %#v", msg)
|
|
||||||
msg, err := b.webhookSend(&msg, wID, wToken)
|
msg, err := b.webhookSend(&msg, wID, wToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Log.Errorf("Could not broadcast via webook for message %#v: %s", msg, err)
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
if msg == nil {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
return msg.ID, nil
|
return msg.ID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,7 +307,7 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return res.ID, nil
|
return res.ID, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// useWebhook returns true if we have a webhook defined somewhere
|
// useWebhook returns true if we have a webhook defined somewhere
|
||||||
@@ -380,16 +376,10 @@ func (b *Bdiscord) handleUploadFile(msg *config.Message, channelID string) (stri
|
|||||||
// uploads (from slack, telegram or mattermost).
|
// uploads (from slack, telegram or mattermost).
|
||||||
// Returns messageID and error.
|
// Returns messageID and error.
|
||||||
func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*discordgo.Message, error) {
|
func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*discordgo.Message, error) {
|
||||||
var (
|
var err error
|
||||||
res *discordgo.Message
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
// WebhookParams can have either `Content` or `File`.
|
// WebhookParams can have either `Content` or `File`.
|
||||||
|
res, err := b.c.WebhookExecute(
|
||||||
// We can't send empty messages.
|
|
||||||
if msg.Text != "" {
|
|
||||||
res, err = b.c.WebhookExecute(
|
|
||||||
webhookID,
|
webhookID,
|
||||||
token,
|
token,
|
||||||
true,
|
true,
|
||||||
@@ -400,8 +390,7 @@ func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*d
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Log.Errorf("Could not send text (%s) for message %#v: %s", msg.Text, msg, err)
|
return nil, err
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg.Extra != nil {
|
if msg.Extra != nil {
|
||||||
@@ -412,7 +401,7 @@ func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*d
|
|||||||
ContentType: "",
|
ContentType: "",
|
||||||
Reader: bytes.NewReader(*fi.Data),
|
Reader: bytes.NewReader(*fi.Data),
|
||||||
}
|
}
|
||||||
_, e2 := b.c.WebhookExecute(
|
_, err := b.c.WebhookExecute(
|
||||||
webhookID,
|
webhookID,
|
||||||
token,
|
token,
|
||||||
false,
|
false,
|
||||||
@@ -422,10 +411,11 @@ func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*d
|
|||||||
File: &file,
|
File: &file,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if e2 != nil {
|
if err != nil {
|
||||||
b.Log.Errorf("Could not send file %#v for message %#v: %s", file, msg, e2)
|
return nil, fmt.Errorf("file upload failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res, err
|
|
||||||
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,19 +37,6 @@ func (b *Bdiscord) messageDeleteBulk(s *discordgo.Session, m *discordgo.MessageD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bdiscord) messageTyping(s *discordgo.Session, m *discordgo.TypingStart) {
|
|
||||||
if !b.GetBool("ShowUserTyping") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
rmsg := config.Message{Account: b.Account, Event: config.EventUserTyping}
|
|
||||||
rmsg.Channel = b.getChannelName(m.ChannelID)
|
|
||||||
if b.useChannelID {
|
|
||||||
rmsg.Channel = "ID:" + m.ChannelID
|
|
||||||
}
|
|
||||||
b.Remote <- rmsg
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { //nolint:unparam
|
func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { //nolint:unparam
|
||||||
if b.GetBool("EditDisable") {
|
if b.GetBool("EditDisable") {
|
||||||
return
|
return
|
||||||
@@ -58,10 +45,7 @@ func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdat
|
|||||||
if m.Message.EditedTimestamp != "" {
|
if m.Message.EditedTimestamp != "" {
|
||||||
b.Log.Debugf("Sending edit message")
|
b.Log.Debugf("Sending edit message")
|
||||||
m.Content += b.GetString("EditSuffix")
|
m.Content += b.GetString("EditSuffix")
|
||||||
msg := &discordgo.MessageCreate{
|
b.messageCreate(s, (*discordgo.MessageCreate)(m))
|
||||||
Message: m.Message,
|
|
||||||
}
|
|
||||||
b.messageCreate(s, msg)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +89,7 @@ func (b *Bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat
|
|||||||
|
|
||||||
// set username
|
// set username
|
||||||
if !b.GetBool("UseUserName") {
|
if !b.GetBool("UseUserName") {
|
||||||
rmsg.Username = b.getNick(m.Author, m.GuildID)
|
rmsg.Username = b.getNick(m.Author)
|
||||||
} else {
|
} else {
|
||||||
rmsg.Username = m.Author.Username
|
rmsg.Username = m.Author.Username
|
||||||
if b.GetBool("UseDiscriminator") {
|
if b.GetBool("UseDiscriminator") {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (b *Bdiscord) getNick(user *discordgo.User, guildID string) string {
|
func (b *Bdiscord) getNick(user *discordgo.User) string {
|
||||||
b.membersMutex.RLock()
|
b.membersMutex.RLock()
|
||||||
defer b.membersMutex.RUnlock()
|
defer b.membersMutex.RUnlock()
|
||||||
|
|
||||||
@@ -23,9 +23,9 @@ func (b *Bdiscord) getNick(user *discordgo.User, guildID string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we didn't find nick, search for it.
|
// If we didn't find nick, search for it.
|
||||||
member, err := b.c.GuildMember(guildID, user.ID)
|
member, err := b.c.GuildMember(b.guildID, user.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Log.Warnf("Failed to fetch information for member %#v on guild %#v: %s", user, guildID, err)
|
b.Log.Warnf("Failed to fetch information for member %#v: %s", user, err)
|
||||||
return user.Username
|
return user.Username
|
||||||
} else if member == nil {
|
} else if member == nil {
|
||||||
b.Log.Warnf("Got no information for member %#v", user)
|
b.Log.Warnf("Got no information for member %#v", user)
|
||||||
|
|||||||
@@ -14,9 +14,8 @@ import (
|
|||||||
"golang.org/x/image/webp"
|
"golang.org/x/image/webp"
|
||||||
|
|
||||||
"github.com/42wim/matterbridge/bridge/config"
|
"github.com/42wim/matterbridge/bridge/config"
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
"github.com/gomarkdown/markdown/parser"
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"gitlab.com/golang-commonmark/markdown"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DownloadFile downloads the given non-authenticated URL.
|
// DownloadFile downloads the given non-authenticated URL.
|
||||||
@@ -177,12 +176,9 @@ func ClipMessage(text string, length int) string {
|
|||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseMarkdown takes in an input string as markdown and parses it to html
|
|
||||||
func ParseMarkdown(input string) string {
|
func ParseMarkdown(input string) string {
|
||||||
extensions := parser.HardLineBreak
|
md := markdown.New(markdown.XHTMLOutput(true), markdown.Breaks(true))
|
||||||
markdownParser := parser.NewWithExtensions(extensions)
|
res := md.RenderToString([]byte(input))
|
||||||
parsedMarkdown := markdown.ToHTML([]byte(input), markdownParser, nil)
|
|
||||||
res := string(parsedMarkdown)
|
|
||||||
res = strings.TrimPrefix(res, "<p>")
|
res = strings.TrimPrefix(res, "<p>")
|
||||||
res = strings.TrimSuffix(res, "</p>\n")
|
res = strings.TrimSuffix(res, "</p>\n")
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
package bkeybase
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/42wim/matterbridge/bridge/config"
|
|
||||||
"github.com/keybase/go-keybase-chat-bot/kbchat"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (b *Bkeybase) handleKeybase() {
|
|
||||||
sub, err := b.kbc.ListenForNewTextMessages()
|
|
||||||
if err != nil {
|
|
||||||
b.Log.Errorf("Error listening: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
msg, err := sub.Read()
|
|
||||||
if err != nil {
|
|
||||||
b.Log.Errorf("failed to read message: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
if msg.Message.Content.Type != "text" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if msg.Message.Sender.Username == b.kbc.GetUsername() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
b.handleMessage(msg.Message)
|
|
||||||
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Bkeybase) handleMessage(msg kbchat.Message) {
|
|
||||||
b.Log.Debugf("== Receiving event: %#v", msg)
|
|
||||||
if msg.Channel.TopicName != b.channel || msg.Channel.Name != b.team {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if msg.Sender.Username != b.kbc.GetUsername() {
|
|
||||||
|
|
||||||
// TODO download avatar
|
|
||||||
|
|
||||||
// Create our message
|
|
||||||
rmsg := config.Message{Username: msg.Sender.Username, Text: msg.Content.Text.Body, UserID: msg.Sender.Uid, Channel: msg.Channel.TopicName, ID: strconv.Itoa(msg.MsgID), Account: b.Account}
|
|
||||||
|
|
||||||
// Text must be a string
|
|
||||||
if msg.Content.Type != "text" {
|
|
||||||
b.Log.Errorf("message is not text")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
b.Log.Debugf("<= Sending message from %s on %s to gateway", msg.Sender.Username, msg.Channel.Name)
|
|
||||||
b.Remote <- rmsg
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
package bkeybase
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/42wim/matterbridge/bridge"
|
|
||||||
"github.com/42wim/matterbridge/bridge/config"
|
|
||||||
"github.com/keybase/go-keybase-chat-bot/kbchat"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Bkeybase bridge structure
|
|
||||||
type Bkeybase struct {
|
|
||||||
kbc *kbchat.API
|
|
||||||
user string
|
|
||||||
channel string
|
|
||||||
team string
|
|
||||||
*bridge.Config
|
|
||||||
}
|
|
||||||
|
|
||||||
// New initializes Bkeybase object and sets team
|
|
||||||
func New(cfg *bridge.Config) bridge.Bridger {
|
|
||||||
b := &Bkeybase{Config: cfg}
|
|
||||||
b.team = b.Config.GetString("Team")
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connect starts keybase API and listener loop
|
|
||||||
func (b *Bkeybase) Connect() error {
|
|
||||||
var err error
|
|
||||||
b.Log.Infof("Connecting %s", b.GetString("Team"))
|
|
||||||
|
|
||||||
// use default keybase location (`keybase`)
|
|
||||||
b.kbc, err = kbchat.Start(kbchat.RunOptions{})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
b.user = b.kbc.GetUsername()
|
|
||||||
b.Log.Info("Connection succeeded")
|
|
||||||
go b.handleKeybase()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disconnect doesn't do anything for now
|
|
||||||
func (b *Bkeybase) Disconnect() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// JoinChannel sets channel name in struct
|
|
||||||
func (b *Bkeybase) JoinChannel(channel config.ChannelInfo) error {
|
|
||||||
if _, err := b.kbc.JoinChannel(b.team, channel.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
b.channel = channel.Name
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send receives bridge messages and sends them to Keybase chat room
|
|
||||||
func (b *Bkeybase) Send(msg config.Message) (string, error) {
|
|
||||||
b.Log.Debugf("=> Receiving %#v", msg)
|
|
||||||
|
|
||||||
// Handle /me events
|
|
||||||
if msg.Event == config.EventUserAction {
|
|
||||||
msg.Text = "_" + msg.Text + "_"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete message if we have an ID
|
|
||||||
// Delete message not supported by keybase go library yet
|
|
||||||
|
|
||||||
// Edit message if we have an ID
|
|
||||||
// kbchat lib does not support message editing yet
|
|
||||||
|
|
||||||
if len(msg.Extra["file"]) > 0 {
|
|
||||||
// Upload a file
|
|
||||||
dir, err := ioutil.TempDir("", "matterbridge")
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
for _, f := range msg.Extra["file"] {
|
|
||||||
fname := f.(config.FileInfo).Name
|
|
||||||
fdata := *f.(config.FileInfo).Data
|
|
||||||
fcaption := f.(config.FileInfo).Comment
|
|
||||||
fpath := filepath.Join(dir, fname)
|
|
||||||
|
|
||||||
if err = ioutil.WriteFile(fpath, fdata, 0600); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, _ = b.kbc.SendAttachmentByTeam(b.team, fpath, fcaption, &b.channel)
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send regular message
|
|
||||||
resp, err := b.kbc.SendMessageByTeamName(b.team, msg.Username+msg.Text, &b.channel)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return strconv.Itoa(resp.Result.MsgID), err
|
|
||||||
}
|
|
||||||
@@ -291,8 +291,7 @@ func (b *Bmatrix) handleUploadFile(msg *config.Message, channel string, fi *conf
|
|||||||
content := bytes.NewReader(*fi.Data)
|
content := bytes.NewReader(*fi.Data)
|
||||||
sp := strings.Split(fi.Name, ".")
|
sp := strings.Split(fi.Name, ".")
|
||||||
mtype := mime.TypeByExtension("." + sp[len(sp)-1])
|
mtype := mime.TypeByExtension("." + sp[len(sp)-1])
|
||||||
if !(strings.Contains(mtype, "image") || strings.Contains(mtype, "video") ||
|
if !strings.Contains(mtype, "image") && !strings.Contains(mtype, "video") {
|
||||||
strings.Contains(mtype, "application") || strings.Contains(mtype, "audio")) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if fi.Comment != "" {
|
if fi.Comment != "" {
|
||||||
@@ -327,18 +326,6 @@ func (b *Bmatrix) handleUploadFile(msg *config.Message, channel string, fi *conf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
b.Log.Errorf("sendImage failed: %#v", err)
|
b.Log.Errorf("sendImage failed: %#v", err)
|
||||||
}
|
}
|
||||||
case strings.Contains(mtype, "application"):
|
|
||||||
b.Log.Debugf("sendFile %s", res.ContentURI)
|
|
||||||
_, err = b.mc.SendFile(channel, fi.Name, res.ContentURI, mtype, uint(len(*fi.Data)))
|
|
||||||
if err != nil {
|
|
||||||
b.Log.Errorf("sendFile failed: %#v", err)
|
|
||||||
}
|
|
||||||
case strings.Contains(mtype, "audio"):
|
|
||||||
b.Log.Debugf("sendAudio %s", res.ContentURI)
|
|
||||||
_, err = b.mc.SendAudio(channel, fi.Name, res.ContentURI, mtype, uint(len(*fi.Data)))
|
|
||||||
if err != nil {
|
|
||||||
b.Log.Errorf("sendAudio failed: %#v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
b.Log.Debugf("result: %#v", res)
|
b.Log.Debugf("result: %#v", res)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,10 +66,6 @@ func (b *Bmattermost) handleMatter() {
|
|||||||
} else {
|
} else {
|
||||||
b.Log.Debugf("Choosing login/password based receiving")
|
b.Log.Debugf("Choosing login/password based receiving")
|
||||||
}
|
}
|
||||||
// if for some reason we only want to sent stuff to mattermost but not receive, return
|
|
||||||
if b.GetString("WebhookBindAddress") == "" && b.GetString("WebhookURL") != "" && b.GetString("Token") == "" && b.GetString("Login") == "" {
|
|
||||||
b.Log.Debugf("No WebhookBindAddress specified, only WebhookURL. You will not receive messages from mattermost, only sending is possible.")
|
|
||||||
}
|
|
||||||
go b.handleMatterClient(messages)
|
go b.handleMatterClient(messages)
|
||||||
}
|
}
|
||||||
var ok bool
|
var ok bool
|
||||||
|
|||||||
@@ -58,9 +58,6 @@ func (b *Brocketchat) doConnectWebhookURL() error {
|
|||||||
func (b *Brocketchat) apiLogin() error {
|
func (b *Brocketchat) apiLogin() error {
|
||||||
b.Log.Debugf("handling apiLogin()")
|
b.Log.Debugf("handling apiLogin()")
|
||||||
credentials := &models.UserCredentials{Email: b.GetString("login"), Password: b.GetString("password")}
|
credentials := &models.UserCredentials{Email: b.GetString("login"), Password: b.GetString("password")}
|
||||||
if b.GetString("Token") != "" {
|
|
||||||
credentials = &models.UserCredentials{ID: b.GetString("Login"), Token: b.GetString("Token")}
|
|
||||||
}
|
|
||||||
myURL, err := url.Parse(b.GetString("server"))
|
myURL, err := url.Parse(b.GetString("server"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ func (b *Bslack) handleSlack() {
|
|||||||
message.Text = b.replaceVariable(message.Text)
|
message.Text = b.replaceVariable(message.Text)
|
||||||
message.Text = b.replaceChannel(message.Text)
|
message.Text = b.replaceChannel(message.Text)
|
||||||
message.Text = b.replaceURL(message.Text)
|
message.Text = b.replaceURL(message.Text)
|
||||||
message.Text = b.replaceb0rkedMarkDown(message.Text)
|
|
||||||
message.Text = html.UnescapeString(message.Text)
|
message.Text = html.UnescapeString(message.Text)
|
||||||
|
|
||||||
// Add the avatar
|
// Add the avatar
|
||||||
@@ -44,7 +43,7 @@ func (b *Bslack) handleSlack() {
|
|||||||
|
|
||||||
func (b *Bslack) handleSlackClient(messages chan *config.Message) {
|
func (b *Bslack) handleSlackClient(messages chan *config.Message) {
|
||||||
for msg := range b.rtm.IncomingEvents {
|
for msg := range b.rtm.IncomingEvents {
|
||||||
if msg.Type != sUserTyping && msg.Type != sHello && msg.Type != sLatencyReport {
|
if msg.Type != sUserTyping && msg.Type != sLatencyReport {
|
||||||
b.Log.Debugf("== Receiving event %#v", msg.Data)
|
b.Log.Debugf("== Receiving event %#v", msg.Data)
|
||||||
}
|
}
|
||||||
switch ev := msg.Data.(type) {
|
switch ev := msg.Data.(type) {
|
||||||
@@ -87,7 +86,7 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) {
|
|||||||
b.Log.Errorf("Connection failed %#v %#v", ev.Error(), ev.ErrorObj)
|
b.Log.Errorf("Connection failed %#v %#v", ev.Error(), ev.ErrorObj)
|
||||||
case *slack.MemberJoinedChannelEvent:
|
case *slack.MemberJoinedChannelEvent:
|
||||||
b.users.populateUser(ev.User)
|
b.users.populateUser(ev.User)
|
||||||
case *slack.HelloEvent, *slack.LatencyReport:
|
case *slack.LatencyReport:
|
||||||
continue
|
continue
|
||||||
default:
|
default:
|
||||||
b.Log.Debugf("Unhandled incoming event: %T", ev)
|
b.Log.Debugf("Unhandled incoming event: %T", ev)
|
||||||
|
|||||||
@@ -188,36 +188,6 @@ func (b *Bslack) replaceURL(text string) string {
|
|||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bslack) replaceb0rkedMarkDown(text string) string {
|
|
||||||
// taken from https://github.com/mattermost/mattermost-server/blob/master/app/slackimport.go
|
|
||||||
//
|
|
||||||
regexReplaceAllString := []struct {
|
|
||||||
regex *regexp.Regexp
|
|
||||||
rpl string
|
|
||||||
}{
|
|
||||||
// bold
|
|
||||||
{
|
|
||||||
regexp.MustCompile(`(^|[\s.;,])\*(\S[^*\n]+)\*`),
|
|
||||||
"$1**$2**",
|
|
||||||
},
|
|
||||||
// strikethrough
|
|
||||||
{
|
|
||||||
regexp.MustCompile(`(^|[\s.;,])\~(\S[^~\n]+)\~`),
|
|
||||||
"$1~~$2~~",
|
|
||||||
},
|
|
||||||
// single paragraph blockquote
|
|
||||||
// Slack converts > character to >
|
|
||||||
{
|
|
||||||
regexp.MustCompile(`(?sm)^>`),
|
|
||||||
">",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
for _, rule := range regexReplaceAllString {
|
|
||||||
text = rule.regex.ReplaceAllString(text, rule.rpl)
|
|
||||||
}
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Bslack) replaceCodeFence(text string) string {
|
func (b *Bslack) replaceCodeFence(text string) string {
|
||||||
return codeFenceRE.ReplaceAllString(text, "```")
|
return codeFenceRE.ReplaceAllString(text, "```")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"github.com/42wim/matterbridge/bridge/config"
|
"github.com/42wim/matterbridge/bridge/config"
|
||||||
"github.com/42wim/matterbridge/bridge/helper"
|
"github.com/42wim/matterbridge/bridge/helper"
|
||||||
"github.com/42wim/matterbridge/matterhook"
|
"github.com/42wim/matterbridge/matterhook"
|
||||||
lru "github.com/hashicorp/golang-lru"
|
"github.com/hashicorp/golang-lru"
|
||||||
"github.com/nlopes/slack"
|
"github.com/nlopes/slack"
|
||||||
"github.com/rs/xid"
|
"github.com/rs/xid"
|
||||||
)
|
)
|
||||||
@@ -36,7 +36,6 @@ type Bslack struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
sHello = "hello"
|
|
||||||
sChannelJoin = "channel_join"
|
sChannelJoin = "channel_join"
|
||||||
sChannelLeave = "channel_leave"
|
sChannelLeave = "channel_leave"
|
||||||
sChannelJoined = "channel_joined"
|
sChannelJoined = "channel_joined"
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ func (b *Bsteam) handleEvents() {
|
|||||||
|
|
||||||
func (b *Bsteam) handleLogOnFailed(e *steam.LogOnFailedEvent, myLoginInfo *steam.LogOnDetails) error {
|
func (b *Bsteam) handleLogOnFailed(e *steam.LogOnFailedEvent, myLoginInfo *steam.LogOnDetails) error {
|
||||||
switch e.Result {
|
switch e.Result {
|
||||||
case steamlang.EResult_AccountLoginDeniedNeedTwoFactor:
|
case steamlang.EResult_AccountLogonDeniedNeedTwoFactorCode:
|
||||||
b.Log.Info("Steam guard isn't letting me in! Enter 2FA code:")
|
b.Log.Info("Steam guard isn't letting me in! Enter 2FA code:")
|
||||||
var code string
|
var code string
|
||||||
fmt.Scanf("%s", &code)
|
fmt.Scanf("%s", &code)
|
||||||
|
|||||||
@@ -107,9 +107,6 @@ func (b *Bxmpp) Send(msg config.Message) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bxmpp) createXMPP() error {
|
func (b *Bxmpp) createXMPP() error {
|
||||||
if !strings.Contains(b.GetString("Jid"), "@") {
|
|
||||||
return fmt.Errorf("the Jid %s doesn't contain an @", b.GetString("Jid"))
|
|
||||||
}
|
|
||||||
tc := &tls.Config{
|
tc := &tls.Config{
|
||||||
ServerName: strings.Split(b.GetString("Jid"), "@")[1],
|
ServerName: strings.Split(b.GetString("Jid"), "@")[1],
|
||||||
InsecureSkipVerify: b.GetBool("SkipTLSVerify"), // nolint: gosec
|
InsecureSkipVerify: b.GetBool("SkipTLSVerify"), // nolint: gosec
|
||||||
|
|||||||
97
changelog.md
97
changelog.md
@@ -1,87 +1,12 @@
|
|||||||
# v1.16.3
|
# dev
|
||||||
|
|
||||||
## Bugfix
|
|
||||||
|
|
||||||
- slack: Fix issues with ratelimiting #959
|
|
||||||
- mattermost: Fix bug when using webhookURL and login/token together #960
|
|
||||||
|
|
||||||
# v1.16.2
|
|
||||||
|
|
||||||
## New features
|
|
||||||
|
|
||||||
- keybase: Add support for receiving attachments (keybase) (#923)
|
|
||||||
|
|
||||||
## Enhancements
|
|
||||||
|
|
||||||
- general: Switch to new emoji library kyokomi/emoji (#948)
|
|
||||||
- general: Update markdown parsing library to github.com/gomarkdown/markdown (#944)
|
|
||||||
- ssh-chat: Update shazow/ssh-chat dependency (#947)
|
|
||||||
|
|
||||||
## Bugfix
|
|
||||||
|
|
||||||
- slack: Fix issues with the slack block kit API #937 (#943).
|
|
||||||
|
|
||||||
This release couldn't exist without the following contributors:
|
|
||||||
@42wim, @bmpickford, @goncalor
|
|
||||||
|
|
||||||
# v1.16.1
|
|
||||||
|
|
||||||
## New features
|
|
||||||
|
|
||||||
* rocketchat: add token support #892
|
|
||||||
* matrix: Add support for uploading application/x and audio/x (matrix). #929
|
|
||||||
|
|
||||||
## Enhancements
|
|
||||||
|
|
||||||
* general: Do configuration validation on start-up. Fixes #888
|
|
||||||
* general: updated vendored libraries (discord/whatsapp) #932
|
|
||||||
* discord: user typing messages #914
|
|
||||||
* slack: Convert slack bold/strike to correct markdown (slack). Fixes #918
|
|
||||||
|
|
||||||
## Bugfix
|
|
||||||
|
|
||||||
* discord: fix Failed to fetch information for members message. #894
|
|
||||||
* discord: remove obsolete file upload links (discord). #931
|
|
||||||
* slack: suppress unhandled HelloEvent message #913
|
|
||||||
* mattermost: Fix panic on WebhookURL only setting (mattermost). #917
|
|
||||||
* matrix: fix corrupted links between slack and matrix #924
|
|
||||||
|
|
||||||
This release couldn't exist without the following contributors:
|
|
||||||
@qaisjp, @hramrach, @42wim
|
|
||||||
|
|
||||||
# v1.16.0
|
|
||||||
|
|
||||||
## New features
|
|
||||||
|
|
||||||
* keybase: new protocol added. Add initial Keybase Chat support #877 Thanks to @hyperobject
|
|
||||||
* discord: Support webhook files in discord #872
|
|
||||||
|
|
||||||
## Enhancements
|
|
||||||
|
|
||||||
* general: update dependencies
|
|
||||||
|
|
||||||
## Bugfix
|
|
||||||
|
|
||||||
* discord: Underscores from Discord don't arrive correctly #864
|
|
||||||
* xmpp: Fix possible panic at startup of the XMPP bridge #869
|
|
||||||
* mattermost: Make getChannelIdTeam behave like GetChannelId for groups (mattermost) #873
|
|
||||||
|
|
||||||
This release couldn't exist without the following contributors:
|
|
||||||
@hyperobject, @42wim, @bucko909, @MOZGIII
|
|
||||||
|
|
||||||
# v1.15.1
|
# v1.15.1
|
||||||
|
|
||||||
## New features
|
|
||||||
* discord: Support webhook message deletions (discord) (#853)
|
|
||||||
|
|
||||||
## Enhancements
|
## Enhancements
|
||||||
|
|
||||||
* discord: Support bulk deletions #851
|
* discord: Support bulk deletions #851
|
||||||
* discord: Support channels in categories #863 (use category/channel. See matterbridge.toml.sample for more info)
|
* discord: Support channels in categories #863 (use category/channel. See matterbridge.toml.sample for more info)
|
||||||
* mattermost: Add an option to skip the Mattermost server version check #849
|
* mattermost: Add an option to skip the Mattermost server version check #849
|
||||||
|
|
||||||
## Bugfix
|
## Bugfix
|
||||||
|
|
||||||
* xmpp: fix segfault when disconnected/reconnected #856
|
* xmpp: fix segfault when disconnected/reconnected #856
|
||||||
* telegram: fix panic in handleEntities #858
|
* telegram: fix panic in handleEntities #858
|
||||||
|
|
||||||
@@ -95,21 +20,21 @@ This release couldn't exist without the following contributors:
|
|||||||
https://github.com/42wim/matterbridge/wiki/Settings#outmessage for more information
|
https://github.com/42wim/matterbridge/wiki/Settings#outmessage for more information
|
||||||
* Add tengo support to RemoteNickFormat (#793)
|
* Add tengo support to RemoteNickFormat (#793)
|
||||||
See https://github.com/42wim/matterbridge/wiki/Settings#remotenickformat-2
|
See https://github.com/42wim/matterbridge/wiki/Settings#remotenickformat-2
|
||||||
* Deprecated `Message` under `[tengo]` to `InMessage`
|
* Deprecated `Message` under `[tengo]` to `InMessage`
|
||||||
|
|
||||||
## Enhancements
|
## Enhancements
|
||||||
* general: Forward only user-typing messages if supported by protocol (#832)
|
* general: Forward only user-typing messages if supported by protocol (#832)
|
||||||
* general: updated wiki with all possible settings: https://github.com/42wim/matterbridge/wiki/Settings
|
* general: updated wiki with all possible settings: https://github.com/42wim/matterbridge/wiki/Settings
|
||||||
* tengo: Add msg event to tengo
|
* tengo: Add msg event to tengo
|
||||||
* xmpp: Verify TLS against JID domain, not the host. (xmpp) (#834)
|
* xmpp: Verify TLS against JID domain, not the host. (xmpp) (#834)
|
||||||
* xmpp: Allow messages with timestamp (xmpp). Fixes #835 (#847)
|
* xmpp: Allow messages with timestamp (xmpp). Fixes #835 (#847)
|
||||||
* irc: Add verbose IRC joins/parts (ident@host) (#805)
|
* irc: Add verbose IRC joins/parts (ident@host) (#805)
|
||||||
See https://github.com/42wim/matterbridge/wiki/Settings#verbosejoinpart
|
See https://github.com/42wim/matterbridge/wiki/Settings#verbosejoinpart
|
||||||
* rocketchat: Add useraction support (rocketchat). Closes #772 (#794)
|
* rocketchat: Add useraction support (rocketchat). Closes #772 (#794)
|
||||||
|
|
||||||
## Bugfix
|
## Bugfix
|
||||||
* slack: Fix regression in autojoining with legacy tokens (slack). Fixes #651 (#848)
|
* slack: Fix regression in autojoining with legacy tokens (slack). Fixes #651 (#848)
|
||||||
* xmpp: Revert xmpp to orig behaviour. Closes #844
|
* xmpp: Revert xmpp to orig behaviour. Closes #844
|
||||||
* whatsapp: Update github.com/Rhymen/go-whatsapp vendor. Fixes #843
|
* whatsapp: Update github.com/Rhymen/go-whatsapp vendor. Fixes #843
|
||||||
* mattermost: Update channels of all teams (mattermost)
|
* mattermost: Update channels of all teams (mattermost)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -u -e -x -o pipefail
|
set -u -e -x -o pipefail
|
||||||
|
|
||||||
go version | grep go1.13 || exit
|
go version | grep go1.12 || exit
|
||||||
|
|
||||||
VERSION=$(git describe --tags)
|
VERSION=$(git describe --tags)
|
||||||
mkdir ci/binaries
|
mkdir ci/binaries
|
||||||
|
|||||||
12
ci/lint.sh
12
ci/lint.sh
@@ -9,9 +9,9 @@ fi
|
|||||||
# Run the linter.
|
# Run the linter.
|
||||||
golangci-lint run
|
golangci-lint run
|
||||||
|
|
||||||
# if [[ "${GO111MODULE-off}" == "on" ]]; then
|
if [[ "${GO111MODULE-off}" == "on" ]]; then
|
||||||
# # If Go modules are active then check that dependencies are correctly maintained.
|
# If Go modules are active then check that dependencies are correctly maintained.
|
||||||
# go mod tidy
|
go mod tidy
|
||||||
# go mod vendor
|
go mod vendor
|
||||||
# git diff --exit-code --quiet || (echo "Please run 'go mod tidy' to clean up the 'go.mod' and 'go.sum' files."; false)
|
git diff --exit-code --quiet || (echo "Please run 'go mod tidy' to clean up the 'go.mod' and 'go.sum' files."; false)
|
||||||
# fi
|
fi
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
// See https://github.com/42wim/matterbridge/issues/881
|
|
||||||
// Generates a colored nick for each msgUsername, with example to filter specific codes
|
|
||||||
|
|
||||||
text := import("text")
|
|
||||||
fmt := import("fmt")
|
|
||||||
if outProtocol == "irc" {
|
|
||||||
// generate a color for a nick, make sure it isn't 0 or 15
|
|
||||||
colorCode := len(msgUsername)+bytes(msgUsername)[0]%14 + 2
|
|
||||||
// example if we want to use colorCode 3 when we have calculated colorcode 14
|
|
||||||
if colorCode == 14 {
|
|
||||||
colorCode = 3
|
|
||||||
}
|
|
||||||
msgUsername=fmt.sprintf("\x03%02d%s\x0F", colorCode, msgUsername)
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
bdiscord "github.com/42wim/matterbridge/bridge/discord"
|
bdiscord "github.com/42wim/matterbridge/bridge/discord"
|
||||||
bgitter "github.com/42wim/matterbridge/bridge/gitter"
|
bgitter "github.com/42wim/matterbridge/bridge/gitter"
|
||||||
birc "github.com/42wim/matterbridge/bridge/irc"
|
birc "github.com/42wim/matterbridge/bridge/irc"
|
||||||
bkeybase "github.com/42wim/matterbridge/bridge/keybase"
|
|
||||||
bmatrix "github.com/42wim/matterbridge/bridge/matrix"
|
bmatrix "github.com/42wim/matterbridge/bridge/matrix"
|
||||||
bmattermost "github.com/42wim/matterbridge/bridge/mattermost"
|
bmattermost "github.com/42wim/matterbridge/bridge/mattermost"
|
||||||
brocketchat "github.com/42wim/matterbridge/bridge/rocketchat"
|
brocketchat "github.com/42wim/matterbridge/bridge/rocketchat"
|
||||||
@@ -36,11 +35,9 @@ var (
|
|||||||
"whatsapp": bwhatsapp.New,
|
"whatsapp": bwhatsapp.New,
|
||||||
"xmpp": bxmpp.New,
|
"xmpp": bxmpp.New,
|
||||||
"zulip": bzulip.New,
|
"zulip": bzulip.New,
|
||||||
"keybase": bkeybase.New,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UserTypingSupport = map[string]struct{}{
|
UserTypingSupport = map[string]struct{}{
|
||||||
"slack": {},
|
"slack": {},
|
||||||
"discord": {},
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/d5/tengo/script"
|
"github.com/d5/tengo/script"
|
||||||
"github.com/d5/tengo/stdlib"
|
"github.com/d5/tengo/stdlib"
|
||||||
lru "github.com/hashicorp/golang-lru"
|
lru "github.com/hashicorp/golang-lru"
|
||||||
"github.com/matterbridge/emoji"
|
"github.com/peterhellberg/emojilib"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -85,7 +85,6 @@ func (gw *Gateway) FindCanonicalMsgID(protocol string, mID string) string {
|
|||||||
func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
|
func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
|
||||||
br := gw.Router.getBridge(cfg.Account)
|
br := gw.Router.getBridge(cfg.Account)
|
||||||
if br == nil {
|
if br == nil {
|
||||||
gw.checkConfig(cfg)
|
|
||||||
br = bridge.New(cfg)
|
br = bridge.New(cfg)
|
||||||
br.Config = gw.Router.Config
|
br.Config = gw.Router.Config
|
||||||
br.General = &gw.BridgeValues().General
|
br.General = &gw.BridgeValues().General
|
||||||
@@ -105,19 +104,6 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gw *Gateway) checkConfig(cfg *config.Bridge) {
|
|
||||||
match := false
|
|
||||||
for _, key := range gw.Router.Config.Viper().AllKeys() {
|
|
||||||
if strings.HasPrefix(key, cfg.Account) {
|
|
||||||
match = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !match {
|
|
||||||
gw.logger.Fatalf("Account %s defined in gateway %s but no configuration found, exiting.", cfg.Account, gw.Name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddConfig associates a new configuration with the gateway object.
|
// AddConfig associates a new configuration with the gateway object.
|
||||||
func (gw *Gateway) AddConfig(cfg *config.Gateway) error {
|
func (gw *Gateway) AddConfig(cfg *config.Gateway) error {
|
||||||
gw.Name = cfg.Name
|
gw.Name = cfg.Name
|
||||||
@@ -372,7 +358,7 @@ func (gw *Gateway) modifyMessage(msg *config.Message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// replace :emoji: to unicode
|
// replace :emoji: to unicode
|
||||||
msg.Text = emoji.Sprint(msg.Text)
|
msg.Text = emojilib.Replace(msg.Text)
|
||||||
|
|
||||||
br := gw.Bridges[msg.Account]
|
br := gw.Bridges[msg.Account]
|
||||||
// loop to replace messages
|
// loop to replace messages
|
||||||
|
|||||||
@@ -15,15 +15,10 @@ import (
|
|||||||
|
|
||||||
var testconfig = []byte(`
|
var testconfig = []byte(`
|
||||||
[irc.freenode]
|
[irc.freenode]
|
||||||
server=""
|
|
||||||
[mattermost.test]
|
[mattermost.test]
|
||||||
server=""
|
|
||||||
[gitter.42wim]
|
[gitter.42wim]
|
||||||
server=""
|
|
||||||
[discord.test]
|
[discord.test]
|
||||||
server=""
|
|
||||||
[slack.test]
|
[slack.test]
|
||||||
server=""
|
|
||||||
|
|
||||||
[[gateway]]
|
[[gateway]]
|
||||||
name = "bridge1"
|
name = "bridge1"
|
||||||
@@ -49,15 +44,10 @@ server=""
|
|||||||
|
|
||||||
var testconfig2 = []byte(`
|
var testconfig2 = []byte(`
|
||||||
[irc.freenode]
|
[irc.freenode]
|
||||||
server=""
|
|
||||||
[mattermost.test]
|
[mattermost.test]
|
||||||
server=""
|
|
||||||
[gitter.42wim]
|
[gitter.42wim]
|
||||||
server=""
|
|
||||||
[discord.test]
|
[discord.test]
|
||||||
server=""
|
|
||||||
[slack.test]
|
[slack.test]
|
||||||
server=""
|
|
||||||
|
|
||||||
[[gateway]]
|
[[gateway]]
|
||||||
name = "bridge1"
|
name = "bridge1"
|
||||||
@@ -97,11 +87,8 @@ server=""
|
|||||||
|
|
||||||
var testconfig3 = []byte(`
|
var testconfig3 = []byte(`
|
||||||
[irc.zzz]
|
[irc.zzz]
|
||||||
server=""
|
|
||||||
[telegram.zzz]
|
[telegram.zzz]
|
||||||
server=""
|
|
||||||
[slack.zzz]
|
[slack.zzz]
|
||||||
server=""
|
|
||||||
[[gateway]]
|
[[gateway]]
|
||||||
name="bridge"
|
name="bridge"
|
||||||
enable=true
|
enable=true
|
||||||
@@ -189,6 +176,7 @@ func TestNewRouter(t *testing.T) {
|
|||||||
assert.Equal(t, 1, len(r.Gateways))
|
assert.Equal(t, 1, len(r.Gateways))
|
||||||
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
|
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
|
||||||
assert.Equal(t, 4, len(r.Gateways["bridge1"].Channels))
|
assert.Equal(t, 4, len(r.Gateways["bridge1"].Channels))
|
||||||
|
|
||||||
r = maketestRouter(testconfig2)
|
r = maketestRouter(testconfig2)
|
||||||
assert.Equal(t, 2, len(r.Gateways))
|
assert.Equal(t, 2, len(r.Gateways))
|
||||||
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
|
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
|
||||||
|
|||||||
@@ -59,14 +59,8 @@ func NewRouter(rootLogger *logrus.Logger, cfg config.Config, bridgeMap map[strin
|
|||||||
// between them.
|
// between them.
|
||||||
func (r *Router) Start() error {
|
func (r *Router) Start() error {
|
||||||
m := make(map[string]*bridge.Bridge)
|
m := make(map[string]*bridge.Bridge)
|
||||||
if len(r.Gateways) == 0 {
|
|
||||||
return fmt.Errorf("no [[gateway]] configured. See https://github.com/42wim/matterbridge/wiki/How-to-create-your-config for more info")
|
|
||||||
}
|
|
||||||
for _, gw := range r.Gateways {
|
for _, gw := range r.Gateways {
|
||||||
r.logger.Infof("Parsing gateway %s", gw.Name)
|
r.logger.Infof("Parsing gateway %s", gw.Name)
|
||||||
if len(gw.Bridges) == 0 {
|
|
||||||
return fmt.Errorf("no bridges configured for gateway %s. See https://github.com/42wim/matterbridge/wiki/How-to-create-your-config for more info", gw.Name)
|
|
||||||
}
|
|
||||||
for _, br := range gw.Bridges {
|
for _, br := range gw.Bridges {
|
||||||
m[br.Account] = br
|
m[br.Account] = br
|
||||||
}
|
}
|
||||||
|
|||||||
46
go.mod
46
go.mod
@@ -4,31 +4,30 @@ require (
|
|||||||
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557
|
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557
|
||||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f
|
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f
|
||||||
github.com/Jeffail/gabs v1.1.1 // indirect
|
github.com/Jeffail/gabs v1.1.1 // indirect
|
||||||
github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0
|
github.com/Philipp15b/go-steam v1.0.1-0.20180818081528-681bd9573329
|
||||||
github.com/Rhymen/go-whatsapp v0.0.3-0.20191003184814-fc3f792c814c
|
github.com/Rhymen/go-whatsapp v0.0.2
|
||||||
github.com/bwmarrin/discordgo v0.19.0
|
github.com/bwmarrin/discordgo v0.19.0
|
||||||
// github.com/bwmarrin/discordgo v0.19.0
|
// github.com/bwmarrin/discordgo v0.19.0
|
||||||
github.com/d5/tengo v1.24.8
|
github.com/d5/tengo v1.24.1
|
||||||
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec
|
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec
|
||||||
github.com/fsnotify/fsnotify v1.4.7
|
github.com/fsnotify/fsnotify v1.4.7
|
||||||
github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible
|
github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible
|
||||||
github.com/gomarkdown/markdown v0.0.0-20190912180731-281270bc6d83
|
|
||||||
github.com/google/gops v0.3.6
|
github.com/google/gops v0.3.6
|
||||||
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect
|
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f // indirect
|
||||||
github.com/gorilla/schema v1.1.0
|
github.com/gorilla/schema v1.1.0
|
||||||
github.com/gorilla/websocket v1.4.1
|
github.com/gorilla/websocket v1.4.0
|
||||||
github.com/hashicorp/golang-lru v0.5.3
|
github.com/hashicorp/golang-lru v0.5.1
|
||||||
github.com/hpcloud/tail v1.0.0 // indirect
|
github.com/hpcloud/tail v1.0.0 // indirect
|
||||||
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7
|
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7
|
||||||
github.com/jtolds/gls v4.2.1+incompatible // indirect
|
github.com/jtolds/gls v4.2.1+incompatible // indirect
|
||||||
github.com/keybase/go-keybase-chat-bot v0.0.0-20190816161829-561f10822eb2
|
github.com/labstack/echo/v4 v4.1.6
|
||||||
github.com/labstack/echo/v4 v4.1.10
|
github.com/lrstanley/girc v0.0.0-20190210212025-51b8e096d398
|
||||||
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7
|
github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5 // indirect
|
||||||
|
github.com/lusis/slack-test v0.0.0-20180109053238-3c758769bfa6 // indirect
|
||||||
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d
|
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d
|
||||||
github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible
|
|
||||||
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91
|
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91
|
||||||
github.com/matterbridge/gomatrix v0.0.0-20191026211822-6fc7accd00ca
|
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea
|
||||||
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18
|
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18
|
||||||
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
|
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
|
||||||
github.com/mattermost/mattermost-server v5.5.0+incompatible
|
github.com/mattermost/mattermost-server v5.5.0+incompatible
|
||||||
@@ -37,35 +36,34 @@ require (
|
|||||||
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
|
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
|
||||||
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9
|
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9
|
||||||
github.com/nicksnyder/go-i18n v1.4.0 // indirect
|
github.com/nicksnyder/go-i18n v1.4.0 // indirect
|
||||||
github.com/nlopes/slack v0.6.0
|
github.com/nlopes/slack v0.5.0
|
||||||
//github.com/nlopes/slack v0.6.0
|
|
||||||
github.com/onsi/ginkgo v1.6.0 // indirect
|
github.com/onsi/ginkgo v1.6.0 // indirect
|
||||||
github.com/onsi/gomega v1.4.1 // indirect
|
github.com/onsi/gomega v1.4.1 // indirect
|
||||||
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c
|
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c
|
||||||
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 // indirect
|
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 // indirect
|
||||||
|
github.com/peterhellberg/emojilib v0.0.0-20190124112554-c18758d55320
|
||||||
github.com/rs/xid v1.2.1
|
github.com/rs/xid v1.2.1
|
||||||
github.com/russross/blackfriday v1.5.2
|
github.com/russross/blackfriday v1.5.2
|
||||||
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
|
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
|
||||||
github.com/shazow/ssh-chat v1.8.2
|
github.com/shazow/ssh-chat v0.0.0-20190125184227-81d7e1686296
|
||||||
github.com/sirupsen/logrus v1.4.2
|
github.com/sirupsen/logrus v1.4.2
|
||||||
github.com/smartystreets/assertions v0.0.0-20180803164922-886ec427f6b9 // indirect
|
github.com/smartystreets/assertions v0.0.0-20180803164922-886ec427f6b9 // indirect
|
||||||
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
|
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
|
||||||
github.com/spf13/viper v1.4.0
|
github.com/spf13/viper v1.4.0
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.3.0
|
||||||
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
|
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
|
||||||
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
|
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
|
||||||
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2
|
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 // indirect
|
gitlab.com/golang-commonmark/html v0.0.0-20180917080848-cfaf75183c4a // indirect
|
||||||
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39
|
gitlab.com/golang-commonmark/linkify v0.0.0-20180917065525-c22b7bdb1179 // indirect
|
||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 // indirect
|
gitlab.com/golang-commonmark/markdown v0.0.0-20181102083822-772775880e1f
|
||||||
golang.org/x/text v0.3.2 // indirect
|
gitlab.com/golang-commonmark/mdurl v0.0.0-20180912090424-e5bce34c34f2 // indirect
|
||||||
|
gitlab.com/golang-commonmark/puny v0.0.0-20180912090636-2cd490539afe // indirect
|
||||||
|
gitlab.com/opennota/wd v0.0.0-20180912061657-c5d65f63c638 // indirect
|
||||||
|
golang.org/x/image v0.0.0-20190616094056-33659d3de4f5
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 // indirect
|
gopkg.in/fsnotify.v1 v1.4.7 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/nlopes/slack v0.6.0 => github.com/matterbridge/slack v0.1.1-0.20191208194820-95190f11bfb6
|
replace github.com/bwmarrin/discordgo v0.19.0 => github.com/MOZGIII/discordgo v0.19.1-0.20190812115637-1e74183814f9
|
||||||
|
|
||||||
replace github.com/bwmarrin/discordgo v0.19.0 => github.com/matterbridge/discordgo v0.0.0-20191026232317-01823f4ebba4
|
|
||||||
|
|
||||||
go 1.13
|
|
||||||
|
|||||||
111
go.sum
111
go.sum
@@ -7,21 +7,21 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ
|
|||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E=
|
github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E=
|
||||||
github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
|
github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
|
||||||
|
github.com/MOZGIII/discordgo v0.19.1-0.20190812115637-1e74183814f9 h1:2AlsZSdWfhhuyzNgRejZDkkLq1cAA2K8TaMoadSXeJE=
|
||||||
|
github.com/MOZGIII/discordgo v0.19.1-0.20190812115637-1e74183814f9/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0 h1:TO7d4rocnNFng6ZQrPe7U6WqHtK5eHEMrgrnnM/72IQ=
|
github.com/Philipp15b/go-steam v1.0.1-0.20180818081528-681bd9573329 h1:xZBoq249G9MSt+XuY7sVQzcfONJ6IQuwpCK+KAaOpnY=
|
||||||
github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0/go.mod h1:HuVM+sZFzumUdKPWiz+IlCMb4RdsKdT3T+nQBKL+sYg=
|
github.com/Philipp15b/go-steam v1.0.1-0.20180818081528-681bd9573329/go.mod h1:HuVM+sZFzumUdKPWiz+IlCMb4RdsKdT3T+nQBKL+sYg=
|
||||||
github.com/Rhymen/go-whatsapp v0.0.0/go.mod h1:rdQr95g2C1xcOfM7QGOhza58HeI3I+tZ/bbluv7VazA=
|
github.com/Rhymen/go-whatsapp v0.0.0/go.mod h1:rdQr95g2C1xcOfM7QGOhza58HeI3I+tZ/bbluv7VazA=
|
||||||
github.com/Rhymen/go-whatsapp v0.0.3-0.20191003184814-fc3f792c814c h1:+yAllLxP+WjpuVVE1WNm0/Oigbeob9+liYEyk/v4nj8=
|
github.com/Rhymen/go-whatsapp v0.0.2 h1:MelwdquHuuNObBGV7CpXbky2aVdilx/CwiXMwZvS74U=
|
||||||
github.com/Rhymen/go-whatsapp v0.0.3-0.20191003184814-fc3f792c814c/go.mod h1:qf/2PQi82Okxw/igghu/oMGzTeUYuKBq1JNo3tdQyNg=
|
github.com/Rhymen/go-whatsapp v0.0.2/go.mod h1:qf/2PQi82Okxw/igghu/oMGzTeUYuKBq1JNo3tdQyNg=
|
||||||
github.com/Rhymen/go-whatsapp/examples/echo v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:zgCiQtBtZ4P4gFWvwl9aashsdwOcbb/EHOGRmSzM8ME=
|
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/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/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/Rhymen/go-whatsapp/examples/sendTextMessages v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:suwzklatySS3Q0+NCxCDh5hYfgXdQUWU1DNcxwAxStM=
|
||||||
github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e h1:IHXQQIpxASe3m0Jtcd3XongL+lxHNd5nUmvHxJARUmg=
|
|
||||||
github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
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/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
@@ -33,8 +33,8 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
|
|||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/d5/tengo v1.24.8 h1:PRJ+NWt7ae/9sSbIfThOBTkPSvNV+dwYoBAvwfNgNJY=
|
github.com/d5/tengo v1.24.1 h1:b+epGF5Qi0XUkYUUl8y6hVzLxg/eu9FYUAdb4H/KieY=
|
||||||
github.com/d5/tengo v1.24.8/go.mod h1:VhLq8Q2QFhCIJO3NhvM934qOThykMqJi9y9Siqd1ocQ=
|
github.com/d5/tengo v1.24.1/go.mod h1:gsbjo7lBXzBIWBd6NQp1lRKqqiDDANqBOyhW8rTlFsY=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@@ -49,7 +49,6 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME
|
|||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
|
|
||||||
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
|
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible h1:i64CCJcSqkRIkm5OSdZQjZq84/gJsk2zNwHWIRYWlKE=
|
github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible h1:i64CCJcSqkRIkm5OSdZQjZq84/gJsk2zNwHWIRYWlKE=
|
||||||
@@ -64,8 +63,6 @@ github.com/golang/protobuf v1.3.0 h1:kbxbvI4Un1LUWKxufD+BiE6AEExYYgkQLQmLFqA1LFk
|
|||||||
github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
|
github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/gomarkdown/markdown v0.0.0-20190912180731-281270bc6d83 h1:w5VNUHB0SP2tr1+boQJWKvnyn3P61UFErZ2e2ih6x0A=
|
|
||||||
github.com/gomarkdown/markdown v0.0.0-20190912180731-281270bc6d83/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
|
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to=
|
github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to=
|
||||||
@@ -76,22 +73,19 @@ github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f h1:FDM3EtwZLyhW4
|
|||||||
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
||||||
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
||||||
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
|
||||||
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
|
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk=
|
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||||
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
|
github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
github.com/jessevdk/go-flags v1.3.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME=
|
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME=
|
||||||
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
|
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
|
||||||
@@ -100,8 +94,6 @@ github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVY
|
|||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
|
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
|
||||||
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
||||||
github.com/keybase/go-keybase-chat-bot v0.0.0-20190816161829-561f10822eb2 h1:zacJswvfPqUSGdcBXJzKvLN/dB1UjDGDvDesMBBzoA4=
|
|
||||||
github.com/keybase/go-keybase-chat-bot v0.0.0-20190816161829-561f10822eb2/go.mod h1:vNc28YFzigVJod0j5EbuTtRIe7swx8vodh2yA4jZ2s8=
|
|
||||||
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999 h1:2d+FLQbz4xRTi36DO1qYNUwfORax9XcQ0jhbO81Vago=
|
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999 h1:2d+FLQbz4xRTi36DO1qYNUwfORax9XcQ0jhbO81Vago=
|
||||||
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
|
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
@@ -114,32 +106,28 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
|
|||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
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.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/labstack/echo/v4 v4.1.10 h1:/yhIpO50CBInUbE/nHJtGIyhBv0dJe2cDAYxc3V3uMo=
|
github.com/labstack/echo/v4 v4.1.6 h1:WOvLa4T1KzWCRpANwz0HGgWDelXSSGwIKtKBbFdHTv4=
|
||||||
github.com/labstack/echo/v4 v4.1.10/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
|
github.com/labstack/echo/v4 v4.1.6/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE=
|
||||||
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
|
github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU=
|
||||||
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
|
github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4=
|
||||||
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7 h1:BS9tqL0OCiOGuy/CYYk2gc33fxqaqh5/rhqMKu4tcYA=
|
github.com/lrstanley/girc v0.0.0-20190210212025-51b8e096d398 h1:a40kRmhA1p2XFJ6gqXfCExSyuDDCp/U9LA8ZY27u2Lk=
|
||||||
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7/go.mod h1:liX5MxHPrwgHaKowoLkYGwbXfYABh1jbZ6FpElbGF1I=
|
github.com/lrstanley/girc v0.0.0-20190210212025-51b8e096d398/go.mod h1:7cRs1SIBfKQ7e3Tam6GKTILSNHzR862JD0JpINaZoJk=
|
||||||
|
github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5 h1:AsEBgzv3DhuYHI/GiQh2HxvTP71HCCE9E/tzGUzGdtU=
|
||||||
|
github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5/go.mod h1:c2mYKRyMb1BPkO5St0c/ps62L4S0W2NAkaTXj9qEI+0=
|
||||||
|
github.com/lusis/slack-test v0.0.0-20180109053238-3c758769bfa6 h1:iOAVXzZyXtW408TMYejlUPo6BIn92HmOacWtIfNyYns=
|
||||||
|
github.com/lusis/slack-test v0.0.0-20180109053238-3c758769bfa6/go.mod h1:sFlOUpQL1YcjhFVXhg1CG8ZASEs/Mf1oVb6H75JL/zg=
|
||||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d h1:F+Sr+C0ojSlYQ37BLylQtSFmyQULe3jbAygcyXQ9mVs=
|
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d h1:F+Sr+C0ojSlYQ37BLylQtSFmyQULe3jbAygcyXQ9mVs=
|
||||||
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d/go.mod h1:c6MxwqHD+0HvtAJjsHMIdPCiAwGiQwPRPTp69ACMg8A=
|
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d/go.mod h1:c6MxwqHD+0HvtAJjsHMIdPCiAwGiQwPRPTp69ACMg8A=
|
||||||
github.com/matterbridge/discordgo v0.0.0-20191026232317-01823f4ebba4 h1:RvH3lC4bEp+bieca+Yh5xPU8tLJgnk7ridiSwMFHrrw=
|
|
||||||
github.com/matterbridge/discordgo v0.0.0-20191026232317-01823f4ebba4/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
|
|
||||||
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/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91 h1:KzDEcy8eDbTx881giW8a6llsAck3e2bJvMyKvh1IK+k=
|
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91 h1:KzDEcy8eDbTx881giW8a6llsAck3e2bJvMyKvh1IK+k=
|
||||||
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
|
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
|
||||||
github.com/matterbridge/gomatrix v0.0.0-20191026211822-6fc7accd00ca h1:3ypqEpFpt6vg5Sv2xxA8/v4WiSOnWMXW7DqxTxpM4XI=
|
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea h1:kaADGqpK4gGO2BpzEyJrBxq2Jc57Rsar4i2EUxcACUc=
|
||||||
github.com/matterbridge/gomatrix v0.0.0-20191026211822-6fc7accd00ca/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
|
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
|
||||||
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18 h1:fLhwXtWGtfTgZVxHG1lcKjv+re7dRwyyuYFNu69xdho=
|
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18 h1:fLhwXtWGtfTgZVxHG1lcKjv+re7dRwyyuYFNu69xdho=
|
||||||
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
|
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
|
||||||
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61 h1:R/MgM/eUyRBQx2FiH6JVmXck8PaAuKfe2M1tWIzW7nE=
|
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61 h1:R/MgM/eUyRBQx2FiH6JVmXck8PaAuKfe2M1tWIzW7nE=
|
||||||
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU=
|
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU=
|
||||||
github.com/matterbridge/slack v0.1.1-0.20191207211853-5b5f1326cdab h1:4eNOoF+qvyXTwmlD5PwEwPHEpYAUTh2KpEjmEZOSVyE=
|
|
||||||
github.com/matterbridge/slack v0.1.1-0.20191207211853-5b5f1326cdab/go.mod h1:2uCJim0Ct2z1Uj+XQq47KCLLC1b/9UTYaZOvDtbZfK4=
|
|
||||||
github.com/matterbridge/slack v0.1.1-0.20191208194820-95190f11bfb6 h1:UvXXR9tHYqJUXZVEtiK2qkEWBXfFneicate5kOshVFk=
|
|
||||||
github.com/matterbridge/slack v0.1.1-0.20191208194820-95190f11bfb6/go.mod h1:2uCJim0Ct2z1Uj+XQq47KCLLC1b/9UTYaZOvDtbZfK4=
|
|
||||||
github.com/mattermost/mattermost-server v5.5.0+incompatible h1:0wcLGgYtd+YImtLDPf2AOfpBHxbU4suATx+6XKw1XbU=
|
github.com/mattermost/mattermost-server v5.5.0+incompatible h1:0wcLGgYtd+YImtLDPf2AOfpBHxbU4suATx+6XKw1XbU=
|
||||||
github.com/mattermost/mattermost-server v5.5.0+incompatible/go.mod h1:5L6MjAec+XXQwMIt791Ganu45GKsSiM+I0tLR9wUj8Y=
|
github.com/mattermost/mattermost-server v5.5.0+incompatible/go.mod h1:5L6MjAec+XXQwMIt791Ganu45GKsSiM+I0tLR9wUj8Y=
|
||||||
github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=
|
github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=
|
||||||
@@ -150,8 +138,6 @@ github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw
|
|||||||
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
|
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
|
|
||||||
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
|
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-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
@@ -166,6 +152,8 @@ github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9 h1:mp6tU1r0xLostUGL
|
|||||||
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9/go.mod h1:A5SRAcpTemjGgIuBq6Kic2yHcoeUFWUinOAlMP/i9xo=
|
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9/go.mod h1:A5SRAcpTemjGgIuBq6Kic2yHcoeUFWUinOAlMP/i9xo=
|
||||||
github.com/nicksnyder/go-i18n v1.4.0 h1:AgLl+Yq7kg5OYlzCgu9cKTZOyI4tD/NgukKqLqC8E+I=
|
github.com/nicksnyder/go-i18n v1.4.0 h1:AgLl+Yq7kg5OYlzCgu9cKTZOyI4tD/NgukKqLqC8E+I=
|
||||||
github.com/nicksnyder/go-i18n v1.4.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
|
github.com/nicksnyder/go-i18n v1.4.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
|
||||||
|
github.com/nlopes/slack v0.5.0 h1:NbIae8Kd0NpqaEI3iUrsuS0KbcEDhzhc939jLW5fNm0=
|
||||||
|
github.com/nlopes/slack v0.5.0/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
|
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.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
@@ -177,6 +165,8 @@ github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 h1:/CPgDYrfeK2LMK6xcU
|
|||||||
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
|
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
|
||||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
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.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
|
github.com/peterhellberg/emojilib v0.0.0-20190124112554-c18758d55320 h1:YxcQy/DV+48NGv1lxx1vsWBzs6W1f1ogubkuCozxpX0=
|
||||||
|
github.com/peterhellberg/emojilib v0.0.0-20190124112554-c18758d55320/go.mod h1:G7LufuPajuIvdt9OitkNt2qh0mmvD4bfRgRM7bhDIOA=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@@ -200,11 +190,10 @@ github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxT
|
|||||||
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
|
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
|
||||||
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 h1:Lx3BlDGFElJt4u/zKc9A3BuGYbQAGlEFyPuUA3jeMD0=
|
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 h1:Lx3BlDGFElJt4u/zKc9A3BuGYbQAGlEFyPuUA3jeMD0=
|
||||||
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
|
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
|
||||||
github.com/shazow/ssh-chat v1.8.2 h1:MMso9eWfCnPBelRsusYxKcRBUwHIPEQkR9WrO89II38=
|
github.com/shazow/ssh-chat v0.0.0-20190125184227-81d7e1686296 h1:8RLq547MSVc6vhOuCl4Ca0TsAQknj6NX6ZLSZ3+xmio=
|
||||||
github.com/shazow/ssh-chat v1.8.2/go.mod h1:cXTZK/D1zujEwB0y8DIT1GX8rIKjyLDYeWd+jitPX84=
|
github.com/shazow/ssh-chat v0.0.0-20190125184227-81d7e1686296/go.mod h1:1GLXsL4esywkpNId3v4QWuMf3THtWGitWvtQ/L3aSA4=
|
||||||
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7 h1:80VN+vGkqM773Br/uNNTSheo3KatTgV8IpjIKjvVLng=
|
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7 h1:80VN+vGkqM773Br/uNNTSheo3KatTgV8IpjIKjvVLng=
|
||||||
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||||
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U=
|
|
||||||
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
|
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
@@ -229,9 +218,11 @@ github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
|
|||||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
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.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||||
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
|
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
|
||||||
github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
|
github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
@@ -248,6 +239,18 @@ github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6Ut
|
|||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2 h1:UQwvu7FjUEdVYofx0U6bsc5odNE7wa5TSA0fl559GcA=
|
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-20190304061218-d34796e0a6c2/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
|
||||||
|
gitlab.com/golang-commonmark/html v0.0.0-20180917080848-cfaf75183c4a h1:Ax7kdHNICZiIeFpmevmaEWb0Ae3BUj3zCTKhZHZ+zd0=
|
||||||
|
gitlab.com/golang-commonmark/html v0.0.0-20180917080848-cfaf75183c4a/go.mod h1:JT4uoTz0tfPoyVH88GZoWDNm5NHJI2VbUW+eyPClueI=
|
||||||
|
gitlab.com/golang-commonmark/linkify v0.0.0-20180917065525-c22b7bdb1179 h1:rbON2KwBnWuFMlSHM8LELLlwroDRZw6xv0e6il6e5dk=
|
||||||
|
gitlab.com/golang-commonmark/linkify v0.0.0-20180917065525-c22b7bdb1179/go.mod h1:Gn+LZmCrhPECMD3SOKlE+BOHwhOYD9j7WT9NUtkCrC8=
|
||||||
|
gitlab.com/golang-commonmark/markdown v0.0.0-20181102083822-772775880e1f h1:jwXy/CsM4xS2aoiF2fHAlukmInWhd2TlWB+HDCyvzKc=
|
||||||
|
gitlab.com/golang-commonmark/markdown v0.0.0-20181102083822-772775880e1f/go.mod h1:SIHlEr9462fpIfTrVWf3GqQDxnA65Vm3BMMsUtuA6W0=
|
||||||
|
gitlab.com/golang-commonmark/mdurl v0.0.0-20180912090424-e5bce34c34f2 h1:wD/sPUgx2QJFPTyXZpJnLaROolfeKuruh06U4pRV0WY=
|
||||||
|
gitlab.com/golang-commonmark/mdurl v0.0.0-20180912090424-e5bce34c34f2/go.mod h1:wQk4rLkWrdOPjUAtqJRJ10hIlseLSVYWP95PLrjDF9s=
|
||||||
|
gitlab.com/golang-commonmark/puny v0.0.0-20180912090636-2cd490539afe h1:5kUPFAF52umOUPH12MuNUmyVTseJRNBftDl/KfsvX3I=
|
||||||
|
gitlab.com/golang-commonmark/puny v0.0.0-20180912090636-2cd490539afe/go.mod h1:P9LSM1KVzrIstFgUaveuwiAm8PK5VTB3yJEU8kqlbrU=
|
||||||
|
gitlab.com/opennota/wd v0.0.0-20180912061657-c5d65f63c638 h1:uPZaMiz6Sz0PZs3IZJWpU5qHKGNy///1pacZC9txiUI=
|
||||||
|
gitlab.com/opennota/wd v0.0.0-20180912061657-c5d65f63c638/go.mod h1:EGRJaqe2eO9XGmFtQCvV3Lm9NLico3UhFwUpCG/+mVU=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
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.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
@@ -255,18 +258,15 @@ 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.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
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.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
golang.org/dl v0.0.0-20190829154251-82a15e2f2ead/go.mod h1:IUMfjQLJQd4UTqG1Z90tenwKoCX93Gn3MAQJMOSBsDQ=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
|
||||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
|
golang.org/x/image v0.0.0-20190616094056-33659d3de4f5 h1:ngW7cqsJcNIFizl289rKwy+nVvw7TQS8z3ejrra6syo=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/image v0.0.0-20190616094056-33659d3de4f5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39 h1:4dQcAORh9oYBwVSBVIkP489LUPC+f1HBkTYXgmqfR+o=
|
|
||||||
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -276,13 +276,15 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA=
|
golang.org/x/net v0.0.0-20190607181551-461777fb6f67 h1:rJJxsykSlULwd2P2+pg/rtnwN2FrWp4IuCxOSyS0V00=
|
||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190607181551-461777fb6f67/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
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=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -290,11 +292,11 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
|
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190609082536-301114b31cce h1:CQakrGkKbydnUmt7cFIlmQ4lNQiqdTPt6xzXij4nYCc=
|
||||||
|
golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
@@ -304,6 +306,7 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm
|
|||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
version = "1.16.3"
|
version = "1.15.2-dev"
|
||||||
githash string
|
githash string
|
||||||
|
|
||||||
flagConfig = flag.String("conf", "matterbridge.toml", "config file")
|
flagConfig = flag.String("conf", "matterbridge.toml", "config file")
|
||||||
|
|||||||
@@ -522,29 +522,6 @@ StripNick=false
|
|||||||
#OPTIONAL (default false)
|
#OPTIONAL (default false)
|
||||||
ShowTopicChange=false
|
ShowTopicChange=false
|
||||||
|
|
||||||
###################################################################
|
|
||||||
#
|
|
||||||
# Keybase
|
|
||||||
# You should have a separate bridge account on Keybase
|
|
||||||
# (it also needs to be logged in on the system you're running the bridge on)
|
|
||||||
#
|
|
||||||
###################################################################
|
|
||||||
|
|
||||||
[keybase.myteam]
|
|
||||||
|
|
||||||
# RemoteNickFormat defines how remote users appear on this bridge
|
|
||||||
# See [general] config section for default options
|
|
||||||
RemoteNickFormat="{NICK} ({PROTOCOL}): "
|
|
||||||
|
|
||||||
# extra label that can be used in the RemoteNickFormat
|
|
||||||
# optional (default empty)
|
|
||||||
Label=""
|
|
||||||
|
|
||||||
# Your team on Keybase.
|
|
||||||
# The bot user MUST be a member of this team
|
|
||||||
# REQUIRED
|
|
||||||
Team="myteam"
|
|
||||||
|
|
||||||
###################################################################
|
###################################################################
|
||||||
#slack section
|
#slack section
|
||||||
###################################################################
|
###################################################################
|
||||||
@@ -956,11 +933,6 @@ Server="https://yourrocketchatserver.domain.com:443"
|
|||||||
#REQUIRED (when not using webhooks)
|
#REQUIRED (when not using webhooks)
|
||||||
Login="yourlogin@domain.com"
|
Login="yourlogin@domain.com"
|
||||||
Password="yourpass"
|
Password="yourpass"
|
||||||
# When using access token set Login to the User ID associated with your token and Token to your token.
|
|
||||||
# When Token is set Password is ignored.
|
|
||||||
# Login="yOurUSerID"
|
|
||||||
# Token="YoUrUsER_toKEN"
|
|
||||||
|
|
||||||
|
|
||||||
#### Settings for webhook matterbridge.
|
#### Settings for webhook matterbridge.
|
||||||
#USE DEDICATED BOT USER WHEN POSSIBLE! This allows you to use advanced features like message editing/deleting and uploads
|
#USE DEDICATED BOT USER WHEN POSSIBLE! This allows you to use advanced features like message editing/deleting and uploads
|
||||||
|
|||||||
@@ -36,16 +36,6 @@ func (m *MMClient) GetChannelHeader(channelId string) string { //nolint:golint
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNormalisedName(channel *model.Channel) string {
|
|
||||||
if channel.Type == model.CHANNEL_GROUP {
|
|
||||||
// (deprecated in favor of ReplaceAll in go 1.12)
|
|
||||||
res := strings.Replace(channel.DisplayName, ", ", "-", -1) //nolint: gocritic
|
|
||||||
res = strings.Replace(res, " ", "_", -1) //nolint: gocritic
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
return channel.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MMClient) GetChannelId(name string, teamId string) string { //nolint:golint
|
func (m *MMClient) GetChannelId(name string, teamId string) string { //nolint:golint
|
||||||
m.RLock()
|
m.RLock()
|
||||||
defer m.RUnlock()
|
defer m.RUnlock()
|
||||||
@@ -55,7 +45,13 @@ func (m *MMClient) GetChannelId(name string, teamId string) string { //nolint:go
|
|||||||
|
|
||||||
for _, t := range m.OtherTeams {
|
for _, t := range m.OtherTeams {
|
||||||
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
||||||
if getNormalisedName(channel) == name {
|
if channel.Type == model.CHANNEL_GROUP {
|
||||||
|
res := strings.Replace(channel.DisplayName, ", ", "-", -1)
|
||||||
|
res = strings.Replace(res, " ", "_", -1)
|
||||||
|
if res == name {
|
||||||
|
return channel.Id
|
||||||
|
}
|
||||||
|
} else if channel.Name == name {
|
||||||
return channel.Id
|
return channel.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,7 +63,7 @@ func (m *MMClient) getChannelIdTeam(name string, teamId string) string { //nolin
|
|||||||
for _, t := range m.OtherTeams {
|
for _, t := range m.OtherTeams {
|
||||||
if t.Id == teamId {
|
if t.Id == teamId {
|
||||||
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
||||||
if getNormalisedName(channel) == name {
|
if channel.Name == name {
|
||||||
return channel.Id
|
return channel.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +81,12 @@ func (m *MMClient) GetChannelName(channelId string) string { //nolint:golint
|
|||||||
}
|
}
|
||||||
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
||||||
if channel.Id == channelId {
|
if channel.Id == channelId {
|
||||||
return getNormalisedName(channel)
|
if channel.Type == model.CHANNEL_GROUP {
|
||||||
|
res := strings.Replace(channel.DisplayName, ", ", "-", -1)
|
||||||
|
res = strings.Replace(res, " ", "_", -1)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
return channel.Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
vendor/github.com/Philipp15b/go-steam/README.md
generated
vendored
15
vendor/github.com/Philipp15b/go-steam/README.md
generated
vendored
@@ -45,10 +45,19 @@ Whether you want to develop your own Steam bot or directly work on go-steam itse
|
|||||||
|
|
||||||
## Updating go-steam to a new SteamKit version
|
## Updating go-steam to a new SteamKit version
|
||||||
|
|
||||||
Go source code is generated with code in the `generator` directory.
|
To update go-steam to a new version of SteamKit, do the following:
|
||||||
Look at `generator/README.md` for more information on how to use the generator.
|
|
||||||
|
|
||||||
Then, after generating new Go source files, update `go-steam` as necessary.
|
go get github.com/golang/protobuf/protoc-gen-go/
|
||||||
|
git submodule init && git submodule update
|
||||||
|
cd generator
|
||||||
|
go run generator.go clean proto steamlang
|
||||||
|
|
||||||
|
Make sure that `$GOPATH/bin` / `protoc-gen-go` is in your `$PATH`. You'll also need [`protoc`](https://developers.google.com/protocol-buffers/docs/downloads), the protocol buffer compiler. At the moment, we use Protocol Buffers 2.6.1 with `proco-gen-go`-[2402d76](https://github.com/golang/protobuf/tree/2402d76f3d41f928c7902a765dfc872356dd3aad).
|
||||||
|
|
||||||
|
To compile the Steam Language files, you also need the [.NET Framework](https://www.microsoft.com/net/downloads)
|
||||||
|
on Windows or [mono](http://www.go-mono.com/mono-downloads/download.html) on other operating systems.
|
||||||
|
|
||||||
|
Apply the protocol changes where necessary.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
3
vendor/github.com/Philipp15b/go-steam/auth.go
generated
vendored
3
vendor/github.com/Philipp15b/go-steam/auth.go
generated
vendored
@@ -94,6 +94,9 @@ func (a *Auth) HandlePacket(packet *Packet) {
|
|||||||
a.handleUpdateMachineAuth(packet)
|
a.handleUpdateMachineAuth(packet)
|
||||||
case EMsg_ClientAccountInfo:
|
case EMsg_ClientAccountInfo:
|
||||||
a.handleAccountInfo(packet)
|
a.handleAccountInfo(packet)
|
||||||
|
case EMsg_ClientWalletInfoUpdate:
|
||||||
|
case EMsg_ClientRequestWebAPIAuthenticateUserNonceResponse:
|
||||||
|
case EMsg_ClientMarketingMessageUpdate:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
vendor/github.com/Philipp15b/go-steam/client.go
generated
vendored
6
vendor/github.com/Philipp15b/go-steam/client.go
generated
vendored
@@ -133,17 +133,11 @@ func (c *Client) Connected() bool {
|
|||||||
// If you want to connect to a specific server, use `ConnectTo`.
|
// If you want to connect to a specific server, use `ConnectTo`.
|
||||||
func (c *Client) Connect() *netutil.PortAddr {
|
func (c *Client) Connect() *netutil.PortAddr {
|
||||||
var server *netutil.PortAddr
|
var server *netutil.PortAddr
|
||||||
|
|
||||||
// try to initialize the directory cache
|
|
||||||
if !steamDirectoryCache.IsInitialized() {
|
|
||||||
_ = steamDirectoryCache.Initialize()
|
|
||||||
}
|
|
||||||
if steamDirectoryCache.IsInitialized() {
|
if steamDirectoryCache.IsInitialized() {
|
||||||
server = steamDirectoryCache.GetRandomCM()
|
server = steamDirectoryCache.GetRandomCM()
|
||||||
} else {
|
} else {
|
||||||
server = GetRandomCM()
|
server = GetRandomCM()
|
||||||
}
|
}
|
||||||
|
|
||||||
c.ConnectTo(server)
|
c.ConnectTo(server)
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|||||||
6
vendor/github.com/Philipp15b/go-steam/protocol/internal.go
generated
vendored
6
vendor/github.com/Philipp15b/go-steam/protocol/internal.go
generated
vendored
@@ -1,7 +1,6 @@
|
|||||||
package protocol
|
package protocol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -43,7 +42,6 @@ const EClientPersonaStateFlag_DefaultInfoRequest = EClientPersonaStateFlag_Playe
|
|||||||
|
|
||||||
const DefaultAvatar = "fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb"
|
const DefaultAvatar = "fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb"
|
||||||
|
|
||||||
func ValidAvatar(avatar []byte) bool {
|
func ValidAvatar(avatar string) bool {
|
||||||
str := hex.EncodeToString(avatar)
|
return !(avatar == "0000000000000000000000000000000000000000" || len(avatar) != 40)
|
||||||
return !(str == "0000000000000000000000000000000000000000" || len(str) != 40)
|
|
||||||
}
|
}
|
||||||
|
|||||||
57
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/app_ticket.pb.go
generated
vendored
57
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/app_ticket.pb.go
generated
vendored
@@ -1,60 +1,31 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go.
|
||||||
// source: encrypted_app_ticket.proto
|
// source: encrypted_app_ticket.proto
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package protobuf
|
package protobuf
|
||||||
|
|
||||||
import (
|
import proto "github.com/golang/protobuf/proto"
|
||||||
fmt "fmt"
|
import fmt "fmt"
|
||||||
proto "github.com/golang/protobuf/proto"
|
import math "math"
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
var _ = proto.Marshal
|
var _ = proto.Marshal
|
||||||
var _ = fmt.Errorf
|
var _ = fmt.Errorf
|
||||||
var _ = math.Inf
|
var _ = math.Inf
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package protobuf is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package protobuf to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type EncryptedAppTicket struct {
|
type EncryptedAppTicket struct {
|
||||||
TicketVersionNo *uint32 `protobuf:"varint,1,opt,name=ticket_version_no" json:"ticket_version_no,omitempty"`
|
TicketVersionNo *uint32 `protobuf:"varint,1,opt,name=ticket_version_no" json:"ticket_version_no,omitempty"`
|
||||||
CrcEncryptedticket *uint32 `protobuf:"varint,2,opt,name=crc_encryptedticket" json:"crc_encryptedticket,omitempty"`
|
CrcEncryptedticket *uint32 `protobuf:"varint,2,opt,name=crc_encryptedticket" json:"crc_encryptedticket,omitempty"`
|
||||||
CbEncrypteduserdata *uint32 `protobuf:"varint,3,opt,name=cb_encrypteduserdata" json:"cb_encrypteduserdata,omitempty"`
|
CbEncrypteduserdata *uint32 `protobuf:"varint,3,opt,name=cb_encrypteduserdata" json:"cb_encrypteduserdata,omitempty"`
|
||||||
CbEncryptedAppownershipticket *uint32 `protobuf:"varint,4,opt,name=cb_encrypted_appownershipticket" json:"cb_encrypted_appownershipticket,omitempty"`
|
CbEncryptedAppownershipticket *uint32 `protobuf:"varint,4,opt,name=cb_encrypted_appownershipticket" json:"cb_encrypted_appownershipticket,omitempty"`
|
||||||
EncryptedTicket []byte `protobuf:"bytes,5,opt,name=encrypted_ticket" json:"encrypted_ticket,omitempty"`
|
EncryptedTicket []byte `protobuf:"bytes,5,opt,name=encrypted_ticket" json:"encrypted_ticket,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *EncryptedAppTicket) Reset() { *m = EncryptedAppTicket{} }
|
func (m *EncryptedAppTicket) Reset() { *m = EncryptedAppTicket{} }
|
||||||
func (m *EncryptedAppTicket) String() string { return proto.CompactTextString(m) }
|
func (m *EncryptedAppTicket) String() string { return proto.CompactTextString(m) }
|
||||||
func (*EncryptedAppTicket) ProtoMessage() {}
|
func (*EncryptedAppTicket) ProtoMessage() {}
|
||||||
func (*EncryptedAppTicket) Descriptor() ([]byte, []int) {
|
func (*EncryptedAppTicket) Descriptor() ([]byte, []int) { return app_ticket_fileDescriptor0, []int{0} }
|
||||||
return fileDescriptor_c6d69fd1cac4e8d5, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *EncryptedAppTicket) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_EncryptedAppTicket.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *EncryptedAppTicket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_EncryptedAppTicket.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *EncryptedAppTicket) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_EncryptedAppTicket.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *EncryptedAppTicket) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_EncryptedAppTicket.Size(m)
|
|
||||||
}
|
|
||||||
func (m *EncryptedAppTicket) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_EncryptedAppTicket.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_EncryptedAppTicket proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *EncryptedAppTicket) GetTicketVersionNo() uint32 {
|
func (m *EncryptedAppTicket) GetTicketVersionNo() uint32 {
|
||||||
if m != nil && m.TicketVersionNo != nil {
|
if m != nil && m.TicketVersionNo != nil {
|
||||||
@@ -95,19 +66,17 @@ func init() {
|
|||||||
proto.RegisterType((*EncryptedAppTicket)(nil), "EncryptedAppTicket")
|
proto.RegisterType((*EncryptedAppTicket)(nil), "EncryptedAppTicket")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("encrypted_app_ticket.proto", fileDescriptor_c6d69fd1cac4e8d5) }
|
var app_ticket_fileDescriptor0 = []byte{
|
||||||
|
// 162 bytes of a gzipped FileDescriptorProto
|
||||||
var fileDescriptor_c6d69fd1cac4e8d5 = []byte{
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xcd, 0x4b, 0x2e,
|
||||||
// 164 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xcd, 0x4b, 0x2e,
|
|
||||||
0xaa, 0x2c, 0x28, 0x49, 0x4d, 0x89, 0x4f, 0x2c, 0x28, 0x88, 0x2f, 0xc9, 0x4c, 0xce, 0x4e, 0x2d,
|
0xaa, 0x2c, 0x28, 0x49, 0x4d, 0x89, 0x4f, 0x2c, 0x28, 0x88, 0x2f, 0xc9, 0x4c, 0xce, 0x4e, 0x2d,
|
||||||
0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x57, 0x5a, 0xcb, 0xc8, 0x25, 0xe4, 0x0a, 0x93, 0x76, 0x2c,
|
0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x57, 0x5a, 0xcb, 0xc8, 0x25, 0xe4, 0x0a, 0x93, 0x76, 0x2c,
|
||||||
0x28, 0x08, 0x01, 0x4b, 0x0a, 0x49, 0x72, 0x09, 0x42, 0x94, 0xc5, 0x97, 0xa5, 0x16, 0x15, 0x67,
|
0x28, 0x08, 0x01, 0x4b, 0x0a, 0x49, 0x72, 0x09, 0x42, 0x94, 0xc5, 0x97, 0xa5, 0x16, 0x15, 0x67,
|
||||||
0xe6, 0xe7, 0xc5, 0xe7, 0xe5, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x0a, 0x49, 0x73, 0x09, 0x27,
|
0xe6, 0xe7, 0xc5, 0xe7, 0xe5, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x0a, 0x49, 0x73, 0x09, 0x27,
|
||||||
0x17, 0x25, 0xc7, 0xc3, 0xcd, 0x84, 0xa8, 0x93, 0x60, 0x02, 0x4b, 0xca, 0x70, 0x89, 0x24, 0x27,
|
0x17, 0x25, 0xc7, 0xc3, 0xcd, 0x84, 0xa8, 0x93, 0x60, 0x02, 0x4b, 0xca, 0x70, 0x89, 0x24, 0x27,
|
||||||
0x21, 0xe4, 0x4a, 0x8b, 0x53, 0x8b, 0x52, 0x12, 0x4b, 0x12, 0x25, 0x98, 0xc1, 0xb2, 0xea, 0x5c,
|
0x21, 0xe4, 0x4a, 0x8b, 0x53, 0x8b, 0x52, 0x12, 0x4b, 0x12, 0x25, 0x98, 0xc1, 0xb2, 0xea, 0x5c,
|
||||||
0xf2, 0xc8, 0xb2, 0x20, 0xd7, 0xe4, 0x97, 0xe7, 0xa5, 0x16, 0x15, 0x67, 0x64, 0x16, 0x40, 0x8d,
|
0xf2, 0xc8, 0xb2, 0x20, 0xd7, 0xe4, 0x97, 0xe7, 0x01, 0x2d, 0xc8, 0xc8, 0x2c, 0x80, 0x1a, 0xc3,
|
||||||
0x61, 0x01, 0x2b, 0x94, 0xe0, 0x12, 0x40, 0xa8, 0x82, 0xca, 0xb0, 0x2a, 0x30, 0x6a, 0xf0, 0x38,
|
0x02, 0x56, 0x28, 0xc1, 0x25, 0x80, 0x50, 0x05, 0x95, 0x61, 0x05, 0xca, 0xf0, 0x38, 0xb1, 0x7a,
|
||||||
0xb1, 0x7a, 0x30, 0x36, 0x30, 0x32, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0x03, 0x8c, 0xdb, 0x92,
|
0x30, 0x36, 0x30, 0x32, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0x03, 0x8c, 0xdb, 0x92, 0xd3, 0x00,
|
||||||
0xd3, 0x00, 0x00, 0x00,
|
0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|||||||
874
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/base.pb.go
generated
vendored
874
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/base.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
7057
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server.pb.go
generated
vendored
7057
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
5924
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_2.pb.go
generated
vendored
5924
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_2.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2321
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_friends.pb.go
generated
vendored
2321
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_friends.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1294
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_login.pb.go
generated
vendored
1294
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_login.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
397
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_site_license.pb.go
generated
vendored
397
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_site_license.pb.go
generated
vendored
@@ -1,397 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// source: steammessages_sitelicenseclient.proto
|
|
||||||
|
|
||||||
package protobuf
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package protobuf is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package protobuf to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type CMsgClientSiteInfo struct {
|
|
||||||
SiteId *uint64 `protobuf:"varint,1,opt,name=site_id" json:"site_id,omitempty"`
|
|
||||||
SiteName *string `protobuf:"bytes,2,opt,name=site_name" json:"site_name,omitempty"`
|
|
||||||
AllowCachedCredentials *bool `protobuf:"varint,3,opt,name=allow_cached_credentials" json:"allow_cached_credentials,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteInfo) Reset() { *m = CMsgClientSiteInfo{} }
|
|
||||||
func (m *CMsgClientSiteInfo) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CMsgClientSiteInfo) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteInfo) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteInfo) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteInfo.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteInfo.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteInfo) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteInfo.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteInfo) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteInfo.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteInfo) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteInfo.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteInfo proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteInfo) GetSiteId() uint64 {
|
|
||||||
if m != nil && m.SiteId != nil {
|
|
||||||
return *m.SiteId
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteInfo) GetSiteName() string {
|
|
||||||
if m != nil && m.SiteName != nil {
|
|
||||||
return *m.SiteName
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteInfo) GetAllowCachedCredentials() bool {
|
|
||||||
if m != nil && m.AllowCachedCredentials != nil {
|
|
||||||
return *m.AllowCachedCredentials
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseCheckout struct {
|
|
||||||
Appid *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) Reset() { *m = CMsgClientSiteLicenseCheckout{} }
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CMsgClientSiteLicenseCheckout) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseCheckout) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckout.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckout.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseCheckout.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckout.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseCheckout.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseCheckout proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckout) GetAppid() uint32 {
|
|
||||||
if m != nil && m.Appid != nil {
|
|
||||||
return *m.Appid
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseCheckoutResponse struct {
|
|
||||||
Eresult *int32 `protobuf:"varint,1,opt,name=eresult,def=2" json:"eresult,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) Reset() { *m = CMsgClientSiteLicenseCheckoutResponse{} }
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CMsgClientSiteLicenseCheckoutResponse) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseCheckoutResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseCheckoutResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
const Default_CMsgClientSiteLicenseCheckoutResponse_Eresult int32 = 2
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseCheckoutResponse) GetEresult() int32 {
|
|
||||||
if m != nil && m.Eresult != nil {
|
|
||||||
return *m.Eresult
|
|
||||||
}
|
|
||||||
return Default_CMsgClientSiteLicenseCheckoutResponse_Eresult
|
|
||||||
}
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseGetAvailableSeats struct {
|
|
||||||
Appid *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) Reset() {
|
|
||||||
*m = CMsgClientSiteLicenseGetAvailableSeats{}
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CMsgClientSiteLicenseGetAvailableSeats) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseGetAvailableSeats) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeats proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeats) GetAppid() uint32 {
|
|
||||||
if m != nil && m.Appid != nil {
|
|
||||||
return *m.Appid
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseGetAvailableSeatsResponse struct {
|
|
||||||
Eresult *int32 `protobuf:"varint,1,opt,name=eresult,def=2" json:"eresult,omitempty"`
|
|
||||||
Seats *uint32 `protobuf:"varint,2,opt,name=seats" json:"seats,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) Reset() {
|
|
||||||
*m = CMsgClientSiteLicenseGetAvailableSeatsResponse{}
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) String() string {
|
|
||||||
return proto.CompactTextString(m)
|
|
||||||
}
|
|
||||||
func (*CMsgClientSiteLicenseGetAvailableSeatsResponse) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseGetAvailableSeatsResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{4}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseGetAvailableSeatsResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
const Default_CMsgClientSiteLicenseGetAvailableSeatsResponse_Eresult int32 = 2
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) GetEresult() int32 {
|
|
||||||
if m != nil && m.Eresult != nil {
|
|
||||||
return *m.Eresult
|
|
||||||
}
|
|
||||||
return Default_CMsgClientSiteLicenseGetAvailableSeatsResponse_Eresult
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetAvailableSeatsResponse) GetSeats() uint32 {
|
|
||||||
if m != nil && m.Seats != nil {
|
|
||||||
return *m.Seats
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseGetContentCacheInfo struct {
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) Reset() {
|
|
||||||
*m = CMsgClientSiteLicenseGetContentCacheInfo{}
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*CMsgClientSiteLicenseGetContentCacheInfo) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseGetContentCacheInfo) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{5}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfo) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfo proto.InternalMessageInfo
|
|
||||||
|
|
||||||
type CMsgClientSiteLicenseGetContentCacheInfoResponse struct {
|
|
||||||
UseCache *bool `protobuf:"varint,1,opt,name=use_cache" json:"use_cache,omitempty"`
|
|
||||||
Ipv4Address *uint32 `protobuf:"varint,2,opt,name=ipv4_address" json:"ipv4_address,omitempty"`
|
|
||||||
PortNumber *uint32 `protobuf:"varint,3,opt,name=port_number" json:"port_number,omitempty"`
|
|
||||||
P2PGroup *uint32 `protobuf:"varint,4,opt,name=p2p_group" json:"p2p_group,omitempty"`
|
|
||||||
IpAddress *string `protobuf:"bytes,5,opt,name=ip_address" json:"ip_address,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) Reset() {
|
|
||||||
*m = CMsgClientSiteLicenseGetContentCacheInfoResponse{}
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) String() string {
|
|
||||||
return proto.CompactTextString(m)
|
|
||||||
}
|
|
||||||
func (*CMsgClientSiteLicenseGetContentCacheInfoResponse) ProtoMessage() {}
|
|
||||||
func (*CMsgClientSiteLicenseGetContentCacheInfoResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_0a32817a56a37a6e, []int{6}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse.Size(m)
|
|
||||||
}
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_CMsgClientSiteLicenseGetContentCacheInfoResponse proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) GetUseCache() bool {
|
|
||||||
if m != nil && m.UseCache != nil {
|
|
||||||
return *m.UseCache
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) GetIpv4Address() uint32 {
|
|
||||||
if m != nil && m.Ipv4Address != nil {
|
|
||||||
return *m.Ipv4Address
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) GetPortNumber() uint32 {
|
|
||||||
if m != nil && m.PortNumber != nil {
|
|
||||||
return *m.PortNumber
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) GetP2PGroup() uint32 {
|
|
||||||
if m != nil && m.P2PGroup != nil {
|
|
||||||
return *m.P2PGroup
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *CMsgClientSiteLicenseGetContentCacheInfoResponse) GetIpAddress() string {
|
|
||||||
if m != nil && m.IpAddress != nil {
|
|
||||||
return *m.IpAddress
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*CMsgClientSiteInfo)(nil), "CMsgClientSiteInfo")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseCheckout)(nil), "CMsgClientSiteLicenseCheckout")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseCheckoutResponse)(nil), "CMsgClientSiteLicenseCheckoutResponse")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseGetAvailableSeats)(nil), "CMsgClientSiteLicenseGetAvailableSeats")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseGetAvailableSeatsResponse)(nil), "CMsgClientSiteLicenseGetAvailableSeatsResponse")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseGetContentCacheInfo)(nil), "CMsgClientSiteLicenseGetContentCacheInfo")
|
|
||||||
proto.RegisterType((*CMsgClientSiteLicenseGetContentCacheInfoResponse)(nil), "CMsgClientSiteLicenseGetContentCacheInfoResponse")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterFile("steammessages_sitelicenseclient.proto", fileDescriptor_0a32817a56a37a6e)
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileDescriptor_0a32817a56a37a6e = []byte{
|
|
||||||
// 335 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xfb, 0x40,
|
|
||||||
0x14, 0xc4, 0xff, 0xfb, 0xb7, 0xa1, 0xed, 0xd3, 0x20, 0x5d, 0x3d, 0x04, 0x41, 0x08, 0x81, 0x4a,
|
|
||||||
0xf0, 0x50, 0xa4, 0x08, 0x82, 0x9e, 0x34, 0x07, 0x15, 0xf4, 0x62, 0x6f, 0x5e, 0xc2, 0x36, 0x79,
|
|
||||||
0xb6, 0x8b, 0x9b, 0xdd, 0x25, 0x6f, 0x53, 0xaf, 0x7e, 0x0b, 0xbf, 0xae, 0x64, 0x5b, 0x0a, 0x15,
|
|
||||||
0x2d, 0xbd, 0xee, 0xce, 0x6f, 0x66, 0x98, 0x07, 0x43, 0x72, 0x28, 0xaa, 0x0a, 0x89, 0xc4, 0x0c,
|
|
||||||
0x29, 0x27, 0xe9, 0x50, 0xc9, 0x02, 0x35, 0x61, 0xa1, 0x24, 0x6a, 0x37, 0xb2, 0xb5, 0x71, 0xe6,
|
|
||||||
0x24, 0xda, 0x94, 0x4d, 0x05, 0xe1, 0xf2, 0x27, 0x79, 0x05, 0x9e, 0x3d, 0xd3, 0x2c, 0xf3, 0xea,
|
|
||||||
0x89, 0x74, 0xf8, 0xa8, 0xdf, 0x0c, 0x3f, 0x84, 0x6e, 0x6b, 0x95, 0xcb, 0x32, 0x62, 0x31, 0x4b,
|
|
||||||
0x3b, 0x7c, 0x00, 0x7d, 0xff, 0xa0, 0x45, 0x85, 0xd1, 0xff, 0x98, 0xa5, 0x7d, 0x1e, 0x43, 0x24,
|
|
||||||
0x94, 0x32, 0x1f, 0x79, 0x21, 0x8a, 0x39, 0x96, 0x79, 0x51, 0x63, 0x89, 0xda, 0x49, 0xa1, 0x28,
|
|
||||||
0xda, 0x8b, 0x59, 0xda, 0x4b, 0x46, 0x70, 0xba, 0xe9, 0xfd, 0xb4, 0xac, 0x96, 0xcd, 0xb1, 0x78,
|
|
||||||
0x37, 0x8d, 0xe3, 0x21, 0x04, 0xc2, 0xda, 0x55, 0x48, 0x98, 0xdc, 0xc0, 0x70, 0xab, 0xfe, 0x05,
|
|
||||||
0xc9, 0x1a, 0x4d, 0xc8, 0x39, 0x74, 0xb1, 0x46, 0x6a, 0x94, 0xf3, 0x64, 0x70, 0xcd, 0xc6, 0xc9,
|
|
||||||
0x15, 0x9c, 0xfd, 0x0a, 0xdf, 0xa3, 0xbb, 0x5d, 0x08, 0xa9, 0xc4, 0x54, 0xe1, 0x04, 0x85, 0xa3,
|
|
||||||
0x9f, 0xa9, 0x13, 0x18, 0xed, 0x06, 0x6e, 0x8b, 0x6f, 0x4d, 0xa9, 0x15, 0xf9, 0x71, 0xc2, 0xe4,
|
|
||||||
0x1c, 0xd2, 0xbf, 0x4c, 0x33, 0xa3, 0x1d, 0x6a, 0x97, 0xb5, 0xab, 0xb5, 0x63, 0x27, 0x5f, 0x0c,
|
|
||||||
0x2e, 0x76, 0x15, 0xaf, 0x3b, 0x0c, 0xa0, 0xdf, 0x10, 0x2e, 0xb7, 0xf7, 0x2d, 0x7a, 0xfc, 0x18,
|
|
||||||
0x0e, 0xa4, 0x5d, 0x5c, 0xe6, 0xa2, 0x2c, 0x6b, 0xa4, 0x55, 0x13, 0x7e, 0x04, 0xfb, 0xd6, 0xd4,
|
|
||||||
0x2e, 0xd7, 0x4d, 0x35, 0xc5, 0xda, 0x5f, 0x26, 0x6c, 0x69, 0x3b, 0xb6, 0xf9, 0xac, 0x36, 0x8d,
|
|
||||||
0x8d, 0x3a, 0xfe, 0x89, 0x03, 0x48, 0xbb, 0x66, 0x83, 0xf6, 0xc4, 0x77, 0xc1, 0x03, 0xfb, 0x64,
|
|
||||||
0xff, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x09, 0x2f, 0x9f, 0xe9, 0x65, 0x02, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
333
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/content_manifest.pb.go
generated
vendored
333
vendor/github.com/Philipp15b/go-steam/protocol/protobuf/content_manifest.pb.go
generated
vendored
@@ -1,56 +1,27 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go.
|
||||||
// source: content_manifest.proto
|
// source: content_manifest.proto
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package protobuf
|
package protobuf
|
||||||
|
|
||||||
import (
|
import proto "github.com/golang/protobuf/proto"
|
||||||
fmt "fmt"
|
import fmt "fmt"
|
||||||
proto "github.com/golang/protobuf/proto"
|
import math "math"
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
var _ = proto.Marshal
|
var _ = proto.Marshal
|
||||||
var _ = fmt.Errorf
|
var _ = fmt.Errorf
|
||||||
var _ = math.Inf
|
var _ = math.Inf
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package protobuf is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package protobuf to be updated.
|
|
||||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type ContentManifestPayload struct {
|
type ContentManifestPayload struct {
|
||||||
Mappings []*ContentManifestPayload_FileMapping `protobuf:"bytes,1,rep,name=mappings" json:"mappings,omitempty"`
|
Mappings []*ContentManifestPayload_FileMapping `protobuf:"bytes,1,rep,name=mappings" json:"mappings,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestPayload) Reset() { *m = ContentManifestPayload{} }
|
func (m *ContentManifestPayload) Reset() { *m = ContentManifestPayload{} }
|
||||||
func (m *ContentManifestPayload) String() string { return proto.CompactTextString(m) }
|
func (m *ContentManifestPayload) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ContentManifestPayload) ProtoMessage() {}
|
func (*ContentManifestPayload) ProtoMessage() {}
|
||||||
func (*ContentManifestPayload) Descriptor() ([]byte, []int) {
|
func (*ContentManifestPayload) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{0} }
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentManifestPayload) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentManifestPayload.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentManifestPayload.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentManifestPayload proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentManifestPayload) GetMappings() []*ContentManifestPayload_FileMapping {
|
func (m *ContentManifestPayload) GetMappings() []*ContentManifestPayload_FileMapping {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
@@ -67,36 +38,16 @@ type ContentManifestPayload_FileMapping struct {
|
|||||||
ShaContent []byte `protobuf:"bytes,5,opt,name=sha_content" json:"sha_content,omitempty"`
|
ShaContent []byte `protobuf:"bytes,5,opt,name=sha_content" json:"sha_content,omitempty"`
|
||||||
Chunks []*ContentManifestPayload_FileMapping_ChunkData `protobuf:"bytes,6,rep,name=chunks" json:"chunks,omitempty"`
|
Chunks []*ContentManifestPayload_FileMapping_ChunkData `protobuf:"bytes,6,rep,name=chunks" json:"chunks,omitempty"`
|
||||||
Linktarget *string `protobuf:"bytes,7,opt,name=linktarget" json:"linktarget,omitempty"`
|
Linktarget *string `protobuf:"bytes,7,opt,name=linktarget" json:"linktarget,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping) Reset() { *m = ContentManifestPayload_FileMapping{} }
|
func (m *ContentManifestPayload_FileMapping) Reset() { *m = ContentManifestPayload_FileMapping{} }
|
||||||
func (m *ContentManifestPayload_FileMapping) String() string { return proto.CompactTextString(m) }
|
func (m *ContentManifestPayload_FileMapping) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ContentManifestPayload_FileMapping) ProtoMessage() {}
|
func (*ContentManifestPayload_FileMapping) ProtoMessage() {}
|
||||||
func (*ContentManifestPayload_FileMapping) Descriptor() ([]byte, []int) {
|
func (*ContentManifestPayload_FileMapping) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{0, 0}
|
return content_manifest_fileDescriptor0, []int{0, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentManifestPayload_FileMapping.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentManifestPayload_FileMapping.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentManifestPayload_FileMapping proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping) GetFilename() string {
|
func (m *ContentManifestPayload_FileMapping) GetFilename() string {
|
||||||
if m != nil && m.Filename != nil {
|
if m != nil && m.Filename != nil {
|
||||||
return *m.Filename
|
return *m.Filename
|
||||||
@@ -152,9 +103,7 @@ type ContentManifestPayload_FileMapping_ChunkData struct {
|
|||||||
Offset *uint64 `protobuf:"varint,3,opt,name=offset" json:"offset,omitempty"`
|
Offset *uint64 `protobuf:"varint,3,opt,name=offset" json:"offset,omitempty"`
|
||||||
CbOriginal *uint32 `protobuf:"varint,4,opt,name=cb_original" json:"cb_original,omitempty"`
|
CbOriginal *uint32 `protobuf:"varint,4,opt,name=cb_original" json:"cb_original,omitempty"`
|
||||||
CbCompressed *uint32 `protobuf:"varint,5,opt,name=cb_compressed" json:"cb_compressed,omitempty"`
|
CbCompressed *uint32 `protobuf:"varint,5,opt,name=cb_compressed" json:"cb_compressed,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) Reset() {
|
func (m *ContentManifestPayload_FileMapping_ChunkData) Reset() {
|
||||||
@@ -165,27 +114,9 @@ func (m *ContentManifestPayload_FileMapping_ChunkData) String() string {
|
|||||||
}
|
}
|
||||||
func (*ContentManifestPayload_FileMapping_ChunkData) ProtoMessage() {}
|
func (*ContentManifestPayload_FileMapping_ChunkData) ProtoMessage() {}
|
||||||
func (*ContentManifestPayload_FileMapping_ChunkData) Descriptor() ([]byte, []int) {
|
func (*ContentManifestPayload_FileMapping_ChunkData) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{0, 0, 0}
|
return content_manifest_fileDescriptor0, []int{0, 0, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentManifestPayload_FileMapping_ChunkData proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentManifestPayload_FileMapping_ChunkData) GetSha() []byte {
|
func (m *ContentManifestPayload_FileMapping_ChunkData) GetSha() []byte {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
return m.Sha
|
return m.Sha
|
||||||
@@ -231,35 +162,13 @@ type ContentManifestMetadata struct {
|
|||||||
UniqueChunks *uint32 `protobuf:"varint,7,opt,name=unique_chunks" json:"unique_chunks,omitempty"`
|
UniqueChunks *uint32 `protobuf:"varint,7,opt,name=unique_chunks" json:"unique_chunks,omitempty"`
|
||||||
CrcEncrypted *uint32 `protobuf:"varint,8,opt,name=crc_encrypted" json:"crc_encrypted,omitempty"`
|
CrcEncrypted *uint32 `protobuf:"varint,8,opt,name=crc_encrypted" json:"crc_encrypted,omitempty"`
|
||||||
CrcClear *uint32 `protobuf:"varint,9,opt,name=crc_clear" json:"crc_clear,omitempty"`
|
CrcClear *uint32 `protobuf:"varint,9,opt,name=crc_clear" json:"crc_clear,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestMetadata) Reset() { *m = ContentManifestMetadata{} }
|
func (m *ContentManifestMetadata) Reset() { *m = ContentManifestMetadata{} }
|
||||||
func (m *ContentManifestMetadata) String() string { return proto.CompactTextString(m) }
|
func (m *ContentManifestMetadata) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ContentManifestMetadata) ProtoMessage() {}
|
func (*ContentManifestMetadata) ProtoMessage() {}
|
||||||
func (*ContentManifestMetadata) Descriptor() ([]byte, []int) {
|
func (*ContentManifestMetadata) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{1} }
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentManifestMetadata) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentManifestMetadata.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentManifestMetadata.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestMetadata) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentManifestMetadata.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestMetadata) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentManifestMetadata.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestMetadata) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentManifestMetadata.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentManifestMetadata proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentManifestMetadata) GetDepotId() uint32 {
|
func (m *ContentManifestMetadata) GetDepotId() uint32 {
|
||||||
if m != nil && m.DepotId != nil {
|
if m != nil && m.DepotId != nil {
|
||||||
@@ -326,35 +235,13 @@ func (m *ContentManifestMetadata) GetCrcClear() uint32 {
|
|||||||
|
|
||||||
type ContentManifestSignature struct {
|
type ContentManifestSignature struct {
|
||||||
Signature []byte `protobuf:"bytes,1,opt,name=signature" json:"signature,omitempty"`
|
Signature []byte `protobuf:"bytes,1,opt,name=signature" json:"signature,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ContentManifestSignature) Reset() { *m = ContentManifestSignature{} }
|
func (m *ContentManifestSignature) Reset() { *m = ContentManifestSignature{} }
|
||||||
func (m *ContentManifestSignature) String() string { return proto.CompactTextString(m) }
|
func (m *ContentManifestSignature) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ContentManifestSignature) ProtoMessage() {}
|
func (*ContentManifestSignature) ProtoMessage() {}
|
||||||
func (*ContentManifestSignature) Descriptor() ([]byte, []int) {
|
func (*ContentManifestSignature) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{2} }
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentManifestSignature) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentManifestSignature.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentManifestSignature.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestSignature) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentManifestSignature.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestSignature) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentManifestSignature.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentManifestSignature) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentManifestSignature.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentManifestSignature proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentManifestSignature) GetSignature() []byte {
|
func (m *ContentManifestSignature) GetSignature() []byte {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
@@ -363,184 +250,40 @@ func (m *ContentManifestSignature) GetSignature() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type ContentDeltaChunks struct {
|
|
||||||
DepotId *uint32 `protobuf:"varint,1,opt,name=depot_id" json:"depot_id,omitempty"`
|
|
||||||
ManifestIdSource *uint64 `protobuf:"varint,2,opt,name=manifest_id_source" json:"manifest_id_source,omitempty"`
|
|
||||||
ManifestIdTarget *uint64 `protobuf:"varint,3,opt,name=manifest_id_target" json:"manifest_id_target,omitempty"`
|
|
||||||
DeltaChunks []*ContentDeltaChunks_DeltaChunk `protobuf:"bytes,4,rep,name=deltaChunks" json:"deltaChunks,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) Reset() { *m = ContentDeltaChunks{} }
|
|
||||||
func (m *ContentDeltaChunks) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ContentDeltaChunks) ProtoMessage() {}
|
|
||||||
func (*ContentDeltaChunks) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentDeltaChunks.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentDeltaChunks.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentDeltaChunks proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) GetDepotId() uint32 {
|
|
||||||
if m != nil && m.DepotId != nil {
|
|
||||||
return *m.DepotId
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) GetManifestIdSource() uint64 {
|
|
||||||
if m != nil && m.ManifestIdSource != nil {
|
|
||||||
return *m.ManifestIdSource
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) GetManifestIdTarget() uint64 {
|
|
||||||
if m != nil && m.ManifestIdTarget != nil {
|
|
||||||
return *m.ManifestIdTarget
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks) GetDeltaChunks() []*ContentDeltaChunks_DeltaChunk {
|
|
||||||
if m != nil {
|
|
||||||
return m.DeltaChunks
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type ContentDeltaChunks_DeltaChunk struct {
|
|
||||||
ShaSource []byte `protobuf:"bytes,1,opt,name=sha_source" json:"sha_source,omitempty"`
|
|
||||||
ShaTarget []byte `protobuf:"bytes,2,opt,name=sha_target" json:"sha_target,omitempty"`
|
|
||||||
SizeOriginal *uint32 `protobuf:"varint,3,opt,name=size_original" json:"size_original,omitempty"`
|
|
||||||
PatchMethod *uint32 `protobuf:"varint,4,opt,name=patch_method" json:"patch_method,omitempty"`
|
|
||||||
Chunk []byte `protobuf:"bytes,5,opt,name=chunk" json:"chunk,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) Reset() { *m = ContentDeltaChunks_DeltaChunk{} }
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*ContentDeltaChunks_DeltaChunk) ProtoMessage() {}
|
|
||||||
func (*ContentDeltaChunks_DeltaChunk) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_e3cda137a29253ba, []int{3, 0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks_DeltaChunk.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks_DeltaChunk.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_ContentDeltaChunks_DeltaChunk.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_ContentDeltaChunks_DeltaChunk.Size(m)
|
|
||||||
}
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_ContentDeltaChunks_DeltaChunk.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_ContentDeltaChunks_DeltaChunk proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) GetShaSource() []byte {
|
|
||||||
if m != nil {
|
|
||||||
return m.ShaSource
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) GetShaTarget() []byte {
|
|
||||||
if m != nil {
|
|
||||||
return m.ShaTarget
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) GetSizeOriginal() uint32 {
|
|
||||||
if m != nil && m.SizeOriginal != nil {
|
|
||||||
return *m.SizeOriginal
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) GetPatchMethod() uint32 {
|
|
||||||
if m != nil && m.PatchMethod != nil {
|
|
||||||
return *m.PatchMethod
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ContentDeltaChunks_DeltaChunk) GetChunk() []byte {
|
|
||||||
if m != nil {
|
|
||||||
return m.Chunk
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterType((*ContentManifestPayload)(nil), "ContentManifestPayload")
|
proto.RegisterType((*ContentManifestPayload)(nil), "ContentManifestPayload")
|
||||||
proto.RegisterType((*ContentManifestPayload_FileMapping)(nil), "ContentManifestPayload.FileMapping")
|
proto.RegisterType((*ContentManifestPayload_FileMapping)(nil), "ContentManifestPayload.FileMapping")
|
||||||
proto.RegisterType((*ContentManifestPayload_FileMapping_ChunkData)(nil), "ContentManifestPayload.FileMapping.ChunkData")
|
proto.RegisterType((*ContentManifestPayload_FileMapping_ChunkData)(nil), "ContentManifestPayload.FileMapping.ChunkData")
|
||||||
proto.RegisterType((*ContentManifestMetadata)(nil), "ContentManifestMetadata")
|
proto.RegisterType((*ContentManifestMetadata)(nil), "ContentManifestMetadata")
|
||||||
proto.RegisterType((*ContentManifestSignature)(nil), "ContentManifestSignature")
|
proto.RegisterType((*ContentManifestSignature)(nil), "ContentManifestSignature")
|
||||||
proto.RegisterType((*ContentDeltaChunks)(nil), "ContentDeltaChunks")
|
|
||||||
proto.RegisterType((*ContentDeltaChunks_DeltaChunk)(nil), "ContentDeltaChunks.DeltaChunk")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("content_manifest.proto", fileDescriptor_e3cda137a29253ba) }
|
var content_manifest_fileDescriptor0 = []byte{
|
||||||
|
// 409 bytes of a gzipped FileDescriptorProto
|
||||||
var fileDescriptor_e3cda137a29253ba = []byte{
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x91, 0xbd, 0x8e, 0xd4, 0x30,
|
||||||
// 508 bytes of a gzipped FileDescriptorProto
|
0x14, 0x85, 0xc9, 0xfc, 0x26, 0x37, 0x09, 0x5a, 0xbc, 0xb0, 0x58, 0x43, 0x83, 0x96, 0x66, 0x9b,
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x8e, 0xd3, 0x30,
|
0x4d, 0x81, 0x44, 0x49, 0xc3, 0x22, 0x44, 0x33, 0x12, 0x12, 0x0f, 0x10, 0x5d, 0x1c, 0x27, 0x6b,
|
||||||
0x10, 0xc7, 0x49, 0xbf, 0x3b, 0x6d, 0x50, 0xf1, 0xb2, 0x8b, 0x55, 0x24, 0x54, 0x95, 0x4b, 0x2f,
|
0x4d, 0x62, 0x07, 0xdb, 0x29, 0x96, 0x8a, 0x17, 0xe1, 0x0d, 0x91, 0x78, 0x05, 0x6c, 0x27, 0x99,
|
||||||
0x9b, 0x03, 0x88, 0x23, 0x17, 0x76, 0x85, 0xb8, 0x54, 0x42, 0xe2, 0x01, 0x2c, 0xd7, 0x76, 0x53,
|
0x1d, 0x8d, 0x28, 0x28, 0xcf, 0xf1, 0xb5, 0xcf, 0x77, 0x8f, 0xe1, 0x8a, 0x29, 0x69, 0xb9, 0xb4,
|
||||||
0xab, 0x89, 0x1d, 0x6c, 0xe7, 0xb0, 0x9c, 0xb8, 0xf0, 0x18, 0xbc, 0x21, 0x12, 0xaf, 0x80, 0xec,
|
0x65, 0x87, 0x52, 0xd4, 0xdc, 0xd8, 0xa2, 0xd7, 0xca, 0xaa, 0xeb, 0x3f, 0x0b, 0xb8, 0xba, 0x1b,
|
||||||
0x38, 0x4d, 0x55, 0xf6, 0xb0, 0xb7, 0xcc, 0x47, 0x3c, 0xbf, 0xf9, 0xcf, 0x1f, 0x6e, 0x98, 0x56,
|
0x8f, 0xf6, 0xd3, 0xc9, 0x17, 0x7c, 0x68, 0x15, 0x56, 0xe4, 0x1d, 0xc4, 0x1d, 0xf6, 0xbd, 0x90,
|
||||||
0x4e, 0x28, 0x47, 0x4a, 0xaa, 0xe4, 0x5e, 0x58, 0x97, 0x55, 0x46, 0x3b, 0xbd, 0xfe, 0xdb, 0x83,
|
0x8d, 0xa1, 0xd1, 0xeb, 0xe5, 0x4d, 0xfa, 0xf6, 0x4d, 0xf1, 0xef, 0xd1, 0xe2, 0x93, 0x68, 0xf9,
|
||||||
0x9b, 0xbb, 0xa6, 0xb4, 0x8d, 0x95, 0xaf, 0xf4, 0xa1, 0xd0, 0x94, 0xa3, 0x0f, 0x30, 0x29, 0x69,
|
0x7e, 0x9c, 0xdd, 0xfd, 0x5a, 0x40, 0x7a, 0xa2, 0xc9, 0x05, 0xc4, 0xb5, 0x93, 0x12, 0x3b, 0xee,
|
||||||
0x55, 0x49, 0x95, 0x5b, 0x9c, 0xac, 0xfa, 0x9b, 0xd9, 0xbb, 0xb7, 0xd9, 0xe3, 0xad, 0xd9, 0x67,
|
0x9e, 0x89, 0x6e, 0x12, 0x92, 0xc1, 0xca, 0x88, 0x1f, 0x9c, 0x2e, 0x9c, 0x5a, 0x91, 0x1c, 0xd6,
|
||||||
0x59, 0x88, 0x6d, 0xd3, 0xbb, 0xfc, 0xdd, 0x83, 0xd9, 0x59, 0x8c, 0x16, 0x30, 0xd9, 0xcb, 0x42,
|
0x75, 0x8b, 0x2e, 0x63, 0xe9, 0x64, 0x4e, 0x9e, 0x43, 0x66, 0xee, 0xb1, 0x3c, 0x5e, 0x59, 0x39,
|
||||||
0x28, 0x5a, 0x0a, 0x9c, 0xac, 0x92, 0xcd, 0x14, 0xcd, 0x61, 0x60, 0xe5, 0x0f, 0x81, 0x7b, 0xab,
|
0x37, 0x23, 0x97, 0x90, 0x7a, 0x77, 0x5a, 0x82, 0xae, 0x83, 0xf9, 0x1e, 0x36, 0xec, 0x7e, 0x90,
|
||||||
0x64, 0x33, 0x40, 0x29, 0x0c, 0xf7, 0x05, 0xcd, 0x2d, 0xee, 0xaf, 0x92, 0x4d, 0x8a, 0x5e, 0xc2,
|
0x07, 0x43, 0x37, 0x01, 0xef, 0xf6, 0x3f, 0xf0, 0x8a, 0x3b, 0x7f, 0xe3, 0x23, 0x5a, 0x24, 0x04,
|
||||||
0xdc, 0x1e, 0x28, 0x39, 0xfd, 0x32, 0x58, 0x25, 0x9b, 0x39, 0xba, 0x82, 0x99, 0xcf, 0xc6, 0x25,
|
0xa0, 0x15, 0xf2, 0x60, 0x51, 0x37, 0xdc, 0xd2, 0xad, 0x47, 0xdb, 0x21, 0x24, 0x8f, 0x03, 0x29,
|
||||||
0xf0, 0x30, 0x24, 0x3f, 0xc2, 0x88, 0x1d, 0x6a, 0x75, 0xb4, 0x78, 0x14, 0xf0, 0x6e, 0x9f, 0x80,
|
0x2c, 0x5d, 0x68, 0x80, 0xce, 0xbc, 0x60, 0x9a, 0x05, 0xe6, 0x2d, 0x79, 0x0a, 0x1b, 0x55, 0xd7,
|
||||||
0x97, 0xdd, 0xf9, 0x3f, 0xee, 0xa9, 0xa3, 0x08, 0x01, 0x14, 0x52, 0x1d, 0x1d, 0x35, 0xb9, 0x70,
|
0xc6, 0x5d, 0x5b, 0x86, 0x1d, 0x1c, 0x1e, 0xfb, 0x56, 0x2a, 0x2d, 0x1a, 0x21, 0xb1, 0x0d, 0xcc,
|
||||||
0x78, 0xec, 0xd1, 0x96, 0x14, 0xa6, 0x5d, 0xc3, 0x0c, 0xfa, 0xf6, 0x40, 0x03, 0xf4, 0xdc, 0x07,
|
0x39, 0x79, 0x01, 0xb9, 0x33, 0x99, 0xea, 0x7a, 0xcd, 0x8d, 0xe1, 0x55, 0xa0, 0xce, 0xaf, 0x7f,
|
||||||
0xcc, 0xb0, 0xc0, 0x3c, 0x46, 0xcf, 0x61, 0xa4, 0xf7, 0x7b, 0x2b, 0x5c, 0x80, 0x1e, 0x78, 0x3c,
|
0x47, 0xf0, 0xf2, 0x8c, 0x73, 0xcf, 0x2d, 0x56, 0x3e, 0xd1, 0x75, 0x55, 0xf1, 0x5e, 0xd9, 0x52,
|
||||||
0xb6, 0x23, 0xda, 0xc8, 0x5c, 0x2a, 0x5a, 0x04, 0xe6, 0x14, 0x5d, 0x43, 0xca, 0x76, 0x84, 0xe9,
|
0x54, 0x21, 0x36, 0xd4, 0xd1, 0x88, 0xea, 0xf8, 0x6b, 0x53, 0x67, 0xfe, 0x69, 0xcd, 0xd1, 0x0a,
|
||||||
0xb2, 0x32, 0xc2, 0x5a, 0xc1, 0x03, 0x75, 0xba, 0xfe, 0x93, 0xc0, 0xab, 0x0b, 0xce, 0xad, 0x70,
|
0x25, 0x4b, 0x2b, 0x5c, 0x4b, 0x63, 0x77, 0xaf, 0xe0, 0x72, 0xee, 0xcd, 0x94, 0x5c, 0x32, 0xfd,
|
||||||
0x94, 0xfb, 0x89, 0x0b, 0x98, 0x70, 0x51, 0x69, 0x47, 0x24, 0x0f, 0x63, 0x83, 0x1c, 0xb9, 0xe4,
|
0xd0, 0x5b, 0x97, 0xeb, 0x71, 0x62, 0x42, 0xe1, 0xc2, 0xe1, 0x54, 0xc2, 0x1c, 0x1e, 0x41, 0xd7,
|
||||||
0xa7, 0xab, 0x45, 0xcd, 0xfc, 0xd3, 0x46, 0x50, 0x27, 0xb5, 0x22, 0x4e, 0x96, 0x22, 0x6a, 0xf7,
|
0xe1, 0xb5, 0x1d, 0x90, 0xf9, 0xe4, 0x84, 0x76, 0x33, 0x27, 0x0d, 0x52, 0x7c, 0x1f, 0x78, 0x39,
|
||||||
0x1a, 0xae, 0x5a, 0xdd, 0x2c, 0x11, 0x8a, 0x99, 0x87, 0xca, 0x09, 0x1e, 0x70, 0x26, 0x08, 0xc3,
|
0x55, 0xbd, 0x3d, 0xee, 0xa6, 0xd9, 0x49, 0x46, 0x1c, 0xec, 0x67, 0x90, 0x78, 0x9b, 0xb5, 0x1c,
|
||||||
0x82, 0xed, 0x08, 0x97, 0xf6, 0xd8, 0x81, 0x0e, 0xc3, 0x6b, 0x4b, 0x40, 0x6d, 0xe5, 0x8c, 0x76,
|
0x35, 0x4d, 0xc2, 0xba, 0xb7, 0x40, 0xcf, 0xb6, 0xfd, 0x2a, 0x1a, 0x89, 0x76, 0xd0, 0xdc, 0x8f,
|
||||||
0xd4, 0x4e, 0xaa, 0x95, 0xfc, 0x5e, 0x0b, 0x12, 0xa5, 0x1e, 0x9f, 0x76, 0x33, 0xec, 0x6c, 0xc6,
|
0x9b, 0x59, 0x8c, 0x35, 0x7f, 0x58, 0x7f, 0x8e, 0x7e, 0x46, 0x4f, 0xfe, 0x06, 0x00, 0x00, 0xff,
|
||||||
0x24, 0xa4, 0x5f, 0xc0, 0xd4, 0xa7, 0x59, 0x21, 0xa8, 0xc1, 0xd3, 0xb0, 0xee, 0x2d, 0xe0, 0x8b,
|
0xff, 0xc6, 0x87, 0xdb, 0xe6, 0xaf, 0x02, 0x00, 0x00,
|
||||||
0x6d, 0xbf, 0xc9, 0x5c, 0x51, 0x57, 0x1b, 0xe1, 0xdb, 0x6d, 0x1b, 0x34, 0x32, 0xaf, 0x7f, 0xf5,
|
|
||||||
0x00, 0xc5, 0xfe, 0x7b, 0x51, 0x38, 0x1a, 0xae, 0x61, 0x1f, 0x11, 0x66, 0x09, 0xa8, 0x15, 0x85,
|
|
||||||
0x48, 0x4e, 0xac, 0xae, 0x0d, 0x6b, 0x2d, 0x75, 0x51, 0x8b, 0x17, 0x6e, 0x4e, 0xf5, 0x1e, 0x66,
|
|
||||||
0xbc, 0x7b, 0x18, 0x0f, 0x82, 0x73, 0xde, 0x64, 0xff, 0xcf, 0xcc, 0xba, 0xef, 0x65, 0x05, 0xd0,
|
|
||||||
0x45, 0xde, 0x38, 0xde, 0x8c, 0x71, 0x64, 0x63, 0x8f, 0x98, 0x8b, 0xa3, 0x7a, 0x21, 0x77, 0x0d,
|
|
||||||
0xa9, 0xf7, 0x79, 0x27, 0xf7, 0xc9, 0xe1, 0x15, 0x75, 0xec, 0x40, 0x4a, 0xe1, 0x0e, 0x9a, 0x47,
|
|
||||||
0xb7, 0xa4, 0x30, 0x0c, 0x0a, 0x37, 0xde, 0xfe, 0x34, 0xfc, 0x92, 0xfc, 0x4c, 0x9e, 0xfd, 0x0b,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x00, 0x92, 0x22, 0xd7, 0xb7, 0x03, 0x00, 0x00,
|
|
||||||
}
|
}
|
||||||
|
|||||||
2244
vendor/github.com/Philipp15b/go-steam/protocol/steamlang/enums.go
generated
vendored
2244
vendor/github.com/Philipp15b/go-steam/protocol/steamlang/enums.go
generated
vendored
File diff suppressed because it is too large
Load Diff
142
vendor/github.com/Philipp15b/go-steam/protocol/steamlang/messages.go
generated
vendored
142
vendor/github.com/Philipp15b/go-steam/protocol/steamlang/messages.go
generated
vendored
@@ -723,7 +723,7 @@ func (d *MsgClientNewLoginKeyAccepted) Deserialize(r io.Reader) error {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
MsgClientLogon_ObfuscationMask uint32 = 0xBAADF00D
|
MsgClientLogon_ObfuscationMask uint32 = 0xBAADF00D
|
||||||
MsgClientLogon_CurrentProtocol uint32 = 65580
|
MsgClientLogon_CurrentProtocol uint32 = 65579
|
||||||
MsgClientLogon_ProtocolVerMajorMask uint32 = 0xFFFF0000
|
MsgClientLogon_ProtocolVerMajorMask uint32 = 0xFFFF0000
|
||||||
MsgClientLogon_ProtocolVerMinorMask uint32 = 0xFFFF
|
MsgClientLogon_ProtocolVerMinorMask uint32 = 0xFFFF
|
||||||
MsgClientLogon_ProtocolVerMinorMinGameServers uint16 = 4
|
MsgClientLogon_ProtocolVerMinorMinGameServers uint16 = 4
|
||||||
@@ -744,11 +744,7 @@ const (
|
|||||||
MsgClientLogon_ProtocolVerMinorMinForMachineAuth uint16 = 33
|
MsgClientLogon_ProtocolVerMinorMinForMachineAuth uint16 = 33
|
||||||
MsgClientLogon_ProtocolVerMinorMinForSessionIDLastAnon uint16 = 36
|
MsgClientLogon_ProtocolVerMinorMinForSessionIDLastAnon uint16 = 36
|
||||||
MsgClientLogon_ProtocolVerMinorMinForEnhancedAppList uint16 = 40
|
MsgClientLogon_ProtocolVerMinorMinForEnhancedAppList uint16 = 40
|
||||||
MsgClientLogon_ProtocolVerMinorMinForSteamGuardNotificationUI uint16 = 41
|
|
||||||
MsgClientLogon_ProtocolVerMinorMinForProtoBufServiceModuleCalls uint16 = 42
|
|
||||||
MsgClientLogon_ProtocolVerMinorMinForGzipMultiMessages uint16 = 43
|
MsgClientLogon_ProtocolVerMinorMinForGzipMultiMessages uint16 = 43
|
||||||
MsgClientLogon_ProtocolVerMinorMinForNewVoiceCallAuthorize uint16 = 44
|
|
||||||
MsgClientLogon_ProtocolVerMinorMinForClientInstanceIDs uint16 = 44
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MsgClientLogon struct {
|
type MsgClientLogon struct {
|
||||||
@@ -1980,6 +1976,64 @@ func (d *MsgClientChatRoomInfo) Deserialize(r io.Reader) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MsgClientGetNumberOfCurrentPlayers struct {
|
||||||
|
GameID uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMsgClientGetNumberOfCurrentPlayers() *MsgClientGetNumberOfCurrentPlayers {
|
||||||
|
return &MsgClientGetNumberOfCurrentPlayers{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayers) GetEMsg() EMsg {
|
||||||
|
return EMsg_ClientGetNumberOfCurrentPlayers
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayers) Serialize(w io.Writer) error {
|
||||||
|
var err error
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.GameID)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayers) Deserialize(r io.Reader) error {
|
||||||
|
var err error
|
||||||
|
d.GameID, err = rwu.ReadUint64(r)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type MsgClientGetNumberOfCurrentPlayersResponse struct {
|
||||||
|
Result EResult
|
||||||
|
NumPlayers uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMsgClientGetNumberOfCurrentPlayersResponse() *MsgClientGetNumberOfCurrentPlayersResponse {
|
||||||
|
return &MsgClientGetNumberOfCurrentPlayersResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayersResponse) GetEMsg() EMsg {
|
||||||
|
return EMsg_ClientGetNumberOfCurrentPlayersResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayersResponse) Serialize(w io.Writer) error {
|
||||||
|
var err error
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.Result)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.NumPlayers)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientGetNumberOfCurrentPlayersResponse) Deserialize(r io.Reader) error {
|
||||||
|
var err error
|
||||||
|
t0, err := rwu.ReadInt32(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.Result = EResult(t0)
|
||||||
|
d.NumPlayers, err = rwu.ReadUint32(r)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
type MsgClientSetIgnoreFriend struct {
|
type MsgClientSetIgnoreFriend struct {
|
||||||
MySteamId steamid.SteamId
|
MySteamId steamid.SteamId
|
||||||
SteamIdFriend steamid.SteamId
|
SteamIdFriend steamid.SteamId
|
||||||
@@ -2025,7 +2079,7 @@ func (d *MsgClientSetIgnoreFriend) Deserialize(r io.Reader) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MsgClientSetIgnoreFriendResponse struct {
|
type MsgClientSetIgnoreFriendResponse struct {
|
||||||
FriendId steamid.SteamId
|
Unknown uint64
|
||||||
Result EResult
|
Result EResult
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2039,7 +2093,7 @@ func (d *MsgClientSetIgnoreFriendResponse) GetEMsg() EMsg {
|
|||||||
|
|
||||||
func (d *MsgClientSetIgnoreFriendResponse) Serialize(w io.Writer) error {
|
func (d *MsgClientSetIgnoreFriendResponse) Serialize(w io.Writer) error {
|
||||||
var err error
|
var err error
|
||||||
err = binary.Write(w, binary.LittleEndian, d.FriendId)
|
err = binary.Write(w, binary.LittleEndian, d.Unknown)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -2049,13 +2103,12 @@ func (d *MsgClientSetIgnoreFriendResponse) Serialize(w io.Writer) error {
|
|||||||
|
|
||||||
func (d *MsgClientSetIgnoreFriendResponse) Deserialize(r io.Reader) error {
|
func (d *MsgClientSetIgnoreFriendResponse) Deserialize(r io.Reader) error {
|
||||||
var err error
|
var err error
|
||||||
t0, err := rwu.ReadUint64(r)
|
d.Unknown, err = rwu.ReadUint64(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.FriendId = steamid.SteamId(t0)
|
t0, err := rwu.ReadInt32(r)
|
||||||
t1, err := rwu.ReadInt32(r)
|
d.Result = EResult(t0)
|
||||||
d.Result = EResult(t1)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2173,6 +2226,73 @@ func (d *MsgClientLogOnResponse) Deserialize(r io.Reader) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MsgClientSendGuestPass struct {
|
||||||
|
GiftId uint64
|
||||||
|
GiftType uint8
|
||||||
|
AccountId uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMsgClientSendGuestPass() *MsgClientSendGuestPass {
|
||||||
|
return &MsgClientSendGuestPass{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPass) GetEMsg() EMsg {
|
||||||
|
return EMsg_ClientSendGuestPass
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPass) Serialize(w io.Writer) error {
|
||||||
|
var err error
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.GiftId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.GiftType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.AccountId)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPass) Deserialize(r io.Reader) error {
|
||||||
|
var err error
|
||||||
|
d.GiftId, err = rwu.ReadUint64(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.GiftType, err = rwu.ReadUint8(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.AccountId, err = rwu.ReadUint32(r)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type MsgClientSendGuestPassResponse struct {
|
||||||
|
Result EResult
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMsgClientSendGuestPassResponse() *MsgClientSendGuestPassResponse {
|
||||||
|
return &MsgClientSendGuestPassResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPassResponse) GetEMsg() EMsg {
|
||||||
|
return EMsg_ClientSendGuestPassResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPassResponse) Serialize(w io.Writer) error {
|
||||||
|
var err error
|
||||||
|
err = binary.Write(w, binary.LittleEndian, d.Result)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *MsgClientSendGuestPassResponse) Deserialize(r io.Reader) error {
|
||||||
|
var err error
|
||||||
|
t0, err := rwu.ReadInt32(r)
|
||||||
|
d.Result = EResult(t0)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
type MsgClientServerUnavailable struct {
|
type MsgClientServerUnavailable struct {
|
||||||
JobidSent uint64
|
JobidSent uint64
|
||||||
EMsgSent uint32
|
EMsgSent uint32
|
||||||
|
|||||||
225
vendor/github.com/Philipp15b/go-steam/servers.go
generated
vendored
225
vendor/github.com/Philipp15b/go-steam/servers.go
generated
vendored
@@ -8,116 +8,135 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// CMServers contains a list of worlwide servers
|
// CMServers contains a list of worlwide servers
|
||||||
var CMServers = []string{
|
var CMServers = [][]string{
|
||||||
"155.133.248.52:27018",
|
{ // North American Servers
|
||||||
"162.254.197.40:27018",
|
// Chicago
|
||||||
"162.254.197.180:27019",
|
"162.254.193.44:27018",
|
||||||
"155.133.248.50:27019",
|
"162.254.193.44:27019",
|
||||||
"162.254.197.181:27017",
|
"162.254.193.44:27020",
|
||||||
"162.254.197.42:27019",
|
"162.254.193.44:27021",
|
||||||
"162.254.197.180:27017",
|
"162.254.193.45:27017",
|
||||||
"162.254.197.181:27018",
|
"162.254.193.45:27018",
|
||||||
"162.254.197.42:27018",
|
"162.254.193.45:27019",
|
||||||
"155.133.248.50:27017",
|
"162.254.193.45:27021",
|
||||||
"155.133.248.52:27019",
|
"162.254.193.46:27017",
|
||||||
"155.133.248.51:27019",
|
"162.254.193.46:27018",
|
||||||
"155.133.248.53:27019",
|
"162.254.193.46:27019",
|
||||||
"155.133.248.51:27017",
|
"162.254.193.46:27020",
|
||||||
"155.133.248.53:27017",
|
"162.254.193.46:27021",
|
||||||
"155.133.248.52:27017",
|
"162.254.193.47:27019",
|
||||||
"155.133.248.50:27018",
|
"162.254.193.47:27020",
|
||||||
"162.254.197.180:27018",
|
|
||||||
"162.254.197.40:27017",
|
// Ashburn
|
||||||
"162.254.197.40:27019",
|
"208.78.164.9:27017",
|
||||||
"162.254.197.42:27017",
|
"208.78.164.9:27018",
|
||||||
"162.254.197.181:27019",
|
"208.78.164.9:27019",
|
||||||
"155.133.248.53:27018",
|
"208.78.164.10:27017",
|
||||||
"155.133.248.51:27018",
|
"208.78.164.10:27018",
|
||||||
"146.66.152.11:27017",
|
"208.78.164.10:27019",
|
||||||
"146.66.152.10:27019",
|
"208.78.164.11:27017",
|
||||||
|
"208.78.164.11:27018",
|
||||||
|
"208.78.164.11:27019",
|
||||||
|
"208.78.164.12:27017",
|
||||||
|
"208.78.164.12:27018",
|
||||||
|
"208.78.164.12:27019",
|
||||||
|
"208.78.164.13:27017",
|
||||||
|
"208.78.164.13:27018",
|
||||||
|
"208.78.164.13:27019",
|
||||||
|
"208.78.164.14:27017",
|
||||||
|
"208.78.164.14:27018",
|
||||||
|
"208.78.164.14:27019",
|
||||||
|
},
|
||||||
|
{ // Europe Servers
|
||||||
|
// Luxembourg
|
||||||
"146.66.152.10:27017",
|
"146.66.152.10:27017",
|
||||||
"146.66.152.10:27018",
|
"146.66.152.10:27018",
|
||||||
"146.66.152.11:27019",
|
"146.66.152.10:27019",
|
||||||
"162.254.198.133:27017",
|
"146.66.152.10:27020",
|
||||||
"162.254.198.133:27018",
|
"146.66.152.11:27017",
|
||||||
"162.254.198.130:27019",
|
|
||||||
"162.254.198.130:27017",
|
|
||||||
"162.254.198.132:27018",
|
|
||||||
"162.254.198.130:27018",
|
|
||||||
"162.254.198.132:27017",
|
|
||||||
"162.254.198.132:27019",
|
|
||||||
"162.254.198.131:27019",
|
|
||||||
"162.254.198.131:27017",
|
|
||||||
"146.66.152.11:27018",
|
"146.66.152.11:27018",
|
||||||
"162.254.198.131:27018",
|
"146.66.152.11:27019",
|
||||||
"162.254.198.133:27019",
|
"146.66.152.11:27020",
|
||||||
"185.25.182.77:27017",
|
|
||||||
"185.25.182.76:27018",
|
// Poland
|
||||||
"185.25.182.76:27019",
|
"155.133.242.8:27017",
|
||||||
"185.25.182.77:27018",
|
"155.133.242.8:27018",
|
||||||
"185.25.182.76:27017",
|
"155.133.242.8:27019",
|
||||||
"185.25.182.77:27019",
|
"155.133.242.8:27020",
|
||||||
"162.254.196.67:27019",
|
"155.133.242.9:27017",
|
||||||
"162.254.196.67:27018",
|
"155.133.242.9:27018",
|
||||||
"162.254.196.83:27018",
|
"155.133.242.9:27019",
|
||||||
"162.254.196.84:27018",
|
"155.133.242.9:27020",
|
||||||
"162.254.196.83:27017",
|
|
||||||
"162.254.196.84:27017",
|
// Vienna
|
||||||
"162.254.196.68:27019",
|
"146.66.155.8:27017",
|
||||||
"162.254.196.68:27017",
|
"146.66.155.8:27018",
|
||||||
"162.254.196.84:27019",
|
"146.66.155.8:27019",
|
||||||
"162.254.196.67:27017",
|
"146.66.155.8:27020",
|
||||||
"162.254.196.83:27019",
|
"185.25.182.10:27017",
|
||||||
"162.254.196.68:27018",
|
"185.25.182.10:27018",
|
||||||
"146.66.155.101:27017",
|
"185.25.182.10:27019",
|
||||||
"146.66.155.101:27018",
|
"185.25.182.10:27020",
|
||||||
"146.66.155.100:27017",
|
|
||||||
"146.66.155.100:27018",
|
// London
|
||||||
"146.66.155.101:27019",
|
"162.254.196.40:27017",
|
||||||
"146.66.155.100:27019",
|
"162.254.196.40:27018",
|
||||||
"155.133.230.50:27017",
|
"162.254.196.40:27019",
|
||||||
"155.133.230.34:27018",
|
"162.254.196.40:27020",
|
||||||
"155.133.230.34:27017",
|
"162.254.196.40:27021",
|
||||||
"155.133.230.50:27019",
|
"162.254.196.41:27017",
|
||||||
"155.133.230.34:27019",
|
"162.254.196.41:27018",
|
||||||
"155.133.230.50:27018",
|
"162.254.196.41:27019",
|
||||||
"162.254.192.100:27017",
|
"162.254.196.41:27020",
|
||||||
"162.254.192.108:27017",
|
"162.254.196.41:27021",
|
||||||
"155.133.246.68:27017",
|
"162.254.196.42:27017",
|
||||||
"155.133.246.68:27018",
|
"162.254.196.42:27018",
|
||||||
"155.133.246.68:27019",
|
"162.254.196.42:27019",
|
||||||
"155.133.246.69:27019",
|
"162.254.196.42:27020",
|
||||||
"155.133.246.69:27017",
|
"162.254.196.42:27021",
|
||||||
"155.133.246.69:27018",
|
"162.254.196.43:27017",
|
||||||
"162.254.192.108:27018",
|
"162.254.196.43:27018",
|
||||||
"162.254.192.101:27018",
|
"162.254.196.43:27019",
|
||||||
"162.254.192.101:27019",
|
"162.254.196.43:27020",
|
||||||
"162.254.192.109:27018",
|
"162.254.196.43:27021",
|
||||||
"162.254.192.100:27018",
|
|
||||||
"162.254.192.109:27017",
|
// Stockholm
|
||||||
"162.254.192.109:27019",
|
"185.25.180.14:27017",
|
||||||
"162.254.192.108:27019",
|
"185.25.180.14:27018",
|
||||||
"162.254.192.101:27017",
|
"185.25.180.14:27019",
|
||||||
"162.254.192.100:27019",
|
"185.25.180.14:27020",
|
||||||
"162.254.193.46:27019",
|
"185.25.180.15:27017",
|
||||||
"162.254.193.6:27018",
|
"185.25.180.15:27018",
|
||||||
"162.254.193.47:27018",
|
"185.25.180.15:27019",
|
||||||
"162.254.193.6:27019",
|
"185.25.180.15:27020",
|
||||||
"162.254.193.7:27018",
|
},
|
||||||
"162.254.193.7:27017",
|
|
||||||
"162.254.193.7:27019",
|
|
||||||
"162.254.193.47:27017",
|
|
||||||
"162.254.193.47:27019",
|
|
||||||
"162.254.193.46:27018",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRandomCM returns a random server from a built-in IP list.
|
// GetRandomCM returns back a random server anywhere
|
||||||
//
|
|
||||||
// Prefer Client.Connect(), which uses IPs from the Steam Directory,
|
|
||||||
// which is always more up-to-date.
|
|
||||||
func GetRandomCM() *netutil.PortAddr {
|
func GetRandomCM() *netutil.PortAddr {
|
||||||
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
addr := netutil.ParsePortAddr(CMServers[rng.Int31n(int32(len(CMServers)))])
|
servers := append(CMServers[0], CMServers[1]...)
|
||||||
|
addr := netutil.ParsePortAddr(servers[rng.Int31n(int32(len(servers)))])
|
||||||
|
if addr == nil {
|
||||||
|
panic("invalid address in CMServers slice")
|
||||||
|
}
|
||||||
|
return addr
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRandomNorthAmericaCM returns back a random server in north america
|
||||||
|
func GetRandomNorthAmericaCM() *netutil.PortAddr {
|
||||||
|
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
addr := netutil.ParsePortAddr(CMServers[0][rng.Int31n(int32(len(CMServers[0])))])
|
||||||
|
if addr == nil {
|
||||||
|
panic("invalid address in CMServers slice")
|
||||||
|
}
|
||||||
|
return addr
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRandomEuropeCM returns back a random server in europe
|
||||||
|
func GetRandomEuropeCM() *netutil.PortAddr {
|
||||||
|
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
addr := netutil.ParsePortAddr(CMServers[1][rng.Int31n(int32(len(CMServers[1])))])
|
||||||
if addr == nil {
|
if addr == nil {
|
||||||
panic("invalid address in CMServers slice")
|
panic("invalid address in CMServers slice")
|
||||||
}
|
}
|
||||||
|
|||||||
48
vendor/github.com/Philipp15b/go-steam/social.go
generated
vendored
48
vendor/github.com/Philipp15b/go-steam/social.go
generated
vendored
@@ -3,10 +3,7 @@ package steam
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
"encoding/hex"
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
. "github.com/Philipp15b/go-steam/protocol"
|
. "github.com/Philipp15b/go-steam/protocol"
|
||||||
. "github.com/Philipp15b/go-steam/protocol/protobuf"
|
. "github.com/Philipp15b/go-steam/protocol/protobuf"
|
||||||
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
||||||
@@ -14,6 +11,9 @@ import (
|
|||||||
"github.com/Philipp15b/go-steam/socialcache"
|
"github.com/Philipp15b/go-steam/socialcache"
|
||||||
. "github.com/Philipp15b/go-steam/steamid"
|
. "github.com/Philipp15b/go-steam/steamid"
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
"io"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Provides access to social aspects of Steam.
|
// Provides access to social aspects of Steam.
|
||||||
@@ -21,7 +21,7 @@ type Social struct {
|
|||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
|
|
||||||
name string
|
name string
|
||||||
avatar []byte
|
avatar string
|
||||||
personaState EPersonaState
|
personaState EPersonaState
|
||||||
|
|
||||||
Friends *socialcache.FriendsList
|
Friends *socialcache.FriendsList
|
||||||
@@ -41,7 +41,7 @@ func newSocial(client *Client) *Social {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Gets the local user's avatar
|
// Gets the local user's avatar
|
||||||
func (s *Social) GetAvatar() []byte {
|
func (s *Social) GetAvatar() string {
|
||||||
s.mutex.RLock()
|
s.mutex.RLock()
|
||||||
defer s.mutex.RUnlock()
|
defer s.mutex.RUnlock()
|
||||||
return s.avatar
|
return s.avatar
|
||||||
@@ -156,7 +156,7 @@ func (s *Social) RequestProfileInfo(id SteamId) {
|
|||||||
|
|
||||||
// Requests all offline messages and marks them as read
|
// Requests all offline messages and marks them as read
|
||||||
func (s *Social) RequestOfflineMessages() {
|
func (s *Social) RequestOfflineMessages() {
|
||||||
s.client.Write(NewClientMsgProtobuf(EMsg_ClientChatGetFriendMessageHistoryForOfflineMessages, &CMsgClientChatGetFriendMessageHistoryForOfflineMessages{}))
|
s.client.Write(NewClientMsgProtobuf(EMsg_ClientFSGetFriendMessageHistoryForOfflineMessages, &CMsgClientFSGetFriendMessageHistoryForOfflineMessages{}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempts to join a chat room
|
// Attempts to join a chat room
|
||||||
@@ -307,7 +307,7 @@ func (s *Social) handlePersonaState(packet *Packet) {
|
|||||||
if friend.GetPlayerName() != "" {
|
if friend.GetPlayerName() != "" {
|
||||||
s.name = friend.GetPlayerName()
|
s.name = friend.GetPlayerName()
|
||||||
}
|
}
|
||||||
avatar := friend.GetAvatarHash()
|
avatar := hex.EncodeToString(friend.GetAvatarHash())
|
||||||
if ValidAvatar(avatar) {
|
if ValidAvatar(avatar) {
|
||||||
s.avatar = avatar
|
s.avatar = avatar
|
||||||
}
|
}
|
||||||
@@ -319,7 +319,7 @@ func (s *Social) handlePersonaState(packet *Packet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence {
|
if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence {
|
||||||
avatar := friend.GetAvatarHash()
|
avatar := hex.EncodeToString(friend.GetAvatarHash())
|
||||||
if ValidAvatar(avatar) {
|
if ValidAvatar(avatar) {
|
||||||
s.Friends.SetAvatar(id, avatar)
|
s.Friends.SetAvatar(id, avatar)
|
||||||
}
|
}
|
||||||
@@ -338,7 +338,7 @@ func (s *Social) handlePersonaState(packet *Packet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence {
|
if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence {
|
||||||
avatar := friend.GetAvatarHash()
|
avatar := hex.EncodeToString(friend.GetAvatarHash())
|
||||||
if ValidAvatar(avatar) {
|
if ValidAvatar(avatar) {
|
||||||
s.Groups.SetAvatar(id, avatar)
|
s.Groups.SetAvatar(id, avatar)
|
||||||
}
|
}
|
||||||
@@ -358,7 +358,7 @@ func (s *Social) handlePersonaState(packet *Packet) {
|
|||||||
SourceSteamId: SteamId(friend.GetSteamidSource()),
|
SourceSteamId: SteamId(friend.GetSteamidSource()),
|
||||||
GameDataBlob: friend.GetGameDataBlob(),
|
GameDataBlob: friend.GetGameDataBlob(),
|
||||||
Name: friend.GetPlayerName(),
|
Name: friend.GetPlayerName(),
|
||||||
Avatar: friend.GetAvatarHash(),
|
Avatar: hex.EncodeToString(friend.GetAvatarHash()),
|
||||||
LastLogOff: friend.GetLastLogoff(),
|
LastLogOff: friend.GetLastLogoff(),
|
||||||
LastLogOn: friend.GetLastLogon(),
|
LastLogOn: friend.GetLastLogon(),
|
||||||
ClanRank: friend.GetClanRank(),
|
ClanRank: friend.GetClanRank(),
|
||||||
@@ -366,6 +366,8 @@ func (s *Social) handlePersonaState(packet *Packet) {
|
|||||||
OnlineSessionInstances: friend.GetOnlineSessionInstances(),
|
OnlineSessionInstances: friend.GetOnlineSessionInstances(),
|
||||||
PublishedSessionId: friend.GetPublishedInstanceId(),
|
PublishedSessionId: friend.GetPublishedInstanceId(),
|
||||||
PersonaSetByUser: friend.GetPersonaSetByUser(),
|
PersonaSetByUser: friend.GetPersonaSetByUser(),
|
||||||
|
FacebookName: friend.GetFacebookName(),
|
||||||
|
FacebookId: friend.GetFacebookId(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,10 +376,10 @@ func (s *Social) handleClanState(packet *Packet) {
|
|||||||
body := new(CMsgClientClanState)
|
body := new(CMsgClientClanState)
|
||||||
packet.ReadProtoMsg(body)
|
packet.ReadProtoMsg(body)
|
||||||
var name string
|
var name string
|
||||||
var avatar []byte
|
var avatar string
|
||||||
if body.GetNameInfo() != nil {
|
if body.GetNameInfo() != nil {
|
||||||
name = body.GetNameInfo().GetClanName()
|
name = body.GetNameInfo().GetClanName()
|
||||||
avatar = body.GetNameInfo().GetShaAvatar()
|
avatar = hex.EncodeToString(body.GetNameInfo().GetShaAvatar())
|
||||||
}
|
}
|
||||||
var totalCount, onlineCount, chattingCount, ingameCount uint32
|
var totalCount, onlineCount, chattingCount, ingameCount uint32
|
||||||
if body.GetUserCounts() != nil {
|
if body.GetUserCounts() != nil {
|
||||||
@@ -406,13 +408,18 @@ func (s *Social) handleClanState(packet *Packet) {
|
|||||||
JustPosted: announce.GetJustPosted(),
|
JustPosted: announce.GetJustPosted(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
flags := EClientPersonaStateFlag(body.GetMUnStatusFlags())
|
||||||
//Add stuff to group
|
//Add stuff to group
|
||||||
clanid := SteamId(body.GetSteamidClan())
|
clanid := SteamId(body.GetSteamidClan())
|
||||||
if body.NameInfo != nil {
|
if (flags & EClientPersonaStateFlag_PlayerName) == EClientPersonaStateFlag_PlayerName {
|
||||||
info := body.NameInfo
|
if name != "" {
|
||||||
s.Groups.SetName(clanid, info.GetClanName())
|
s.Groups.SetName(clanid, name)
|
||||||
s.Groups.SetAvatar(clanid, info.GetShaAvatar())
|
}
|
||||||
|
}
|
||||||
|
if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence {
|
||||||
|
if ValidAvatar(avatar) {
|
||||||
|
s.Groups.SetAvatar(clanid, avatar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if body.GetUserCounts() != nil {
|
if body.GetUserCounts() != nil {
|
||||||
s.Groups.SetMemberTotalCount(clanid, totalCount)
|
s.Groups.SetMemberTotalCount(clanid, totalCount)
|
||||||
@@ -421,7 +428,8 @@ func (s *Social) handleClanState(packet *Packet) {
|
|||||||
s.Groups.SetMemberInGameCount(clanid, ingameCount)
|
s.Groups.SetMemberInGameCount(clanid, ingameCount)
|
||||||
}
|
}
|
||||||
s.client.Emit(&ClanStateEvent{
|
s.client.Emit(&ClanStateEvent{
|
||||||
ClanId: clanid,
|
ClandId: clanid,
|
||||||
|
StateFlags: EClientPersonaStateFlag(body.GetMUnStatusFlags()),
|
||||||
AccountFlags: EAccountFlags(body.GetClanAccountFlags()),
|
AccountFlags: EAccountFlags(body.GetClanAccountFlags()),
|
||||||
ClanName: name,
|
ClanName: name,
|
||||||
Avatar: avatar,
|
Avatar: avatar,
|
||||||
@@ -598,7 +606,7 @@ func (s *Social) handleProfileInfoResponse(packet *Packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Social) handleFriendMessageHistoryResponse(packet *Packet) {
|
func (s *Social) handleFriendMessageHistoryResponse(packet *Packet) {
|
||||||
body := new(CMsgClientChatGetFriendMessageHistoryResponse)
|
body := new(CMsgClientFSGetFriendMessageHistoryResponse)
|
||||||
packet.ReadProtoMsg(body)
|
packet.ReadProtoMsg(body)
|
||||||
steamid := SteamId(body.GetSteamid())
|
steamid := SteamId(body.GetSteamid())
|
||||||
for _, message := range body.GetMessages() {
|
for _, message := range body.GetMessages() {
|
||||||
|
|||||||
12
vendor/github.com/Philipp15b/go-steam/social_events.go
generated
vendored
12
vendor/github.com/Philipp15b/go-steam/social_events.go
generated
vendored
@@ -1,10 +1,9 @@
|
|||||||
package steam
|
package steam
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
||||||
. "github.com/Philipp15b/go-steam/steamid"
|
. "github.com/Philipp15b/go-steam/steamid"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FriendsListEvent struct{}
|
type FriendsListEvent struct{}
|
||||||
@@ -42,7 +41,7 @@ type PersonaStateEvent struct {
|
|||||||
SourceSteamId SteamId `json:",string"`
|
SourceSteamId SteamId `json:",string"`
|
||||||
GameDataBlob []byte
|
GameDataBlob []byte
|
||||||
Name string
|
Name string
|
||||||
Avatar []byte
|
Avatar string
|
||||||
LastLogOff uint32
|
LastLogOff uint32
|
||||||
LastLogOn uint32
|
LastLogOn uint32
|
||||||
ClanRank uint32
|
ClanRank uint32
|
||||||
@@ -50,14 +49,17 @@ type PersonaStateEvent struct {
|
|||||||
OnlineSessionInstances uint32
|
OnlineSessionInstances uint32
|
||||||
PublishedSessionId uint32
|
PublishedSessionId uint32
|
||||||
PersonaSetByUser bool
|
PersonaSetByUser bool
|
||||||
|
FacebookName string
|
||||||
|
FacebookId uint64 `json:",string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fired when a clan's state has been changed
|
// Fired when a clan's state has been changed
|
||||||
type ClanStateEvent struct {
|
type ClanStateEvent struct {
|
||||||
ClanId SteamId `json:",string"`
|
ClandId SteamId `json:",string"`
|
||||||
|
StateFlags EClientPersonaStateFlag
|
||||||
AccountFlags EAccountFlags
|
AccountFlags EAccountFlags
|
||||||
ClanName string
|
ClanName string
|
||||||
Avatar []byte
|
Avatar string
|
||||||
MemberTotalCount uint32
|
MemberTotalCount uint32
|
||||||
MemberOnlineCount uint32
|
MemberOnlineCount uint32
|
||||||
MemberChattingCount uint32
|
MemberChattingCount uint32
|
||||||
|
|||||||
7
vendor/github.com/Philipp15b/go-steam/socialcache/friends.go
generated
vendored
7
vendor/github.com/Philipp15b/go-steam/socialcache/friends.go
generated
vendored
@@ -2,10 +2,9 @@ package socialcache
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"sync"
|
|
||||||
|
|
||||||
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
||||||
. "github.com/Philipp15b/go-steam/steamid"
|
. "github.com/Philipp15b/go-steam/steamid"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Friends list is a thread safe map
|
// Friends list is a thread safe map
|
||||||
@@ -77,7 +76,7 @@ func (list *FriendsList) SetName(id SteamId, name string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (list *FriendsList) SetAvatar(id SteamId, hash []byte) {
|
func (list *FriendsList) SetAvatar(id SteamId, hash string) {
|
||||||
list.mutex.Lock()
|
list.mutex.Lock()
|
||||||
defer list.mutex.Unlock()
|
defer list.mutex.Unlock()
|
||||||
if val, ok := list.byId[id]; ok {
|
if val, ok := list.byId[id]; ok {
|
||||||
@@ -137,7 +136,7 @@ func (list *FriendsList) SetGameName(id SteamId, name string) {
|
|||||||
type Friend struct {
|
type Friend struct {
|
||||||
SteamId SteamId `json:",string"`
|
SteamId SteamId `json:",string"`
|
||||||
Name string
|
Name string
|
||||||
Avatar []byte
|
Avatar string
|
||||||
Relationship EFriendRelationship
|
Relationship EFriendRelationship
|
||||||
PersonaState EPersonaState
|
PersonaState EPersonaState
|
||||||
PersonaStateFlags EPersonaStateFlag
|
PersonaStateFlags EPersonaStateFlag
|
||||||
|
|||||||
7
vendor/github.com/Philipp15b/go-steam/socialcache/groups.go
generated
vendored
7
vendor/github.com/Philipp15b/go-steam/socialcache/groups.go
generated
vendored
@@ -2,10 +2,9 @@ package socialcache
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"sync"
|
|
||||||
|
|
||||||
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
. "github.com/Philipp15b/go-steam/protocol/steamlang"
|
||||||
. "github.com/Philipp15b/go-steam/steamid"
|
. "github.com/Philipp15b/go-steam/steamid"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Groups list is a thread safe map
|
// Groups list is a thread safe map
|
||||||
@@ -79,7 +78,7 @@ func (list *GroupsList) SetName(id SteamId, name string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (list *GroupsList) SetAvatar(id SteamId, hash []byte) {
|
func (list *GroupsList) SetAvatar(id SteamId, hash string) {
|
||||||
list.mutex.Lock()
|
list.mutex.Lock()
|
||||||
defer list.mutex.Unlock()
|
defer list.mutex.Unlock()
|
||||||
id = id.ChatToClan()
|
id = id.ChatToClan()
|
||||||
@@ -137,7 +136,7 @@ func (list *GroupsList) SetMemberInGameCount(id SteamId, count uint32) {
|
|||||||
type Group struct {
|
type Group struct {
|
||||||
SteamId SteamId `json:",string"`
|
SteamId SteamId `json:",string"`
|
||||||
Name string
|
Name string
|
||||||
Avatar []byte
|
Avatar string
|
||||||
Relationship EClanRelationship
|
Relationship EClanRelationship
|
||||||
MemberTotalCount uint32
|
MemberTotalCount uint32
|
||||||
MemberOnlineCount uint32
|
MemberOnlineCount uint32
|
||||||
|
|||||||
10
vendor/github.com/Rhymen/go-whatsapp/README.md
generated
vendored
10
vendor/github.com/Rhymen/go-whatsapp/README.md
generated
vendored
@@ -50,25 +50,17 @@ func (myHandler) HandleImageMessage(message whatsapp.ImageMessage) {
|
|||||||
fmt.Println(message)
|
fmt.Println(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (myHandler) HandleDocumentMessage(message whatsapp.DocumentMessage) {
|
|
||||||
fmt.Println(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (myHandler) HandleVideoMessage(message whatsapp.VideoMessage) {
|
func (myHandler) HandleVideoMessage(message whatsapp.VideoMessage) {
|
||||||
fmt.Println(message)
|
fmt.Println(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (myHandler) HandleAudioMessage(message whatsapp.AudioMessage){
|
|
||||||
fmt.Println(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (myHandler) HandleJsonMessage(message string) {
|
func (myHandler) HandleJsonMessage(message string) {
|
||||||
fmt.Println(message)
|
fmt.Println(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
wac.AddHandler(myHandler{})
|
wac.AddHandler(myHandler{})
|
||||||
```
|
```
|
||||||
The message handlers are all optional, you don't need to implement anything but the error handler to implement the interface. The ImageMessage, VideoMessage, AudioMessage and DocumentMessage provide a Download function to get the media data.
|
The message handlers are all optional, you don't need to implement anything but the error handler to implement the interface. The ImageMessage and VideoMessage provide a Download function to get the media data.
|
||||||
|
|
||||||
### Sending text messages
|
### Sending text messages
|
||||||
```go
|
```go
|
||||||
|
|||||||
4429
vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go
generated
vendored
4429
vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
389
vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto
generated
vendored
389
vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto
generated
vendored
@@ -1,94 +1,22 @@
|
|||||||
syntax = "proto2";
|
syntax = "proto2";
|
||||||
package proto;
|
package proto;
|
||||||
|
|
||||||
message HydratedQuickReplyButton {
|
message FingerprintData {
|
||||||
optional string displayText = 1;
|
optional string publicKey = 1;
|
||||||
optional string buttonId = 2;
|
optional string identifier = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message HydratedURLButton {
|
message CombinedFingerprint {
|
||||||
optional string displayText = 1;
|
optional uint32 version = 1;
|
||||||
optional string url = 2;
|
optional FingerprintData localFingerprint = 2;
|
||||||
|
optional FingerprintData remoteFingerprint = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message HydratedCallButton {
|
message MessageKey {
|
||||||
optional string displayText = 1;
|
optional string remoteJid = 1;
|
||||||
optional string phoneNumber = 2;
|
optional bool fromMe = 2;
|
||||||
}
|
optional string id = 3;
|
||||||
|
optional string participant = 4;
|
||||||
message HydratedTemplateButton {
|
|
||||||
oneof hydratedButton {
|
|
||||||
HydratedQuickReplyButton quickReplyButton = 1;
|
|
||||||
HydratedURLButton urlButton = 2;
|
|
||||||
HydratedCallButton callButton = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message QuickReplyButton {
|
|
||||||
optional HighlyStructuredMessage displayText = 1;
|
|
||||||
optional string buttonId = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message URLButton {
|
|
||||||
optional HighlyStructuredMessage displayText = 1;
|
|
||||||
optional HighlyStructuredMessage url = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message CallButton {
|
|
||||||
optional HighlyStructuredMessage displayText = 1;
|
|
||||||
optional HighlyStructuredMessage phoneNumber = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message TemplateButton {
|
|
||||||
oneof button {
|
|
||||||
QuickReplyButton quickReplyButton = 1;
|
|
||||||
URLButton urlButton = 2;
|
|
||||||
CallButton callButton = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Location {
|
|
||||||
optional double degreesLatitude = 1;
|
|
||||||
optional double degreesLongitude = 2;
|
|
||||||
optional string name = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Point {
|
|
||||||
optional double x = 3;
|
|
||||||
optional double y = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message InteractiveAnnotation {
|
|
||||||
repeated Point polygonVertices = 1;
|
|
||||||
oneof action {
|
|
||||||
Location location = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message AdReplyInfo {
|
|
||||||
optional string advertiserName = 1;
|
|
||||||
enum AD_REPLY_INFO_MEDIATYPE {
|
|
||||||
NONE = 0;
|
|
||||||
IMAGE = 1;
|
|
||||||
VIDEO = 2;
|
|
||||||
}
|
|
||||||
optional AD_REPLY_INFO_MEDIATYPE mediaType = 2;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
|
||||||
optional string caption = 17;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ContextInfo {
|
|
||||||
optional string stanzaId = 1;
|
|
||||||
optional string participant = 2;
|
|
||||||
optional Message quotedMessage = 3;
|
|
||||||
optional string remoteJid = 4;
|
|
||||||
repeated string mentionedJid = 15;
|
|
||||||
optional string conversionSource = 18;
|
|
||||||
optional bytes conversionData = 19;
|
|
||||||
optional uint32 conversionDelaySeconds = 20;
|
|
||||||
optional uint32 forwardingScore = 21;
|
|
||||||
optional bool isForwarded = 22;
|
|
||||||
optional AdReplyInfo quotedAd = 23;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SenderKeyDistributionMessage {
|
message SenderKeyDistributionMessage {
|
||||||
@@ -108,12 +36,10 @@ message ImageMessage {
|
|||||||
optional bytes fileEncSha256 = 9;
|
optional bytes fileEncSha256 = 9;
|
||||||
repeated InteractiveAnnotation interactiveAnnotations = 10;
|
repeated InteractiveAnnotation interactiveAnnotations = 10;
|
||||||
optional string directPath = 11;
|
optional string directPath = 11;
|
||||||
optional int64 mediaKeyTimestamp = 12;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
optional bytes jpegThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
optional bytes firstScanSidecar = 18;
|
optional bytes firstScanSidecar = 18;
|
||||||
optional uint32 firstScanLength = 19;
|
optional uint32 firstScanLength = 19;
|
||||||
optional uint32 experimentGroupId = 20;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContactMessage {
|
message ContactMessage {
|
||||||
@@ -140,7 +66,7 @@ message ExtendedTextMessage {
|
|||||||
optional string title = 6;
|
optional string title = 6;
|
||||||
optional fixed32 textArgb = 7;
|
optional fixed32 textArgb = 7;
|
||||||
optional fixed32 backgroundArgb = 8;
|
optional fixed32 backgroundArgb = 8;
|
||||||
enum EXTENDED_TEXT_MESSAGE_FONTTYPE {
|
enum FONTTYPE {
|
||||||
SANS_SERIF = 0;
|
SANS_SERIF = 0;
|
||||||
SERIF = 1;
|
SERIF = 1;
|
||||||
NORICAN_REGULAR = 2;
|
NORICAN_REGULAR = 2;
|
||||||
@@ -148,12 +74,7 @@ message ExtendedTextMessage {
|
|||||||
BEBASNEUE_REGULAR = 4;
|
BEBASNEUE_REGULAR = 4;
|
||||||
OSWALD_HEAVY = 5;
|
OSWALD_HEAVY = 5;
|
||||||
}
|
}
|
||||||
optional EXTENDED_TEXT_MESSAGE_FONTTYPE font = 9;
|
optional FONTTYPE font = 9;
|
||||||
enum EXTENDED_TEXT_MESSAGE_PREVIEWTYPE {
|
|
||||||
NONE = 0;
|
|
||||||
VIDEO = 1;
|
|
||||||
}
|
|
||||||
optional EXTENDED_TEXT_MESSAGE_PREVIEWTYPE previewType = 10;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
optional bytes jpegThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
}
|
}
|
||||||
@@ -169,7 +90,6 @@ message DocumentMessage {
|
|||||||
optional string fileName = 8;
|
optional string fileName = 8;
|
||||||
optional bytes fileEncSha256 = 9;
|
optional bytes fileEncSha256 = 9;
|
||||||
optional string directPath = 10;
|
optional string directPath = 10;
|
||||||
optional int64 mediaKeyTimestamp = 11;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
optional bytes jpegThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
}
|
}
|
||||||
@@ -184,7 +104,6 @@ message AudioMessage {
|
|||||||
optional bytes mediaKey = 7;
|
optional bytes mediaKey = 7;
|
||||||
optional bytes fileEncSha256 = 8;
|
optional bytes fileEncSha256 = 8;
|
||||||
optional string directPath = 9;
|
optional string directPath = 9;
|
||||||
optional int64 mediaKeyTimestamp = 10;
|
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
optional bytes streamingSidecar = 18;
|
optional bytes streamingSidecar = 18;
|
||||||
}
|
}
|
||||||
@@ -203,16 +122,15 @@ message VideoMessage {
|
|||||||
optional bytes fileEncSha256 = 11;
|
optional bytes fileEncSha256 = 11;
|
||||||
repeated InteractiveAnnotation interactiveAnnotations = 12;
|
repeated InteractiveAnnotation interactiveAnnotations = 12;
|
||||||
optional string directPath = 13;
|
optional string directPath = 13;
|
||||||
optional int64 mediaKeyTimestamp = 14;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
optional bytes jpegThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
optional bytes streamingSidecar = 18;
|
optional bytes streamingSidecar = 18;
|
||||||
enum VIDEO_MESSAGE_ATTRIBUTION {
|
enum ATTRIBUTION {
|
||||||
NONE = 0;
|
NONE = 0;
|
||||||
GIPHY = 1;
|
GIPHY = 1;
|
||||||
TENOR = 2;
|
TENOR = 2;
|
||||||
}
|
}
|
||||||
optional VIDEO_MESSAGE_ATTRIBUTION gifAttribution = 19;
|
optional ATTRIBUTION gifAttribution = 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Call {
|
message Call {
|
||||||
@@ -226,10 +144,10 @@ message Chat {
|
|||||||
|
|
||||||
message ProtocolMessage {
|
message ProtocolMessage {
|
||||||
optional MessageKey key = 1;
|
optional MessageKey key = 1;
|
||||||
enum PROTOCOL_MESSAGE_TYPE {
|
enum TYPE {
|
||||||
REVOKE = 0;
|
REVOKE = 0;
|
||||||
}
|
}
|
||||||
optional PROTOCOL_MESSAGE_TYPE type = 2;
|
optional TYPE type = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContactsArrayMessage {
|
message ContactsArrayMessage {
|
||||||
@@ -244,7 +162,7 @@ message HSMCurrency {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message HSMDateTimeComponent {
|
message HSMDateTimeComponent {
|
||||||
enum HSM_DATE_TIME_COMPONENT_DAYOFWEEKTYPE {
|
enum DAYOFWEEKTYPE {
|
||||||
MONDAY = 1;
|
MONDAY = 1;
|
||||||
TUESDAY = 2;
|
TUESDAY = 2;
|
||||||
WEDNESDAY = 3;
|
WEDNESDAY = 3;
|
||||||
@@ -253,17 +171,17 @@ message HSMDateTimeComponent {
|
|||||||
SATURDAY = 6;
|
SATURDAY = 6;
|
||||||
SUNDAY = 7;
|
SUNDAY = 7;
|
||||||
}
|
}
|
||||||
optional HSM_DATE_TIME_COMPONENT_DAYOFWEEKTYPE dayOfWeek = 1;
|
optional DAYOFWEEKTYPE dayOfWeek = 1;
|
||||||
optional uint32 year = 2;
|
optional uint32 year = 2;
|
||||||
optional uint32 month = 3;
|
optional uint32 month = 3;
|
||||||
optional uint32 dayOfMonth = 4;
|
optional uint32 dayOfMonth = 4;
|
||||||
optional uint32 hour = 5;
|
optional uint32 hour = 5;
|
||||||
optional uint32 minute = 6;
|
optional uint32 minute = 6;
|
||||||
enum HSM_DATE_TIME_COMPONENT_CALENDARTYPE {
|
enum CALENDARTYPE {
|
||||||
GREGORIAN = 1;
|
GREGORIAN = 1;
|
||||||
SOLAR_HIJRI = 2;
|
SOLAR_HIJRI = 2;
|
||||||
}
|
}
|
||||||
optional HSM_DATE_TIME_COMPONENT_CALENDARTYPE calendar = 7;
|
optional CALENDARTYPE calendar = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message HSMDateTimeUnixEpoch {
|
message HSMDateTimeUnixEpoch {
|
||||||
@@ -292,29 +210,17 @@ message HighlyStructuredMessage {
|
|||||||
optional string fallbackLg = 4;
|
optional string fallbackLg = 4;
|
||||||
optional string fallbackLc = 5;
|
optional string fallbackLc = 5;
|
||||||
repeated HSMLocalizableParameter localizableParams = 6;
|
repeated HSMLocalizableParameter localizableParams = 6;
|
||||||
optional string deterministicLg = 7;
|
|
||||||
optional string deterministicLc = 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SendPaymentMessage {
|
message SendPaymentMessage {
|
||||||
optional Message noteMessage = 2;
|
optional Message noteMessage = 2;
|
||||||
optional MessageKey requestMessageKey = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message RequestPaymentMessage {
|
message RequestPaymentMessage {
|
||||||
optional Message noteMessage = 4;
|
|
||||||
optional string currencyCodeIso4217 = 1;
|
optional string currencyCodeIso4217 = 1;
|
||||||
optional uint64 amount1000 = 2;
|
optional uint64 amount1000 = 2;
|
||||||
optional string requestFrom = 3;
|
optional string requestFrom = 3;
|
||||||
optional int64 expiryTimestamp = 5;
|
optional Message noteMessage = 4;
|
||||||
}
|
|
||||||
|
|
||||||
message DeclinePaymentRequestMessage {
|
|
||||||
optional MessageKey key = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message CancelPaymentRequestMessage {
|
|
||||||
optional MessageKey key = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message LiveLocationMessage {
|
message LiveLocationMessage {
|
||||||
@@ -325,7 +231,6 @@ message LiveLocationMessage {
|
|||||||
optional uint32 degreesClockwiseFromMagneticNorth = 5;
|
optional uint32 degreesClockwiseFromMagneticNorth = 5;
|
||||||
optional string caption = 6;
|
optional string caption = 6;
|
||||||
optional int64 sequenceNumber = 7;
|
optional int64 sequenceNumber = 7;
|
||||||
optional uint32 timeOffset = 8;
|
|
||||||
optional bytes jpegThumbnail = 16;
|
optional bytes jpegThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
}
|
}
|
||||||
@@ -340,77 +245,10 @@ message StickerMessage {
|
|||||||
optional uint32 width = 7;
|
optional uint32 width = 7;
|
||||||
optional string directPath = 8;
|
optional string directPath = 8;
|
||||||
optional uint64 fileLength = 9;
|
optional uint64 fileLength = 9;
|
||||||
optional int64 mediaKeyTimestamp = 10;
|
|
||||||
optional bytes pngThumbnail = 16;
|
optional bytes pngThumbnail = 16;
|
||||||
optional ContextInfo contextInfo = 17;
|
optional ContextInfo contextInfo = 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
message FourRowTemplate {
|
|
||||||
optional HighlyStructuredMessage content = 6;
|
|
||||||
optional HighlyStructuredMessage footer = 7;
|
|
||||||
repeated TemplateButton buttons = 8;
|
|
||||||
oneof title {
|
|
||||||
DocumentMessage documentMessage = 1;
|
|
||||||
HighlyStructuredMessage highlyStructuredMessage = 2;
|
|
||||||
ImageMessage imageMessage = 3;
|
|
||||||
VideoMessage videoMessage = 4;
|
|
||||||
LocationMessage locationMessage = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message HydratedFourRowTemplate {
|
|
||||||
optional string hydratedContentText = 6;
|
|
||||||
optional string hydratedFooterText = 7;
|
|
||||||
repeated HydratedTemplateButton hydratedButtons = 9;
|
|
||||||
oneof title {
|
|
||||||
DocumentMessage documentMessage = 1;
|
|
||||||
string hydratedTitleText = 2;
|
|
||||||
ImageMessage imageMessage = 3;
|
|
||||||
VideoMessage videoMessage = 4;
|
|
||||||
LocationMessage locationMessage = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message TemplateMessage {
|
|
||||||
oneof format {
|
|
||||||
FourRowTemplate fourRowTemplate = 1;
|
|
||||||
HydratedFourRowTemplate hydratedFourRowTemplate = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message TemplateButtonReplyMessage {
|
|
||||||
optional string selectedButtonId = 1;
|
|
||||||
repeated string selectedButtonDisplayText = 2;
|
|
||||||
optional ContextInfo contextInfo = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ProductSnapshot {
|
|
||||||
optional ImageMessage productImage = 1;
|
|
||||||
optional string productId = 2;
|
|
||||||
optional string title = 3;
|
|
||||||
optional string description = 4;
|
|
||||||
optional string currencyCode = 5;
|
|
||||||
optional int64 priceAmount1000 = 6;
|
|
||||||
optional string retailerId = 7;
|
|
||||||
optional string url = 8;
|
|
||||||
optional uint32 productImageCount = 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ProductMessage {
|
|
||||||
optional ProductSnapshot product = 1;
|
|
||||||
optional string businessOwnerJid = 2;
|
|
||||||
optional ContextInfo contextInfo = 17;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupInviteMessage {
|
|
||||||
optional string groupJid = 1;
|
|
||||||
optional string inviteCode = 2;
|
|
||||||
optional int64 inviteExpiration = 3;
|
|
||||||
optional string groupName = 4;
|
|
||||||
optional bytes jpegThumbnail = 5;
|
|
||||||
optional string caption = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Message {
|
message Message {
|
||||||
optional string conversation = 1;
|
optional string conversation = 1;
|
||||||
optional SenderKeyDistributionMessage senderKeyDistributionMessage = 2;
|
optional SenderKeyDistributionMessage senderKeyDistributionMessage = 2;
|
||||||
@@ -428,104 +266,47 @@ message Message {
|
|||||||
optional HighlyStructuredMessage highlyStructuredMessage = 14;
|
optional HighlyStructuredMessage highlyStructuredMessage = 14;
|
||||||
optional SenderKeyDistributionMessage fastRatchetKeySenderKeyDistributionMessage = 15;
|
optional SenderKeyDistributionMessage fastRatchetKeySenderKeyDistributionMessage = 15;
|
||||||
optional SendPaymentMessage sendPaymentMessage = 16;
|
optional SendPaymentMessage sendPaymentMessage = 16;
|
||||||
|
optional RequestPaymentMessage requestPaymentMessage = 17;
|
||||||
optional LiveLocationMessage liveLocationMessage = 18;
|
optional LiveLocationMessage liveLocationMessage = 18;
|
||||||
optional RequestPaymentMessage requestPaymentMessage = 22;
|
optional StickerMessage stickerMessage = 20;
|
||||||
optional DeclinePaymentRequestMessage declinePaymentRequestMessage = 23;
|
|
||||||
optional CancelPaymentRequestMessage cancelPaymentRequestMessage = 24;
|
|
||||||
optional TemplateMessage templateMessage = 25;
|
|
||||||
optional StickerMessage stickerMessage = 26;
|
|
||||||
optional ProductMessage productMessage = 27;
|
|
||||||
optional GroupInviteMessage groupInviteMessage = 28;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message MessageKey {
|
message ContextInfo {
|
||||||
optional string remoteJid = 1;
|
optional string stanzaId = 1;
|
||||||
optional bool fromMe = 2;
|
optional string participant = 2;
|
||||||
optional string id = 3;
|
repeated Message quotedMessage = 3;
|
||||||
optional string participant = 4;
|
optional string remoteJid = 4;
|
||||||
|
repeated string mentionedJid = 15;
|
||||||
|
optional string conversionSource = 18;
|
||||||
|
optional bytes conversionData = 19;
|
||||||
|
optional uint32 conversionDelaySeconds = 20;
|
||||||
|
optional bool isForwarded = 22;
|
||||||
|
reserved 16, 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
message WebFeatures {
|
message InteractiveAnnotation {
|
||||||
enum WEB_FEATURES_FLAG {
|
repeated Point polygonVertices = 1;
|
||||||
NOT_IMPLEMENTED = 0;
|
oneof action {
|
||||||
IMPLEMENTED = 1;
|
Location location = 2;
|
||||||
OPTIONAL = 2;
|
|
||||||
}
|
}
|
||||||
optional WEB_FEATURES_FLAG labelsDisplay = 1;
|
|
||||||
optional WEB_FEATURES_FLAG voipIndividualOutgoing = 2;
|
|
||||||
optional WEB_FEATURES_FLAG groupsV3 = 3;
|
|
||||||
optional WEB_FEATURES_FLAG groupsV3Create = 4;
|
|
||||||
optional WEB_FEATURES_FLAG changeNumberV2 = 5;
|
|
||||||
optional WEB_FEATURES_FLAG queryStatusV3Thumbnail = 6;
|
|
||||||
optional WEB_FEATURES_FLAG liveLocations = 7;
|
|
||||||
optional WEB_FEATURES_FLAG queryVname = 8;
|
|
||||||
optional WEB_FEATURES_FLAG voipIndividualIncoming = 9;
|
|
||||||
optional WEB_FEATURES_FLAG quickRepliesQuery = 10;
|
|
||||||
optional WEB_FEATURES_FLAG payments = 11;
|
|
||||||
optional WEB_FEATURES_FLAG stickerPackQuery = 12;
|
|
||||||
optional WEB_FEATURES_FLAG liveLocationsFinal = 13;
|
|
||||||
optional WEB_FEATURES_FLAG labelsEdit = 14;
|
|
||||||
optional WEB_FEATURES_FLAG mediaUpload = 15;
|
|
||||||
optional WEB_FEATURES_FLAG mediaUploadRichQuickReplies = 18;
|
|
||||||
optional WEB_FEATURES_FLAG vnameV2 = 19;
|
|
||||||
optional WEB_FEATURES_FLAG videoPlaybackUrl = 20;
|
|
||||||
optional WEB_FEATURES_FLAG statusRanking = 21;
|
|
||||||
optional WEB_FEATURES_FLAG voipIndividualVideo = 22;
|
|
||||||
optional WEB_FEATURES_FLAG thirdPartyStickers = 23;
|
|
||||||
optional WEB_FEATURES_FLAG frequentlyForwardedSetting = 24;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message TabletNotificationsInfo {
|
message Point {
|
||||||
optional uint64 timestamp = 2;
|
optional double x = 3;
|
||||||
optional uint32 unreadChats = 3;
|
optional double y = 4;
|
||||||
optional uint32 notifyMessageCount = 4;
|
|
||||||
repeated NotificationMessageInfo notifyMessage = 5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message NotificationMessageInfo {
|
message Location {
|
||||||
optional MessageKey key = 1;
|
optional double degreesLatitude = 1;
|
||||||
optional Message message = 2;
|
optional double degreesLongitude = 2;
|
||||||
optional uint64 messageTimestamp = 3;
|
optional string name = 3;
|
||||||
optional string participant = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message WebNotificationsInfo {
|
|
||||||
optional uint64 timestamp = 2;
|
|
||||||
optional uint32 unreadChats = 3;
|
|
||||||
optional uint32 notifyMessageCount = 4;
|
|
||||||
repeated WebMessageInfo notifyMessages = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message PaymentInfo {
|
|
||||||
optional uint64 amount1000 = 2;
|
|
||||||
optional string receiverJid = 3;
|
|
||||||
enum PAYMENT_INFO_STATUS {
|
|
||||||
UNKNOWN_STATUS = 0;
|
|
||||||
PROCESSING = 1;
|
|
||||||
SENT = 2;
|
|
||||||
NEED_TO_ACCEPT = 3;
|
|
||||||
COMPLETE = 4;
|
|
||||||
COULD_NOT_COMPLETE = 5;
|
|
||||||
REFUNDED = 6;
|
|
||||||
EXPIRED = 7;
|
|
||||||
REJECTED = 8;
|
|
||||||
CANCELLED = 9;
|
|
||||||
WAITING_FOR_PAYER = 10;
|
|
||||||
WAITING = 11;
|
|
||||||
}
|
|
||||||
optional PAYMENT_INFO_STATUS status = 4;
|
|
||||||
optional uint64 transactionTimestamp = 5;
|
|
||||||
optional MessageKey requestMessageKey = 6;
|
|
||||||
optional uint64 expiryTimestamp = 7;
|
|
||||||
optional bool futureproofed = 8;
|
|
||||||
optional string currency = 9;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message WebMessageInfo {
|
message WebMessageInfo {
|
||||||
required MessageKey key = 1;
|
required MessageKey key = 1;
|
||||||
optional Message message = 2;
|
optional Message message = 2;
|
||||||
optional uint64 messageTimestamp = 3;
|
optional uint64 messageTimestamp = 3;
|
||||||
enum WEB_MESSAGE_INFO_STATUS {
|
enum STATUS {
|
||||||
ERROR = 0;
|
ERROR = 0;
|
||||||
PENDING = 1;
|
PENDING = 1;
|
||||||
SERVER_ACK = 2;
|
SERVER_ACK = 2;
|
||||||
@@ -533,7 +314,7 @@ message WebMessageInfo {
|
|||||||
READ = 4;
|
READ = 4;
|
||||||
PLAYED = 5;
|
PLAYED = 5;
|
||||||
}
|
}
|
||||||
optional WEB_MESSAGE_INFO_STATUS status = 4;
|
optional STATUS status = 4 [default=PENDING];
|
||||||
optional string participant = 5;
|
optional string participant = 5;
|
||||||
optional bool ignore = 16;
|
optional bool ignore = 16;
|
||||||
optional bool starred = 17;
|
optional bool starred = 17;
|
||||||
@@ -543,7 +324,7 @@ message WebMessageInfo {
|
|||||||
optional bool multicast = 21;
|
optional bool multicast = 21;
|
||||||
optional bool urlText = 22;
|
optional bool urlText = 22;
|
||||||
optional bool urlNumber = 23;
|
optional bool urlNumber = 23;
|
||||||
enum WEB_MESSAGE_INFO_STUBTYPE {
|
enum STUBTYPE {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0;
|
||||||
REVOKE = 1;
|
REVOKE = 1;
|
||||||
CIPHERTEXT = 2;
|
CIPHERTEXT = 2;
|
||||||
@@ -588,39 +369,49 @@ message WebMessageInfo {
|
|||||||
CALL_MISSED_VIDEO = 41;
|
CALL_MISSED_VIDEO = 41;
|
||||||
INDIVIDUAL_CHANGE_NUMBER = 42;
|
INDIVIDUAL_CHANGE_NUMBER = 42;
|
||||||
GROUP_DELETE = 43;
|
GROUP_DELETE = 43;
|
||||||
GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE = 44;
|
|
||||||
CALL_MISSED_GROUP_VOICE = 45;
|
|
||||||
CALL_MISSED_GROUP_VIDEO = 46;
|
|
||||||
PAYMENT_CIPHERTEXT = 47;
|
|
||||||
PAYMENT_FUTUREPROOF = 48;
|
|
||||||
PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED = 49;
|
|
||||||
PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED = 50;
|
|
||||||
PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED = 51;
|
|
||||||
PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP = 52;
|
|
||||||
PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP = 53;
|
|
||||||
PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER = 54;
|
|
||||||
PAYMENT_ACTION_SEND_PAYMENT_REMINDER = 55;
|
|
||||||
PAYMENT_ACTION_SEND_PAYMENT_INVITATION = 56;
|
|
||||||
PAYMENT_ACTION_REQUEST_DECLINED = 57;
|
|
||||||
PAYMENT_ACTION_REQUEST_EXPIRED = 58;
|
|
||||||
PAYMENT_ACTION_REQUEST_CANCELLED = 59;
|
|
||||||
BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM = 60;
|
|
||||||
BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP = 61;
|
|
||||||
BIZ_INTRO_TOP = 62;
|
|
||||||
BIZ_INTRO_BOTTOM = 63;
|
|
||||||
BIZ_NAME_CHANGE = 64;
|
|
||||||
BIZ_MOVE_TO_CONSUMER_APP = 65;
|
|
||||||
BIZ_TWO_TIER_MIGRATION_TOP = 66;
|
|
||||||
BIZ_TWO_TIER_MIGRATION_BOTTOM = 67;
|
|
||||||
OVERSIZED = 68;
|
|
||||||
GROUP_CHANGE_NO_FREQUENTLY_FORWARDED = 69;
|
|
||||||
}
|
}
|
||||||
optional WEB_MESSAGE_INFO_STUBTYPE messageStubType = 24;
|
optional STUBTYPE messageStubType = 24;
|
||||||
optional bool clearMedia = 25;
|
optional bool clearMedia = 25;
|
||||||
repeated string messageStubParameters = 26;
|
repeated string messageStubParameters = 26;
|
||||||
optional uint32 duration = 27;
|
optional uint32 duration = 27;
|
||||||
repeated string labels = 28;
|
repeated string labels = 28;
|
||||||
optional PaymentInfo paymentInfo = 29;
|
}
|
||||||
optional LiveLocationMessage finalLiveLocation = 30;
|
|
||||||
optional PaymentInfo quotedPaymentInfo = 31;
|
message WebNotificationsInfo {
|
||||||
|
optional uint64 timestamp = 2;
|
||||||
|
optional uint32 unreadChats = 3;
|
||||||
|
optional uint32 notifyMessageCount = 4;
|
||||||
|
repeated Message notifyMessages = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message NotificationMessageInfo {
|
||||||
|
optional MessageKey key = 1;
|
||||||
|
optional Message message = 2;
|
||||||
|
optional uint64 messageTimestamp = 3;
|
||||||
|
optional string participant = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TabletNotificationsInfo {
|
||||||
|
optional uint64 timestamp = 2;
|
||||||
|
optional uint32 unreadChats = 3;
|
||||||
|
optional uint32 notifyMessageCount = 4;
|
||||||
|
repeated Message notifyMessage = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message WebFeatures {
|
||||||
|
enum FLAG {
|
||||||
|
NOT_IMPLEMENTED = 0;
|
||||||
|
IMPLEMENTED = 1;
|
||||||
|
OPTIONAL = 2;
|
||||||
|
}
|
||||||
|
optional FLAG labelsDisplay = 1;
|
||||||
|
optional FLAG voipIndividualOutgoing = 2;
|
||||||
|
optional FLAG groupsV3 = 3;
|
||||||
|
optional FLAG groupsV3Create = 4;
|
||||||
|
optional FLAG changeNumberV2 = 5;
|
||||||
|
optional FLAG queryStatusV3Thumbnail = 6;
|
||||||
|
optional FLAG liveLocations = 7;
|
||||||
|
optional FLAG queryVname = 8;
|
||||||
|
optional FLAG voipIndividualIncoming = 9;
|
||||||
|
optional FLAG quickRepliesQuery = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
183
vendor/github.com/Rhymen/go-whatsapp/chat_history.go
generated
vendored
183
vendor/github.com/Rhymen/go-whatsapp/chat_history.go
generated
vendored
@@ -1,183 +0,0 @@
|
|||||||
package whatsapp
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/Rhymen/go-whatsapp/binary"
|
|
||||||
"github.com/Rhymen/go-whatsapp/binary/proto"
|
|
||||||
"log"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MessageOffsetInfo struct {
|
|
||||||
FirstMessageId string
|
|
||||||
FirstMessageOwner bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func decodeMessages(n *binary.Node) []*proto.WebMessageInfo {
|
|
||||||
|
|
||||||
var messages = make([]*proto.WebMessageInfo, 0)
|
|
||||||
|
|
||||||
if n == nil || n.Attributes == nil || n.Content == nil {
|
|
||||||
return messages
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, msg := range n.Content.([]interface{}) {
|
|
||||||
switch msg.(type) {
|
|
||||||
case *proto.WebMessageInfo:
|
|
||||||
messages = append(messages, msg.(*proto.WebMessageInfo))
|
|
||||||
default:
|
|
||||||
log.Println("decodeMessages: Non WebMessage encountered")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return messages
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadChatMessages is useful to "scroll" messages, loading by count at a time
|
|
||||||
// if handlers == nil the func will use default handlers
|
|
||||||
// if after == true LoadChatMessages will load messages after the specified messageId, otherwise it will return
|
|
||||||
// message before the messageId
|
|
||||||
func (wac *Conn) LoadChatMessages(jid string, count int, messageId string, owner bool, after bool, handlers ...Handler) error {
|
|
||||||
if count <= 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if handlers == nil {
|
|
||||||
handlers = wac.handler
|
|
||||||
}
|
|
||||||
|
|
||||||
kind := "before"
|
|
||||||
if after {
|
|
||||||
kind = "after"
|
|
||||||
}
|
|
||||||
|
|
||||||
node, err := wac.query("message", jid, messageId, kind,
|
|
||||||
strconv.FormatBool(owner), "", count, 0)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
wac.handleWithCustomHandlers(err, handlers)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, msg := range decodeMessages(node) {
|
|
||||||
wac.handleWithCustomHandlers(ParseProtoMessage(msg), handlers)
|
|
||||||
wac.handleWithCustomHandlers(msg, handlers)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadFullChatHistory loads full chat history for the given jid
|
|
||||||
// chunkSize = how many messages to load with one query; if handlers == nil the func will use default handlers;
|
|
||||||
// pauseBetweenQueries = how much time to sleep between queries
|
|
||||||
func (wac *Conn) LoadFullChatHistory(jid string, chunkSize int,
|
|
||||||
pauseBetweenQueries time.Duration, handlers ...Handler) {
|
|
||||||
if chunkSize <= 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if handlers == nil {
|
|
||||||
handlers = wac.handler
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeMsg := ""
|
|
||||||
beforeMsgIsOwner := true
|
|
||||||
|
|
||||||
for {
|
|
||||||
node, err := wac.query("message", jid, beforeMsg, "before",
|
|
||||||
strconv.FormatBool(beforeMsgIsOwner), "", chunkSize, 0)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
wac.handleWithCustomHandlers(err, handlers)
|
|
||||||
} else {
|
|
||||||
|
|
||||||
msgs := decodeMessages(node)
|
|
||||||
for _, msg := range msgs {
|
|
||||||
wac.handleWithCustomHandlers(ParseProtoMessage(msg), handlers)
|
|
||||||
wac.handleWithCustomHandlers(msg, handlers)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(msgs) == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeMsg = *msgs[0].Key.Id
|
|
||||||
beforeMsgIsOwner = msgs[0].Key.FromMe != nil && *msgs[0].Key.FromMe
|
|
||||||
}
|
|
||||||
|
|
||||||
<-time.After(pauseBetweenQueries)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadFullChatHistoryAfter loads all messages after the specified messageId
|
|
||||||
// useful to "catch up" with the message history after some specified message
|
|
||||||
func (wac *Conn) LoadFullChatHistoryAfter(jid string, messageId string, chunkSize int,
|
|
||||||
pauseBetweenQueries time.Duration, handlers ...Handler) {
|
|
||||||
|
|
||||||
if chunkSize <= 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if handlers == nil {
|
|
||||||
handlers = wac.handler
|
|
||||||
}
|
|
||||||
|
|
||||||
msgOwner := true
|
|
||||||
prevNotFound := false
|
|
||||||
|
|
||||||
for {
|
|
||||||
node, err := wac.query("message", jid, messageId, "after",
|
|
||||||
strconv.FormatBool(msgOwner), "", chunkSize, 0)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
|
|
||||||
// Whatsapp will return 404 status when there is wrong owner flag on the requested message id
|
|
||||||
if err == ErrServerRespondedWith404 {
|
|
||||||
|
|
||||||
// this will detect two consecutive "not found" errors.
|
|
||||||
// this is done to prevent infinite loop when wrong message id supplied
|
|
||||||
if prevNotFound {
|
|
||||||
log.Println("LoadFullChatHistoryAfter: could not retrieve any messages, wrong message id?")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
prevNotFound = true
|
|
||||||
|
|
||||||
// try to reverse the owner flag and retry
|
|
||||||
if msgOwner {
|
|
||||||
// reverse initial msgOwner value and retry
|
|
||||||
msgOwner = false
|
|
||||||
|
|
||||||
<-time.After(time.Second)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the error isn't a 404 error, pass it to the error handler
|
|
||||||
wac.handleWithCustomHandlers(err, handlers)
|
|
||||||
} else {
|
|
||||||
|
|
||||||
msgs := decodeMessages(node)
|
|
||||||
for _, msg := range msgs {
|
|
||||||
wac.handleWithCustomHandlers(ParseProtoMessage(msg), handlers)
|
|
||||||
wac.handleWithCustomHandlers(msg, handlers)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(msgs) != chunkSize {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
messageId = *msgs[0].Key.Id
|
|
||||||
msgOwner = msgs[0].Key.FromMe != nil && *msgs[0].Key.FromMe
|
|
||||||
}
|
|
||||||
|
|
||||||
// message was found
|
|
||||||
prevNotFound = false
|
|
||||||
|
|
||||||
<-time.After(pauseBetweenQueries)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
33
vendor/github.com/Rhymen/go-whatsapp/conn.go
generated
vendored
33
vendor/github.com/Rhymen/go-whatsapp/conn.go
generated
vendored
@@ -4,7 +4,6 @@ package whatsapp
|
|||||||
import (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -90,9 +89,6 @@ type Conn struct {
|
|||||||
|
|
||||||
longClientName string
|
longClientName string
|
||||||
shortClientName string
|
shortClientName string
|
||||||
|
|
||||||
loginSessionLock sync.RWMutex
|
|
||||||
Proxy func(*http.Request) (*url.URL, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type websocketWrapper struct {
|
type websocketWrapper struct {
|
||||||
@@ -123,21 +119,6 @@ func NewConn(timeout time.Duration) (*Conn, error) {
|
|||||||
return wac, wac.connect()
|
return wac, wac.connect()
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConnWithProxy Create a new connect with a given timeout and a http proxy.
|
|
||||||
func NewConnWithProxy(timeout time.Duration, proxy func(*http.Request) (*url.URL, error)) (*Conn, error) {
|
|
||||||
wac := &Conn{
|
|
||||||
handler: make([]Handler, 0),
|
|
||||||
msgCount: 0,
|
|
||||||
msgTimeout: timeout,
|
|
||||||
Store: newStore(),
|
|
||||||
|
|
||||||
longClientName: "github.com/rhymen/go-whatsapp",
|
|
||||||
shortClientName: "go-whatsapp",
|
|
||||||
Proxy: proxy,
|
|
||||||
}
|
|
||||||
return wac, wac.connect()
|
|
||||||
}
|
|
||||||
|
|
||||||
// connect should be guarded with wsWriteMutex
|
// connect should be guarded with wsWriteMutex
|
||||||
func (wac *Conn) connect() (err error) {
|
func (wac *Conn) connect() (err error) {
|
||||||
if wac.connected {
|
if wac.connected {
|
||||||
@@ -154,7 +135,6 @@ func (wac *Conn) connect() (err error) {
|
|||||||
ReadBufferSize: 25 * 1024 * 1024,
|
ReadBufferSize: 25 * 1024 * 1024,
|
||||||
WriteBufferSize: 10 * 1024 * 1024,
|
WriteBufferSize: 10 * 1024 * 1024,
|
||||||
HandshakeTimeout: wac.msgTimeout,
|
HandshakeTimeout: wac.msgTimeout,
|
||||||
Proxy: wac.Proxy,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
headers := http.Header{"Origin": []string{"https://web.whatsapp.com"}}
|
headers := http.Header{"Origin": []string{"https://web.whatsapp.com"}}
|
||||||
@@ -211,19 +191,6 @@ func (wac *Conn) Disconnect() (Session, error) {
|
|||||||
return *wac.session, err
|
return *wac.session, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wac *Conn) AdminTest() (bool, error) {
|
|
||||||
if !wac.connected {
|
|
||||||
return false, ErrNotConnected
|
|
||||||
}
|
|
||||||
|
|
||||||
if !wac.loggedIn {
|
|
||||||
return false, ErrInvalidSession
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := wac.sendAdminTest()
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wac *Conn) keepAlive(minIntervalMs int, maxIntervalMs int) {
|
func (wac *Conn) keepAlive(minIntervalMs int, maxIntervalMs int) {
|
||||||
defer wac.wg.Done()
|
defer wac.wg.Done()
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/Rhymen/go-whatsapp/contact.go
generated
vendored
11
vendor/github.com/Rhymen/go-whatsapp/contact.go
generated
vendored
@@ -51,10 +51,6 @@ func (wac *Conn) LoadMessagesAfter(jid, messageId string, count int) (*binary.No
|
|||||||
return wac.query("message", jid, messageId, "after", "true", "", count, 0)
|
return wac.query("message", jid, messageId, "after", "true", "", count, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wac *Conn) LoadMediaInfo(jid, messageId, owner string) (*binary.Node, error) {
|
|
||||||
return wac.query("media", jid, messageId, "", owner, "", 0, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wac *Conn) Presence(jid string, presence Presence) (<-chan string, error) {
|
func (wac *Conn) Presence(jid string, presence Presence) (<-chan string, error) {
|
||||||
ts := time.Now().Unix()
|
ts := time.Now().Unix()
|
||||||
tag := fmt.Sprintf("%d.--%d", ts, wac.msgCount)
|
tag := fmt.Sprintf("%d.--%d", ts, wac.msgCount)
|
||||||
@@ -167,12 +163,7 @@ func (wac *Conn) query(t, jid, messageId, kind, owner, search string, count, pag
|
|||||||
n.Attributes["page"] = strconv.Itoa(page)
|
n.Attributes["page"] = strconv.Itoa(page)
|
||||||
}
|
}
|
||||||
|
|
||||||
metric := group
|
ch, err := wac.writeBinary(n, group, ignore, tag)
|
||||||
if t == "media" {
|
|
||||||
metric = queryMedia
|
|
||||||
}
|
|
||||||
|
|
||||||
ch, err := wac.writeBinary(n, metric, ignore, tag)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
5
vendor/github.com/Rhymen/go-whatsapp/errors.go
generated
vendored
5
vendor/github.com/Rhymen/go-whatsapp/errors.go
generated
vendored
@@ -12,14 +12,9 @@ var (
|
|||||||
ErrLoginInProgress = errors.New("login or restore already running")
|
ErrLoginInProgress = errors.New("login or restore already running")
|
||||||
ErrNotConnected = errors.New("not connected")
|
ErrNotConnected = errors.New("not connected")
|
||||||
ErrInvalidWsData = errors.New("received invalid data")
|
ErrInvalidWsData = errors.New("received invalid data")
|
||||||
ErrInvalidWsState = errors.New("can't handle binary data when not logged in")
|
|
||||||
ErrConnectionTimeout = errors.New("connection timed out")
|
ErrConnectionTimeout = errors.New("connection timed out")
|
||||||
ErrMissingMessageTag = errors.New("no messageTag specified or to short")
|
ErrMissingMessageTag = errors.New("no messageTag specified or to short")
|
||||||
ErrInvalidHmac = errors.New("invalid hmac")
|
ErrInvalidHmac = errors.New("invalid hmac")
|
||||||
ErrInvalidServerResponse = errors.New("invalid response received from server")
|
|
||||||
ErrServerRespondedWith404 = errors.New("server responded with status 404")
|
|
||||||
ErrMediaDownloadFailedWith404 = errors.New("download failed with status code 404")
|
|
||||||
ErrMediaDownloadFailedWith410 = errors.New("download failed with status code 410")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type ErrConnectionFailed struct {
|
type ErrConnectionFailed struct {
|
||||||
|
|||||||
128
vendor/github.com/Rhymen/go-whatsapp/handler.go
generated
vendored
128
vendor/github.com/Rhymen/go-whatsapp/handler.go
generated
vendored
@@ -20,11 +20,6 @@ type Handler interface {
|
|||||||
HandleError(err error)
|
HandleError(err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncHandler interface {
|
|
||||||
Handler
|
|
||||||
ShouldCallSynchronously() bool
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The TextMessageHandler interface needs to be implemented to receive text messages dispatched by the dispatcher.
|
The TextMessageHandler interface needs to be implemented to receive text messages dispatched by the dispatcher.
|
||||||
*/
|
*/
|
||||||
@@ -65,30 +60,6 @@ type DocumentMessageHandler interface {
|
|||||||
HandleDocumentMessage(message DocumentMessage)
|
HandleDocumentMessage(message DocumentMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
The LiveLocationMessageHandler interface needs to be implemented to receive live location messages dispatched by the dispatcher.
|
|
||||||
*/
|
|
||||||
type LiveLocationMessageHandler interface {
|
|
||||||
Handler
|
|
||||||
HandleLiveLocationMessage(message LiveLocationMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
The LocationMessageHandler interface needs to be implemented to receive location messages dispatched by the dispatcher.
|
|
||||||
*/
|
|
||||||
type LocationMessageHandler interface {
|
|
||||||
Handler
|
|
||||||
HandleLocationMessage(message LocationMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
The StickerMessageHandler interface needs to be implemented to receive location messages dispatched by the dispatcher.
|
|
||||||
*/
|
|
||||||
type StickerMessageHandler interface {
|
|
||||||
Handler
|
|
||||||
HandleStickerMessage(message StickerMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The JsonMessageHandler interface needs to be implemented to receive json messages dispatched by the dispatcher.
|
The JsonMessageHandler interface needs to be implemented to receive json messages dispatched by the dispatcher.
|
||||||
These json messages contain status updates of every kind sent by WhatsAppWeb servers. WhatsAppWeb uses these messages
|
These json messages contain status updates of every kind sent by WhatsAppWeb servers. WhatsAppWeb uses these messages
|
||||||
@@ -156,128 +127,55 @@ func (wac *Conn) RemoveHandlers() {
|
|||||||
wac.handler = make([]Handler, 0)
|
wac.handler = make([]Handler, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wac *Conn) shouldCallSynchronously(handler Handler) bool {
|
|
||||||
sh, ok := handler.(SyncHandler)
|
|
||||||
return ok && sh.ShouldCallSynchronously()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wac *Conn) handle(message interface{}) {
|
func (wac *Conn) handle(message interface{}) {
|
||||||
wac.handleWithCustomHandlers(message, wac.handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wac *Conn) handleWithCustomHandlers(message interface{}, handlers []Handler) {
|
|
||||||
switch m := message.(type) {
|
switch m := message.(type) {
|
||||||
case error:
|
case error:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
h.HandleError(m)
|
|
||||||
} else {
|
|
||||||
go h.HandleError(m)
|
go h.HandleError(m)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case string:
|
case string:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(JsonMessageHandler); ok {
|
if x, ok := h.(JsonMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleJsonMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleJsonMessage(m)
|
go x.HandleJsonMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case TextMessage:
|
case TextMessage:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(TextMessageHandler); ok {
|
if x, ok := h.(TextMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleTextMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleTextMessage(m)
|
go x.HandleTextMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case ImageMessage:
|
case ImageMessage:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(ImageMessageHandler); ok {
|
if x, ok := h.(ImageMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleImageMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleImageMessage(m)
|
go x.HandleImageMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case VideoMessage:
|
case VideoMessage:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(VideoMessageHandler); ok {
|
if x, ok := h.(VideoMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleVideoMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleVideoMessage(m)
|
go x.HandleVideoMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case AudioMessage:
|
case AudioMessage:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(AudioMessageHandler); ok {
|
if x, ok := h.(AudioMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleAudioMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleAudioMessage(m)
|
go x.HandleAudioMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case DocumentMessage:
|
case DocumentMessage:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(DocumentMessageHandler); ok {
|
if x, ok := h.(DocumentMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleDocumentMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleDocumentMessage(m)
|
go x.HandleDocumentMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
case LocationMessage:
|
|
||||||
for _, h := range handlers {
|
|
||||||
if x, ok := h.(LocationMessageHandler); ok {
|
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleLocationMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleLocationMessage(m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case LiveLocationMessage:
|
|
||||||
for _, h := range handlers {
|
|
||||||
if x, ok := h.(LiveLocationMessageHandler); ok {
|
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleLiveLocationMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleLiveLocationMessage(m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case StickerMessage:
|
|
||||||
for _, h := range handlers {
|
|
||||||
if x, ok := h.(StickerMessageHandler); ok {
|
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleStickerMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleStickerMessage(m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case *proto.WebMessageInfo:
|
case *proto.WebMessageInfo:
|
||||||
for _, h := range handlers {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(RawMessageHandler); ok {
|
if x, ok := h.(RawMessageHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleRawMessage(m)
|
|
||||||
} else {
|
|
||||||
go x.HandleRawMessage(m)
|
go x.HandleRawMessage(m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,13 +201,9 @@ func (wac *Conn) handleContacts(contacts interface{}) {
|
|||||||
}
|
}
|
||||||
for _, h := range wac.handler {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(ContactListHandler); ok {
|
if x, ok := h.(ContactListHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleContactList(contactList)
|
|
||||||
} else {
|
|
||||||
go x.HandleContactList(contactList)
|
go x.HandleContactList(contactList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wac *Conn) handleChats(chats interface{}) {
|
func (wac *Conn) handleChats(chats interface{}) {
|
||||||
@@ -336,13 +230,9 @@ func (wac *Conn) handleChats(chats interface{}) {
|
|||||||
}
|
}
|
||||||
for _, h := range wac.handler {
|
for _, h := range wac.handler {
|
||||||
if x, ok := h.(ChatListHandler); ok {
|
if x, ok := h.(ChatListHandler); ok {
|
||||||
if wac.shouldCallSynchronously(h) {
|
|
||||||
x.HandleChatList(chatList)
|
|
||||||
} else {
|
|
||||||
go x.HandleChatList(chatList)
|
go x.HandleChatList(chatList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wac *Conn) dispatch(msg interface{}) {
|
func (wac *Conn) dispatch(msg interface{}) {
|
||||||
@@ -357,7 +247,7 @@ func (wac *Conn) dispatch(msg interface{}) {
|
|||||||
for a := range con {
|
for a := range con {
|
||||||
if v, ok := con[a].(*proto.WebMessageInfo); ok {
|
if v, ok := con[a].(*proto.WebMessageInfo); ok {
|
||||||
wac.handle(v)
|
wac.handle(v)
|
||||||
wac.handle(ParseProtoMessage(v))
|
wac.handle(parseProtoMessage(v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
vendor/github.com/Rhymen/go-whatsapp/media.go
generated
vendored
18
vendor/github.com/Rhymen/go-whatsapp/media.go
generated
vendored
@@ -8,6 +8,8 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/Rhymen/go-whatsapp/crypto/cbc"
|
||||||
|
"github.com/Rhymen/go-whatsapp/crypto/hkdf"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
@@ -15,9 +17,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Rhymen/go-whatsapp/crypto/cbc"
|
|
||||||
"github.com/Rhymen/go-whatsapp/crypto/hkdf"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func Download(url string, mediaKey []byte, appInfo MediaType, fileLength int) ([]byte, error) {
|
func Download(url string, mediaKey []byte, appInfo MediaType, fileLength int) ([]byte, error) {
|
||||||
@@ -74,24 +73,17 @@ func downloadMedia(url string) (file []byte, mac []byte, err error) {
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
if resp.StatusCode != 200 {
|
if resp.StatusCode != 200 {
|
||||||
if resp.StatusCode == 404 {
|
return nil, nil, fmt.Errorf("download failed")
|
||||||
return nil, nil, ErrMediaDownloadFailedWith404
|
|
||||||
}
|
|
||||||
if resp.StatusCode == 410 {
|
|
||||||
return nil, nil, ErrMediaDownloadFailedWith410
|
|
||||||
}
|
|
||||||
return nil, nil, fmt.Errorf("download failed with status code %d", resp.StatusCode)
|
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
if resp.ContentLength <= 10 {
|
if resp.ContentLength <= 10 {
|
||||||
return nil, nil, fmt.Errorf("file to short")
|
return nil, nil, fmt.Errorf("file to short")
|
||||||
}
|
}
|
||||||
data, err := ioutil.ReadAll(resp.Body)
|
data, err := ioutil.ReadAll(resp.Body)
|
||||||
|
n := len(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
n := len(data)
|
|
||||||
return data[:n-10], data[n-10 : n], nil
|
return data[:n-10], data[n-10 : n], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,7 +142,7 @@ func (wac *Conn) Upload(reader io.Reader, appInfo MediaType) (url string, mediaK
|
|||||||
select {
|
select {
|
||||||
case r := <-ch:
|
case r := <-ch:
|
||||||
if err = json.Unmarshal([]byte(r), &resp); err != nil {
|
if err = json.Unmarshal([]byte(r), &resp); err != nil {
|
||||||
return "", nil, nil, nil, 0, fmt.Errorf("error decoding upload response: %v", err)
|
return "", nil, nil, nil, 0, fmt.Errorf("error decoding upload response: %v\n", err)
|
||||||
}
|
}
|
||||||
case <-time.After(wac.msgTimeout):
|
case <-time.After(wac.msgTimeout):
|
||||||
return "", nil, nil, nil, 0, fmt.Errorf("restore session init timed out")
|
return "", nil, nil, nil, 0, fmt.Errorf("restore session init timed out")
|
||||||
|
|||||||
250
vendor/github.com/Rhymen/go-whatsapp/message.go
generated
vendored
250
vendor/github.com/Rhymen/go-whatsapp/message.go
generated
vendored
@@ -4,14 +4,13 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/Rhymen/go-whatsapp/binary"
|
||||||
|
"github.com/Rhymen/go-whatsapp/binary/proto"
|
||||||
"io"
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Rhymen/go-whatsapp/binary"
|
|
||||||
"github.com/Rhymen/go-whatsapp/binary/proto"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MediaType string
|
type MediaType string
|
||||||
@@ -69,14 +68,6 @@ func (wac *Conn) Send(msg interface{}) (string, error) {
|
|||||||
msgProto = getAudioProto(m)
|
msgProto = getAudioProto(m)
|
||||||
msgInfo = getMessageInfo(msgProto)
|
msgInfo = getMessageInfo(msgProto)
|
||||||
ch, err = wac.sendProto(msgProto)
|
ch, err = wac.sendProto(msgProto)
|
||||||
case LocationMessage:
|
|
||||||
msgProto = GetLocationProto(m)
|
|
||||||
msgInfo = getMessageInfo(msgProto)
|
|
||||||
ch, err = wac.sendProto(msgProto)
|
|
||||||
case LiveLocationMessage:
|
|
||||||
msgProto = GetLiveLocationProto(m)
|
|
||||||
msgInfo = getMessageInfo(msgProto)
|
|
||||||
ch, err = wac.sendProto(msgProto)
|
|
||||||
default:
|
default:
|
||||||
return "ERROR", fmt.Errorf("cannot match type %T, use message types declared in the package", msg)
|
return "ERROR", fmt.Errorf("cannot match type %T, use message types declared in the package", msg)
|
||||||
}
|
}
|
||||||
@@ -132,7 +123,6 @@ type MessageInfo struct {
|
|||||||
PushName string
|
PushName string
|
||||||
Status MessageStatus
|
Status MessageStatus
|
||||||
QuotedMessageID string
|
QuotedMessageID string
|
||||||
QuotedMessage proto.Message
|
|
||||||
|
|
||||||
Source *proto.WebMessageInfo
|
Source *proto.WebMessageInfo
|
||||||
}
|
}
|
||||||
@@ -172,7 +162,7 @@ func getInfoProto(info *MessageInfo) *proto.WebMessageInfo {
|
|||||||
}
|
}
|
||||||
info.FromMe = true
|
info.FromMe = true
|
||||||
|
|
||||||
status := proto.WebMessageInfo_WEB_MESSAGE_INFO_STATUS(info.Status)
|
status := proto.WebMessageInfo_STATUS(info.Status)
|
||||||
|
|
||||||
return &proto.WebMessageInfo{
|
return &proto.WebMessageInfo{
|
||||||
Key: &proto.MessageKey{
|
Key: &proto.MessageKey{
|
||||||
@@ -185,22 +175,6 @@ func getInfoProto(info *MessageInfo) *proto.WebMessageInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getContextInfoProto(info *MessageInfo) *proto.ContextInfo {
|
|
||||||
if len(info.QuotedMessageID) > 0 {
|
|
||||||
contextInfo := &proto.ContextInfo{
|
|
||||||
StanzaId: &info.QuotedMessageID,
|
|
||||||
}
|
|
||||||
|
|
||||||
if &info.QuotedMessage != nil {
|
|
||||||
contextInfo.QuotedMessage = &info.QuotedMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
return contextInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TextMessage represents a text message.
|
TextMessage represents a text message.
|
||||||
*/
|
*/
|
||||||
@@ -222,21 +196,9 @@ func getTextMessage(msg *proto.WebMessageInfo) TextMessage {
|
|||||||
|
|
||||||
func getTextProto(msg TextMessage) *proto.WebMessageInfo {
|
func getTextProto(msg TextMessage) *proto.WebMessageInfo {
|
||||||
p := getInfoProto(&msg.Info)
|
p := getInfoProto(&msg.Info)
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
|
|
||||||
if contextInfo == nil {
|
|
||||||
p.Message = &proto.Message{
|
p.Message = &proto.Message{
|
||||||
Conversation: &msg.Text,
|
Conversation: &msg.Text,
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
p.Message = &proto.Message{
|
|
||||||
ExtendedTextMessage: &proto.ExtendedTextMessage{
|
|
||||||
Text: &msg.Text,
|
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,8 +221,7 @@ type ImageMessage struct {
|
|||||||
|
|
||||||
func getImageMessage(msg *proto.WebMessageInfo) ImageMessage {
|
func getImageMessage(msg *proto.WebMessageInfo) ImageMessage {
|
||||||
image := msg.GetMessage().GetImageMessage()
|
image := msg.GetMessage().GetImageMessage()
|
||||||
|
return ImageMessage{
|
||||||
imageMessage := ImageMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
Info: getMessageInfo(msg),
|
||||||
Caption: image.GetCaption(),
|
Caption: image.GetCaption(),
|
||||||
Thumbnail: image.GetJpegThumbnail(),
|
Thumbnail: image.GetJpegThumbnail(),
|
||||||
@@ -271,18 +232,10 @@ func getImageMessage(msg *proto.WebMessageInfo) ImageMessage {
|
|||||||
fileSha256: image.GetFileSha256(),
|
fileSha256: image.GetFileSha256(),
|
||||||
fileLength: image.GetFileLength(),
|
fileLength: image.GetFileLength(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if contextInfo := image.GetContextInfo(); contextInfo != nil {
|
|
||||||
imageMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageMessage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getImageProto(msg ImageMessage) *proto.WebMessageInfo {
|
func getImageProto(msg ImageMessage) *proto.WebMessageInfo {
|
||||||
p := getInfoProto(&msg.Info)
|
p := getInfoProto(&msg.Info)
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
|
|
||||||
p.Message = &proto.Message{
|
p.Message = &proto.Message{
|
||||||
ImageMessage: &proto.ImageMessage{
|
ImageMessage: &proto.ImageMessage{
|
||||||
Caption: &msg.Caption,
|
Caption: &msg.Caption,
|
||||||
@@ -293,7 +246,6 @@ func getImageProto(msg ImageMessage) *proto.WebMessageInfo {
|
|||||||
FileEncSha256: msg.fileEncSha256,
|
FileEncSha256: msg.fileEncSha256,
|
||||||
FileSha256: msg.fileSha256,
|
FileSha256: msg.fileSha256,
|
||||||
FileLength: &msg.fileLength,
|
FileLength: &msg.fileLength,
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
@@ -317,7 +269,6 @@ type VideoMessage struct {
|
|||||||
Length uint32
|
Length uint32
|
||||||
Type string
|
Type string
|
||||||
Content io.Reader
|
Content io.Reader
|
||||||
GifPlayback bool
|
|
||||||
url string
|
url string
|
||||||
mediaKey []byte
|
mediaKey []byte
|
||||||
fileEncSha256 []byte
|
fileEncSha256 []byte
|
||||||
@@ -327,12 +278,10 @@ type VideoMessage struct {
|
|||||||
|
|
||||||
func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage {
|
func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage {
|
||||||
vid := msg.GetMessage().GetVideoMessage()
|
vid := msg.GetMessage().GetVideoMessage()
|
||||||
|
return VideoMessage{
|
||||||
videoMessage := VideoMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
Info: getMessageInfo(msg),
|
||||||
Caption: vid.GetCaption(),
|
Caption: vid.GetCaption(),
|
||||||
Thumbnail: vid.GetJpegThumbnail(),
|
Thumbnail: vid.GetJpegThumbnail(),
|
||||||
GifPlayback: vid.GetGifPlayback(),
|
|
||||||
url: vid.GetUrl(),
|
url: vid.GetUrl(),
|
||||||
mediaKey: vid.GetMediaKey(),
|
mediaKey: vid.GetMediaKey(),
|
||||||
Length: vid.GetSeconds(),
|
Length: vid.GetSeconds(),
|
||||||
@@ -341,31 +290,21 @@ func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage {
|
|||||||
fileSha256: vid.GetFileSha256(),
|
fileSha256: vid.GetFileSha256(),
|
||||||
fileLength: vid.GetFileLength(),
|
fileLength: vid.GetFileLength(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if contextInfo := vid.GetContextInfo(); contextInfo != nil {
|
|
||||||
videoMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return videoMessage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVideoProto(msg VideoMessage) *proto.WebMessageInfo {
|
func getVideoProto(msg VideoMessage) *proto.WebMessageInfo {
|
||||||
p := getInfoProto(&msg.Info)
|
p := getInfoProto(&msg.Info)
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
|
|
||||||
p.Message = &proto.Message{
|
p.Message = &proto.Message{
|
||||||
VideoMessage: &proto.VideoMessage{
|
VideoMessage: &proto.VideoMessage{
|
||||||
Caption: &msg.Caption,
|
Caption: &msg.Caption,
|
||||||
JpegThumbnail: msg.Thumbnail,
|
JpegThumbnail: msg.Thumbnail,
|
||||||
Url: &msg.url,
|
Url: &msg.url,
|
||||||
GifPlayback: &msg.GifPlayback,
|
|
||||||
MediaKey: msg.mediaKey,
|
MediaKey: msg.mediaKey,
|
||||||
Seconds: &msg.Length,
|
Seconds: &msg.Length,
|
||||||
FileEncSha256: msg.fileEncSha256,
|
FileEncSha256: msg.fileEncSha256,
|
||||||
FileSha256: msg.fileSha256,
|
FileSha256: msg.fileSha256,
|
||||||
FileLength: &msg.fileLength,
|
FileLength: &msg.fileLength,
|
||||||
Mimetype: &msg.Type,
|
Mimetype: &msg.Type,
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
@@ -387,7 +326,6 @@ type AudioMessage struct {
|
|||||||
Length uint32
|
Length uint32
|
||||||
Type string
|
Type string
|
||||||
Content io.Reader
|
Content io.Reader
|
||||||
Ptt bool
|
|
||||||
url string
|
url string
|
||||||
mediaKey []byte
|
mediaKey []byte
|
||||||
fileEncSha256 []byte
|
fileEncSha256 []byte
|
||||||
@@ -397,8 +335,7 @@ type AudioMessage struct {
|
|||||||
|
|
||||||
func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage {
|
func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage {
|
||||||
aud := msg.GetMessage().GetAudioMessage()
|
aud := msg.GetMessage().GetAudioMessage()
|
||||||
|
return AudioMessage{
|
||||||
audioMessage := AudioMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
Info: getMessageInfo(msg),
|
||||||
url: aud.GetUrl(),
|
url: aud.GetUrl(),
|
||||||
mediaKey: aud.GetMediaKey(),
|
mediaKey: aud.GetMediaKey(),
|
||||||
@@ -408,17 +345,10 @@ func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage {
|
|||||||
fileSha256: aud.GetFileSha256(),
|
fileSha256: aud.GetFileSha256(),
|
||||||
fileLength: aud.GetFileLength(),
|
fileLength: aud.GetFileLength(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if contextInfo := aud.GetContextInfo(); contextInfo != nil {
|
|
||||||
audioMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return audioMessage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAudioProto(msg AudioMessage) *proto.WebMessageInfo {
|
func getAudioProto(msg AudioMessage) *proto.WebMessageInfo {
|
||||||
p := getInfoProto(&msg.Info)
|
p := getInfoProto(&msg.Info)
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
p.Message = &proto.Message{
|
p.Message = &proto.Message{
|
||||||
AudioMessage: &proto.AudioMessage{
|
AudioMessage: &proto.AudioMessage{
|
||||||
Url: &msg.url,
|
Url: &msg.url,
|
||||||
@@ -428,8 +358,6 @@ func getAudioProto(msg AudioMessage) *proto.WebMessageInfo {
|
|||||||
FileSha256: msg.fileSha256,
|
FileSha256: msg.fileSha256,
|
||||||
FileLength: &msg.fileLength,
|
FileLength: &msg.fileLength,
|
||||||
Mimetype: &msg.Type,
|
Mimetype: &msg.Type,
|
||||||
ContextInfo: contextInfo,
|
|
||||||
Ptt: &msg.Ptt,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
@@ -463,8 +391,7 @@ type DocumentMessage struct {
|
|||||||
|
|
||||||
func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage {
|
func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage {
|
||||||
doc := msg.GetMessage().GetDocumentMessage()
|
doc := msg.GetMessage().GetDocumentMessage()
|
||||||
|
return DocumentMessage{
|
||||||
documentMessage := DocumentMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
Info: getMessageInfo(msg),
|
||||||
Title: doc.GetTitle(),
|
Title: doc.GetTitle(),
|
||||||
PageCount: doc.GetPageCount(),
|
PageCount: doc.GetPageCount(),
|
||||||
@@ -477,17 +404,10 @@ func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage {
|
|||||||
fileSha256: doc.GetFileSha256(),
|
fileSha256: doc.GetFileSha256(),
|
||||||
fileLength: doc.GetFileLength(),
|
fileLength: doc.GetFileLength(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if contextInfo := doc.GetContextInfo(); contextInfo != nil {
|
|
||||||
documentMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return documentMessage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDocumentProto(msg DocumentMessage) *proto.WebMessageInfo {
|
func getDocumentProto(msg DocumentMessage) *proto.WebMessageInfo {
|
||||||
p := getInfoProto(&msg.Info)
|
p := getInfoProto(&msg.Info)
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
p.Message = &proto.Message{
|
p.Message = &proto.Message{
|
||||||
DocumentMessage: &proto.DocumentMessage{
|
DocumentMessage: &proto.DocumentMessage{
|
||||||
JpegThumbnail: msg.Thumbnail,
|
JpegThumbnail: msg.Thumbnail,
|
||||||
@@ -499,7 +419,6 @@ func getDocumentProto(msg DocumentMessage) *proto.WebMessageInfo {
|
|||||||
PageCount: &msg.PageCount,
|
PageCount: &msg.PageCount,
|
||||||
Title: &msg.Title,
|
Title: &msg.Title,
|
||||||
Mimetype: &msg.Type,
|
Mimetype: &msg.Type,
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
@@ -512,151 +431,7 @@ func (m *DocumentMessage) Download() ([]byte, error) {
|
|||||||
return Download(m.url, m.mediaKey, MediaDocument, int(m.fileLength))
|
return Download(m.url, m.mediaKey, MediaDocument, int(m.fileLength))
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
func parseProtoMessage(msg *proto.WebMessageInfo) interface{} {
|
||||||
LocationMessage represents a location message
|
|
||||||
*/
|
|
||||||
type LocationMessage struct {
|
|
||||||
Info MessageInfo
|
|
||||||
DegreesLatitude float64
|
|
||||||
DegreesLongitude float64
|
|
||||||
Name string
|
|
||||||
Address string
|
|
||||||
Url string
|
|
||||||
JpegThumbnail []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetLocationMessage(msg *proto.WebMessageInfo) LocationMessage {
|
|
||||||
loc := msg.GetMessage().GetLocationMessage()
|
|
||||||
|
|
||||||
locationMessage := LocationMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
|
||||||
DegreesLatitude: loc.GetDegreesLatitude(),
|
|
||||||
DegreesLongitude: loc.GetDegreesLongitude(),
|
|
||||||
Name: loc.GetName(),
|
|
||||||
Address: loc.GetAddress(),
|
|
||||||
Url: loc.GetUrl(),
|
|
||||||
JpegThumbnail: loc.GetJpegThumbnail(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if contextInfo := loc.GetContextInfo(); contextInfo != nil {
|
|
||||||
locationMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return locationMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetLocationProto(msg LocationMessage) *proto.WebMessageInfo {
|
|
||||||
p := getInfoProto(&msg.Info)
|
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
|
|
||||||
p.Message = &proto.Message{
|
|
||||||
LocationMessage: &proto.LocationMessage{
|
|
||||||
DegreesLatitude: &msg.DegreesLatitude,
|
|
||||||
DegreesLongitude: &msg.DegreesLongitude,
|
|
||||||
Name: &msg.Name,
|
|
||||||
Address: &msg.Address,
|
|
||||||
Url: &msg.Url,
|
|
||||||
JpegThumbnail: msg.JpegThumbnail,
|
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
LiveLocationMessage represents a live location message
|
|
||||||
*/
|
|
||||||
type LiveLocationMessage struct {
|
|
||||||
Info MessageInfo
|
|
||||||
DegreesLatitude float64
|
|
||||||
DegreesLongitude float64
|
|
||||||
AccuracyInMeters uint32
|
|
||||||
SpeedInMps float32
|
|
||||||
DegreesClockwiseFromMagneticNorth uint32
|
|
||||||
Caption string
|
|
||||||
SequenceNumber int64
|
|
||||||
JpegThumbnail []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetLiveLocationMessage(msg *proto.WebMessageInfo) LiveLocationMessage {
|
|
||||||
loc := msg.GetMessage().GetLiveLocationMessage()
|
|
||||||
|
|
||||||
liveLocationMessage := LiveLocationMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
|
||||||
DegreesLatitude: loc.GetDegreesLatitude(),
|
|
||||||
DegreesLongitude: loc.GetDegreesLongitude(),
|
|
||||||
AccuracyInMeters: loc.GetAccuracyInMeters(),
|
|
||||||
SpeedInMps: loc.GetSpeedInMps(),
|
|
||||||
DegreesClockwiseFromMagneticNorth: loc.GetDegreesClockwiseFromMagneticNorth(),
|
|
||||||
Caption: loc.GetCaption(),
|
|
||||||
SequenceNumber: loc.GetSequenceNumber(),
|
|
||||||
JpegThumbnail: loc.GetJpegThumbnail(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if contextInfo := loc.GetContextInfo(); contextInfo != nil {
|
|
||||||
liveLocationMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return liveLocationMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetLiveLocationProto(msg LiveLocationMessage) *proto.WebMessageInfo {
|
|
||||||
p := getInfoProto(&msg.Info)
|
|
||||||
contextInfo := getContextInfoProto(&msg.Info)
|
|
||||||
p.Message = &proto.Message{
|
|
||||||
LiveLocationMessage: &proto.LiveLocationMessage{
|
|
||||||
DegreesLatitude: &msg.DegreesLatitude,
|
|
||||||
DegreesLongitude: &msg.DegreesLongitude,
|
|
||||||
AccuracyInMeters: &msg.AccuracyInMeters,
|
|
||||||
SpeedInMps: &msg.SpeedInMps,
|
|
||||||
DegreesClockwiseFromMagneticNorth: &msg.DegreesClockwiseFromMagneticNorth,
|
|
||||||
Caption: &msg.Caption,
|
|
||||||
SequenceNumber: &msg.SequenceNumber,
|
|
||||||
JpegThumbnail: msg.JpegThumbnail,
|
|
||||||
ContextInfo: contextInfo,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
StickerMessage represents a sticker message.
|
|
||||||
*/
|
|
||||||
type StickerMessage struct {
|
|
||||||
Info MessageInfo
|
|
||||||
|
|
||||||
Thumbnail []byte
|
|
||||||
Type string
|
|
||||||
Content io.Reader
|
|
||||||
url string
|
|
||||||
mediaKey []byte
|
|
||||||
fileEncSha256 []byte
|
|
||||||
fileSha256 []byte
|
|
||||||
fileLength uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
func getStickerMessage(msg *proto.WebMessageInfo) StickerMessage {
|
|
||||||
sticker := msg.GetMessage().GetStickerMessage()
|
|
||||||
|
|
||||||
StickerMessage := StickerMessage{
|
|
||||||
Info: getMessageInfo(msg),
|
|
||||||
Thumbnail: sticker.GetPngThumbnail(),
|
|
||||||
url: sticker.GetUrl(),
|
|
||||||
mediaKey: sticker.GetMediaKey(),
|
|
||||||
Type: sticker.GetMimetype(),
|
|
||||||
fileEncSha256: sticker.GetFileEncSha256(),
|
|
||||||
fileSha256: sticker.GetFileSha256(),
|
|
||||||
fileLength: sticker.GetFileLength(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if contextInfo := sticker.GetContextInfo(); contextInfo != nil {
|
|
||||||
StickerMessage.Info.QuotedMessageID = contextInfo.GetStanzaId()
|
|
||||||
}
|
|
||||||
|
|
||||||
return StickerMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
func ParseProtoMessage(msg *proto.WebMessageInfo) interface{} {
|
|
||||||
switch {
|
switch {
|
||||||
|
|
||||||
case msg.GetMessage().GetAudioMessage() != nil:
|
case msg.GetMessage().GetAudioMessage() != nil:
|
||||||
@@ -677,15 +452,6 @@ func ParseProtoMessage(msg *proto.WebMessageInfo) interface{} {
|
|||||||
case msg.GetMessage().GetExtendedTextMessage() != nil:
|
case msg.GetMessage().GetExtendedTextMessage() != nil:
|
||||||
return getTextMessage(msg)
|
return getTextMessage(msg)
|
||||||
|
|
||||||
case msg.GetMessage().GetLocationMessage() != nil:
|
|
||||||
return GetLocationMessage(msg)
|
|
||||||
|
|
||||||
case msg.GetMessage().GetLiveLocationMessage() != nil:
|
|
||||||
return GetLiveLocationMessage(msg)
|
|
||||||
|
|
||||||
case msg.GetMessage().GetStickerMessage() != nil:
|
|
||||||
return getStickerMessage(msg)
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
//cannot match message
|
//cannot match message
|
||||||
}
|
}
|
||||||
|
|||||||
25
vendor/github.com/Rhymen/go-whatsapp/read.go
generated
vendored
25
vendor/github.com/Rhymen/go-whatsapp/read.go
generated
vendored
@@ -3,8 +3,6 @@ package whatsapp
|
|||||||
import (
|
import (
|
||||||
"crypto/hmac"
|
"crypto/hmac"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"github.com/Rhymen/go-whatsapp/binary"
|
"github.com/Rhymen/go-whatsapp/binary"
|
||||||
"github.com/Rhymen/go-whatsapp/crypto/cbc"
|
"github.com/Rhymen/go-whatsapp/crypto/cbc"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
@@ -77,13 +75,7 @@ func (wac *Conn) processReadData(msgType int, msg []byte) error {
|
|||||||
wac.listener.Lock()
|
wac.listener.Lock()
|
||||||
delete(wac.listener.m, data[0])
|
delete(wac.listener.m, data[0])
|
||||||
wac.listener.Unlock()
|
wac.listener.Unlock()
|
||||||
} else if msgType == websocket.BinaryMessage {
|
} else if msgType == websocket.BinaryMessage && wac.loggedIn {
|
||||||
wac.loginSessionLock.RLock()
|
|
||||||
sess := wac.session
|
|
||||||
wac.loginSessionLock.RUnlock()
|
|
||||||
if sess == nil || sess.MacKey == nil || sess.EncKey == nil {
|
|
||||||
return ErrInvalidWsState
|
|
||||||
}
|
|
||||||
message, err := wac.decryptBinaryMessage([]byte(data[1]))
|
message, err := wac.decryptBinaryMessage([]byte(data[1]))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "error decoding binary")
|
return errors.Wrap(err, "error decoding binary")
|
||||||
@@ -98,21 +90,6 @@ func (wac *Conn) processReadData(msgType int, msg []byte) error {
|
|||||||
func (wac *Conn) decryptBinaryMessage(msg []byte) (*binary.Node, error) {
|
func (wac *Conn) decryptBinaryMessage(msg []byte) (*binary.Node, error) {
|
||||||
//message validation
|
//message validation
|
||||||
h2 := hmac.New(sha256.New, wac.session.MacKey)
|
h2 := hmac.New(sha256.New, wac.session.MacKey)
|
||||||
if len(msg) < 33 {
|
|
||||||
var response struct {
|
|
||||||
Status int `json:"status"`
|
|
||||||
}
|
|
||||||
err := json.Unmarshal(msg, &response)
|
|
||||||
if err == nil {
|
|
||||||
if response.Status == 404 {
|
|
||||||
return nil, ErrServerRespondedWith404
|
|
||||||
}
|
|
||||||
return nil, errors.New(fmt.Sprintf("server responded with %d", response.Status))
|
|
||||||
} else {
|
|
||||||
return nil, ErrInvalidServerResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
h2.Write([]byte(msg[32:]))
|
h2.Write([]byte(msg[32:]))
|
||||||
if !hmac.Equal(h2.Sum(nil), msg[:32]) {
|
if !hmac.Equal(h2.Sum(nil), msg[:32]) {
|
||||||
return nil, ErrInvalidHmac
|
return nil, ErrInvalidHmac
|
||||||
|
|||||||
64
vendor/github.com/Rhymen/go-whatsapp/session.go
generated
vendored
64
vendor/github.com/Rhymen/go-whatsapp/session.go
generated
vendored
@@ -7,8 +7,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -90,53 +88,6 @@ func newInfoFromReq(info map[string]interface{}) *Info {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
CheckCurrentServerVersion is based on the login method logic in order to establish the websocket connection and get
|
|
||||||
the current version from the server with the `admin init` command. This can be very useful for automations in which
|
|
||||||
you need to quickly perceive new versions (mostly patches) and update your application so it suddenly stops working.
|
|
||||||
*/
|
|
||||||
func CheckCurrentServerVersion() ([]int, error) {
|
|
||||||
wac, err := NewConn(5 * time.Second)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("fail to create connection")
|
|
||||||
}
|
|
||||||
|
|
||||||
clientId := make([]byte, 16)
|
|
||||||
if _, err = rand.Read(clientId); err != nil {
|
|
||||||
return nil, fmt.Errorf("error creating random ClientId: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b64ClientId := base64.StdEncoding.EncodeToString(clientId)
|
|
||||||
login := []interface{}{"admin", "init", waVersion, []string{wac.longClientName, wac.shortClientName}, b64ClientId, true}
|
|
||||||
loginChan, err := wac.writeJson(login)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error writing login", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve an answer from the websocket
|
|
||||||
var r string
|
|
||||||
select {
|
|
||||||
case r = <-loginChan:
|
|
||||||
case <-time.After(wac.msgTimeout):
|
|
||||||
return nil, fmt.Errorf("login connection timed out")
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp map[string]interface{}
|
|
||||||
if err = json.Unmarshal([]byte(r), &resp); err != nil {
|
|
||||||
return nil, fmt.Errorf("error decoding login", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Take the curr property as X.Y.Z and split it into as int slice
|
|
||||||
curr := resp["curr"].(string)
|
|
||||||
currArray := strings.Split(curr, ".")
|
|
||||||
version := make([]int, len(currArray))
|
|
||||||
for i := range version {
|
|
||||||
version[i], _ = strconv.Atoi(currArray[i])
|
|
||||||
}
|
|
||||||
|
|
||||||
return version, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SetClientName sets the long and short client names that are sent to WhatsApp when logging in and displayed in the
|
SetClientName sets the long and short client names that are sent to WhatsApp when logging in and displayed in the
|
||||||
WhatsApp Web device list. As the values are only sent when logging in, changing them after logging in is not possible.
|
WhatsApp Web device list. As the values are only sent when logging in, changing them after logging in is not possible.
|
||||||
@@ -149,19 +100,6 @@ func (wac *Conn) SetClientName(long, short string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
SetClientVersion sets WhatsApp client version
|
|
||||||
Default value is 0.3.3324
|
|
||||||
*/
|
|
||||||
func (wac *Conn) SetClientVersion(major int, minor int, patch int) {
|
|
||||||
waVersion = []int{major, minor, patch}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetClientVersion returns WhatsApp client version
|
|
||||||
func (wac *Conn) GetClientVersion() []int {
|
|
||||||
return waVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Login is the function that creates a new whatsapp session and logs you in. If you do not want to scan the qr code
|
Login is the function that creates a new whatsapp session and logs you in. If you do not want to scan the qr code
|
||||||
every time, you should save the returned session and use RestoreWithSession the next time. Login takes a writable channel
|
every time, you should save the returned session and use RestoreWithSession the next time. Login takes a writable channel
|
||||||
@@ -249,8 +187,6 @@ func (wac *Conn) Login(qrChan chan<- string) (Session, error) {
|
|||||||
var resp2 []interface{}
|
var resp2 []interface{}
|
||||||
select {
|
select {
|
||||||
case r1 := <-s1:
|
case r1 := <-s1:
|
||||||
wac.loginSessionLock.Lock()
|
|
||||||
defer wac.loginSessionLock.Unlock()
|
|
||||||
if err := json.Unmarshal([]byte(r1), &resp2); err != nil {
|
if err := json.Unmarshal([]byte(r1), &resp2); err != nil {
|
||||||
return session, fmt.Errorf("error decoding qr code resp: %v", err)
|
return session, fmt.Errorf("error decoding qr code resp: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
30
vendor/github.com/Rhymen/go-whatsapp/write.go
generated
vendored
30
vendor/github.com/Rhymen/go-whatsapp/write.go
generated
vendored
@@ -78,36 +78,6 @@ func (wac *Conn) sendKeepAlive() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
When phone is unreachable, WhatsAppWeb sends ["admin","test"] time after time to try a successful contact.
|
|
||||||
Tested with Airplane mode and no connection at all.
|
|
||||||
*/
|
|
||||||
func (wac *Conn) sendAdminTest() (bool, error) {
|
|
||||||
data := []interface{}{"admin", "test"}
|
|
||||||
|
|
||||||
r, err := wac.writeJson(data)
|
|
||||||
if err != nil {
|
|
||||||
return false, errors.Wrap(err, "error sending admin test")
|
|
||||||
}
|
|
||||||
|
|
||||||
var response []interface{}
|
|
||||||
|
|
||||||
select {
|
|
||||||
case resp := <-r:
|
|
||||||
if err := json.Unmarshal([]byte(resp), &response); err != nil {
|
|
||||||
return false, fmt.Errorf("error decoding response message: %v\n", err)
|
|
||||||
}
|
|
||||||
case <-time.After(wac.msgTimeout):
|
|
||||||
return false, ErrConnectionTimeout
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(response) == 2 && response[0].(string) == "Pong" && response[1].(bool) == true {
|
|
||||||
return true, nil
|
|
||||||
} else {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wac *Conn) write(messageType int, answerMessageTag string, data []byte) (<-chan string, error) {
|
func (wac *Conn) write(messageType int, answerMessageTag string, data []byte) (<-chan string, error) {
|
||||||
var ch chan string
|
var ch chan string
|
||||||
if answerMessageTag != "" {
|
if answerMessageTag != "" {
|
||||||
|
|||||||
2
vendor/github.com/bwmarrin/discordgo/README.md
generated
vendored
2
vendor/github.com/bwmarrin/discordgo/README.md
generated
vendored
@@ -1,6 +1,6 @@
|
|||||||
# DiscordGo
|
# DiscordGo
|
||||||
|
|
||||||
[](https://godoc.org/github.com/bwmarrin/discordgo) [](http://goreportcard.com/report/bwmarrin/discordgo) [](https://travis-ci.org/bwmarrin/discordgo) [](https://discord.gg/0f1SbxBZjYoCtNPP) [](https://discordapp.com/invite/discord-api)
|
[](https://godoc.org/github.com/bwmarrin/discordgo) [](http://goreportcard.com/report/bwmarrin/discordgo) [](https://travis-ci.org/bwmarrin/discordgo) [](https://discord.gg/0f1SbxBZjYoCtNPP) [](https://discord.gg/0SBTUU1wZTWT6sqd)
|
||||||
|
|
||||||
<img align="right" src="http://bwmarrin.github.io/discordgo/img/discordgo.png">
|
<img align="right" src="http://bwmarrin.github.io/discordgo/img/discordgo.png">
|
||||||
|
|
||||||
|
|||||||
3
vendor/github.com/bwmarrin/discordgo/discord.go
generated
vendored
3
vendor/github.com/bwmarrin/discordgo/discord.go
generated
vendored
@@ -21,7 +21,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// VERSION of DiscordGo, follows Semantic Versioning. (http://semver.org/)
|
// VERSION of DiscordGo, follows Semantic Versioning. (http://semver.org/)
|
||||||
const VERSION = "0.20.1"
|
const VERSION = "0.19.0"
|
||||||
|
|
||||||
// ErrMFA will be risen by New when the user has 2FA.
|
// ErrMFA will be risen by New when the user has 2FA.
|
||||||
var ErrMFA = errors.New("account has 2FA enabled")
|
var ErrMFA = errors.New("account has 2FA enabled")
|
||||||
@@ -58,7 +58,6 @@ func New(args ...interface{}) (s *Session, err error) {
|
|||||||
ShardCount: 1,
|
ShardCount: 1,
|
||||||
MaxRestRetries: 3,
|
MaxRestRetries: 3,
|
||||||
Client: &http.Client{Timeout: (20 * time.Second)},
|
Client: &http.Client{Timeout: (20 * time.Second)},
|
||||||
UserAgent: "DiscordBot (https://github.com/bwmarrin/discordgo, v" + VERSION + ")",
|
|
||||||
sequence: new(int64),
|
sequence: new(int64),
|
||||||
LastHeartbeatAck: time.Now().UTC(),
|
LastHeartbeatAck: time.Now().UTC(),
|
||||||
}
|
}
|
||||||
|
|||||||
4
vendor/github.com/bwmarrin/discordgo/endpoints.go
generated
vendored
4
vendor/github.com/bwmarrin/discordgo/endpoints.go
generated
vendored
@@ -38,7 +38,6 @@ var (
|
|||||||
EndpointCDNIcons = EndpointCDN + "icons/"
|
EndpointCDNIcons = EndpointCDN + "icons/"
|
||||||
EndpointCDNSplashes = EndpointCDN + "splashes/"
|
EndpointCDNSplashes = EndpointCDN + "splashes/"
|
||||||
EndpointCDNChannelIcons = EndpointCDN + "channel-icons/"
|
EndpointCDNChannelIcons = EndpointCDN + "channel-icons/"
|
||||||
EndpointCDNBanners = EndpointCDN + "banners/"
|
|
||||||
|
|
||||||
EndpointAuth = EndpointAPI + "auth/"
|
EndpointAuth = EndpointAPI + "auth/"
|
||||||
EndpointLogin = EndpointAuth + "login"
|
EndpointLogin = EndpointAuth + "login"
|
||||||
@@ -93,13 +92,11 @@ var (
|
|||||||
EndpointGuildEmbed = func(gID string) string { return EndpointGuilds + gID + "/embed" }
|
EndpointGuildEmbed = func(gID string) string { return EndpointGuilds + gID + "/embed" }
|
||||||
EndpointGuildPrune = func(gID string) string { return EndpointGuilds + gID + "/prune" }
|
EndpointGuildPrune = func(gID string) string { return EndpointGuilds + gID + "/prune" }
|
||||||
EndpointGuildIcon = func(gID, hash string) string { return EndpointCDNIcons + gID + "/" + hash + ".png" }
|
EndpointGuildIcon = func(gID, hash string) string { return EndpointCDNIcons + gID + "/" + hash + ".png" }
|
||||||
EndpointGuildIconAnimated = func(gID, hash string) string { return EndpointCDNIcons + gID + "/" + hash + ".gif" }
|
|
||||||
EndpointGuildSplash = func(gID, hash string) string { return EndpointCDNSplashes + gID + "/" + hash + ".png" }
|
EndpointGuildSplash = func(gID, hash string) string { return EndpointCDNSplashes + gID + "/" + hash + ".png" }
|
||||||
EndpointGuildWebhooks = func(gID string) string { return EndpointGuilds + gID + "/webhooks" }
|
EndpointGuildWebhooks = func(gID string) string { return EndpointGuilds + gID + "/webhooks" }
|
||||||
EndpointGuildAuditLogs = func(gID string) string { return EndpointGuilds + gID + "/audit-logs" }
|
EndpointGuildAuditLogs = func(gID string) string { return EndpointGuilds + gID + "/audit-logs" }
|
||||||
EndpointGuildEmojis = func(gID string) string { return EndpointGuilds + gID + "/emojis" }
|
EndpointGuildEmojis = func(gID string) string { return EndpointGuilds + gID + "/emojis" }
|
||||||
EndpointGuildEmoji = func(gID, eID string) string { return EndpointGuilds + gID + "/emojis/" + eID }
|
EndpointGuildEmoji = func(gID, eID string) string { return EndpointGuilds + gID + "/emojis/" + eID }
|
||||||
EndpointGuildBanner = func(gID, hash string) string { return EndpointCDNBanners + gID + "/" + hash + ".png" }
|
|
||||||
|
|
||||||
EndpointChannel = func(cID string) string { return EndpointChannels + cID }
|
EndpointChannel = func(cID string) string { return EndpointChannels + cID }
|
||||||
EndpointChannelPermissions = func(cID string) string { return EndpointChannels + cID + "/permissions" }
|
EndpointChannelPermissions = func(cID string) string { return EndpointChannels + cID + "/permissions" }
|
||||||
@@ -146,5 +143,4 @@ var (
|
|||||||
EndpointApplications = EndpointOauth2 + "applications"
|
EndpointApplications = EndpointOauth2 + "applications"
|
||||||
EndpointApplication = func(aID string) string { return EndpointApplications + "/" + aID }
|
EndpointApplication = func(aID string) string { return EndpointApplications + "/" + aID }
|
||||||
EndpointApplicationsBot = func(aID string) string { return EndpointApplications + "/" + aID + "/bot" }
|
EndpointApplicationsBot = func(aID string) string { return EndpointApplications + "/" + aID + "/bot" }
|
||||||
EndpointApplicationAssets = func(aID string) string { return EndpointApplications + "/" + aID + "/assets" }
|
|
||||||
)
|
)
|
||||||
|
|||||||
8
vendor/github.com/bwmarrin/discordgo/events.go
generated
vendored
8
vendor/github.com/bwmarrin/discordgo/events.go
generated
vendored
@@ -10,15 +10,15 @@ import (
|
|||||||
//go:generate go run tools/cmd/eventhandlers/main.go
|
//go:generate go run tools/cmd/eventhandlers/main.go
|
||||||
|
|
||||||
// Connect is the data for a Connect event.
|
// Connect is the data for a Connect event.
|
||||||
// This is a synthetic event and is not dispatched by Discord.
|
// This is a sythetic event and is not dispatched by Discord.
|
||||||
type Connect struct{}
|
type Connect struct{}
|
||||||
|
|
||||||
// Disconnect is the data for a Disconnect event.
|
// Disconnect is the data for a Disconnect event.
|
||||||
// This is a synthetic event and is not dispatched by Discord.
|
// This is a sythetic event and is not dispatched by Discord.
|
||||||
type Disconnect struct{}
|
type Disconnect struct{}
|
||||||
|
|
||||||
// RateLimit is the data for a RateLimit event.
|
// RateLimit is the data for a RateLimit event.
|
||||||
// This is a synthetic event and is not dispatched by Discord.
|
// This is a sythetic event and is not dispatched by Discord.
|
||||||
type RateLimit struct {
|
type RateLimit struct {
|
||||||
*TooManyRequests
|
*TooManyRequests
|
||||||
URL string
|
URL string
|
||||||
@@ -162,8 +162,6 @@ type MessageCreate struct {
|
|||||||
// MessageUpdate is the data for a MessageUpdate event.
|
// MessageUpdate is the data for a MessageUpdate event.
|
||||||
type MessageUpdate struct {
|
type MessageUpdate struct {
|
||||||
*Message
|
*Message
|
||||||
// BeforeUpdate will be nil if the Message was not previously cached in the state cache.
|
|
||||||
BeforeUpdate *Message `json:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageDelete is the data for a MessageDelete event.
|
// MessageDelete is the data for a MessageDelete event.
|
||||||
|
|||||||
79
vendor/github.com/bwmarrin/discordgo/message.go
generated
vendored
79
vendor/github.com/bwmarrin/discordgo/message.go
generated
vendored
@@ -28,11 +28,6 @@ const (
|
|||||||
MessageTypeChannelIconChange
|
MessageTypeChannelIconChange
|
||||||
MessageTypeChannelPinnedMessage
|
MessageTypeChannelPinnedMessage
|
||||||
MessageTypeGuildMemberJoin
|
MessageTypeGuildMemberJoin
|
||||||
MessageTypeUserPremiumGuildSubscription
|
|
||||||
MessageTypeUserPremiumGuildSubscriptionTierOne
|
|
||||||
MessageTypeUserPremiumGuildSubscriptionTierTwo
|
|
||||||
MessageTypeUserPremiumGuildSubscriptionTierThree
|
|
||||||
MessageTypeChannelFollowAdd
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Message stores all data related to a specific Discord message.
|
// A Message stores all data related to a specific Discord message.
|
||||||
@@ -85,39 +80,11 @@ type Message struct {
|
|||||||
// A list of reactions to the message.
|
// A list of reactions to the message.
|
||||||
Reactions []*MessageReactions `json:"reactions"`
|
Reactions []*MessageReactions `json:"reactions"`
|
||||||
|
|
||||||
// Whether the message is pinned or not.
|
|
||||||
Pinned bool `json:"pinned"`
|
|
||||||
|
|
||||||
// The type of the message.
|
// The type of the message.
|
||||||
Type MessageType `json:"type"`
|
Type MessageType `json:"type"`
|
||||||
|
|
||||||
// The webhook ID of the message, if it was generated by a webhook
|
// The webhook ID of the message, if it was generated by a webhook
|
||||||
WebhookID string `json:"webhook_id"`
|
WebhookID string `json:"webhook_id"`
|
||||||
|
|
||||||
// Member properties for this message's author,
|
|
||||||
// contains only partial information
|
|
||||||
Member *Member `json:"member"`
|
|
||||||
|
|
||||||
// Channels specifically mentioned in this message
|
|
||||||
// Not all channel mentions in a message will appear in mention_channels.
|
|
||||||
// Only textual channels that are visible to everyone in a lurkable guild will ever be included.
|
|
||||||
// Only crossposted messages (via Channel Following) currently include mention_channels at all.
|
|
||||||
// If no mentions in the message meet these requirements, this field will not be sent.
|
|
||||||
MentionChannels []*Channel `json:"mention_channels"`
|
|
||||||
|
|
||||||
// Is sent with Rich Presence-related chat embeds
|
|
||||||
Activity *MessageActivity `json:"activity"`
|
|
||||||
|
|
||||||
// Is sent with Rich Presence-related chat embeds
|
|
||||||
Application *MessageApplication `json:"application"`
|
|
||||||
|
|
||||||
// MessageReference contains reference data sent with crossposted messages
|
|
||||||
MessageReference *MessageReference `json:"message_reference"`
|
|
||||||
|
|
||||||
// The flags of the message, which describe extra features of a message.
|
|
||||||
// This is a combination of bit masks; the presence of a certain permission can
|
|
||||||
// be checked by performing a bitwise AND between this int and the flag.
|
|
||||||
Flags int `json:"flags"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// File stores info about files you e.g. send in messages.
|
// File stores info about files you e.g. send in messages.
|
||||||
@@ -258,52 +225,6 @@ type MessageReactions struct {
|
|||||||
Emoji *Emoji `json:"emoji"`
|
Emoji *Emoji `json:"emoji"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageActivity is sent with Rich Presence-related chat embeds
|
|
||||||
type MessageActivity struct {
|
|
||||||
Type MessageActivityType `json:"type"`
|
|
||||||
PartyID string `json:"party_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// MessageActivityType is the type of message activity
|
|
||||||
type MessageActivityType int
|
|
||||||
|
|
||||||
// Constants for the different types of Message Activity
|
|
||||||
const (
|
|
||||||
MessageActivityTypeJoin = iota + 1
|
|
||||||
MessageActivityTypeSpectate
|
|
||||||
MessageActivityTypeListen
|
|
||||||
MessageActivityTypeJoinRequest
|
|
||||||
)
|
|
||||||
|
|
||||||
// MessageFlag describes an extra feature of the message
|
|
||||||
type MessageFlag int
|
|
||||||
|
|
||||||
// Constants for the different bit offsets of Message Flags
|
|
||||||
const (
|
|
||||||
// This message has been published to subscribed channels (via Channel Following)
|
|
||||||
MessageFlagCrossposted = 1 << iota
|
|
||||||
// This message originated from a message in another channel (via Channel Following)
|
|
||||||
MessageFlagIsCrosspost
|
|
||||||
// Do not include any embeds when serializing this message
|
|
||||||
MessageFlagSuppressEmbeds
|
|
||||||
)
|
|
||||||
|
|
||||||
// MessageApplication is sent with Rich Presence-related chat embeds
|
|
||||||
type MessageApplication struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
CoverImage string `json:"cover_image"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
Icon string `json:"icon"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// MessageReference contains reference data sent with crossposted messages
|
|
||||||
type MessageReference struct {
|
|
||||||
MessageID string `json:"message_id"`
|
|
||||||
ChannelID string `json:"channel_id"`
|
|
||||||
GuildID string `json:"guild_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContentWithMentionsReplaced will replace all @<id> mentions with the
|
// ContentWithMentionsReplaced will replace all @<id> mentions with the
|
||||||
// username of the mention.
|
// username of the mention.
|
||||||
func (m *Message) ContentWithMentionsReplaced() (content string) {
|
func (m *Message) ContentWithMentionsReplaced() (content string) {
|
||||||
|
|||||||
19
vendor/github.com/bwmarrin/discordgo/oauth2.go
generated
vendored
19
vendor/github.com/bwmarrin/discordgo/oauth2.go
generated
vendored
@@ -105,25 +105,6 @@ func (s *Session) ApplicationDelete(appID string) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Asset struct stores values for an asset of an application
|
|
||||||
type Asset struct {
|
|
||||||
Type int `json:"type"`
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationAssets returns an application's assets
|
|
||||||
func (s *Session) ApplicationAssets(appID string) (ass []*Asset, err error) {
|
|
||||||
|
|
||||||
body, err := s.RequestWithBucketID("GET", EndpointApplicationAssets(appID), nil, EndpointApplicationAssets(""))
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = unmarshal(body, &ass)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Code specific to Discord OAuth2 Application Bots
|
// Code specific to Discord OAuth2 Application Bots
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
83
vendor/github.com/bwmarrin/discordgo/restapi.go
generated
vendored
83
vendor/github.com/bwmarrin/discordgo/restapi.go
generated
vendored
@@ -90,7 +90,7 @@ func (s *Session) RequestWithLockedBucket(method, urlStr, contentType string, b
|
|||||||
|
|
||||||
req.Header.Set("Content-Type", contentType)
|
req.Header.Set("Content-Type", contentType)
|
||||||
// TODO: Make a configurable static variable.
|
// TODO: Make a configurable static variable.
|
||||||
req.Header.Set("User-Agent", s.UserAgent)
|
req.Header.Set("User-Agent", "DiscordBot (https://github.com/bwmarrin/discordgo, v"+VERSION+")")
|
||||||
|
|
||||||
if s.Debug {
|
if s.Debug {
|
||||||
for k, v := range req.Header {
|
for k, v := range req.Header {
|
||||||
@@ -617,10 +617,10 @@ func (s *Session) GuildCreate(name string) (st *Guild, err error) {
|
|||||||
// g : A GuildParams struct with the values Name, Region and VerificationLevel defined.
|
// g : A GuildParams struct with the values Name, Region and VerificationLevel defined.
|
||||||
func (s *Session) GuildEdit(guildID string, g GuildParams) (st *Guild, err error) {
|
func (s *Session) GuildEdit(guildID string, g GuildParams) (st *Guild, err error) {
|
||||||
|
|
||||||
// Bounds checking for VerificationLevel, interval: [0, 4]
|
// Bounds checking for VerificationLevel, interval: [0, 3]
|
||||||
if g.VerificationLevel != nil {
|
if g.VerificationLevel != nil {
|
||||||
val := *g.VerificationLevel
|
val := *g.VerificationLevel
|
||||||
if val < 0 || val > 4 {
|
if val < 0 || val > 3 {
|
||||||
err = ErrVerificationLevelBounds
|
err = ErrVerificationLevelBounds
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -675,7 +675,7 @@ func (s *Session) GuildLeave(guildID string) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// GuildBans returns an array of GuildBan structures for all bans of a
|
// GuildBans returns an array of User structures for all bans of a
|
||||||
// given guild.
|
// given guild.
|
||||||
// guildID : The ID of a Guild.
|
// guildID : The ID of a Guild.
|
||||||
func (s *Session) GuildBans(guildID string) (st []*GuildBan, err error) {
|
func (s *Session) GuildBans(guildID string) (st []*GuildBan, err error) {
|
||||||
@@ -2067,80 +2067,15 @@ func (s *Session) WebhookDeleteWithToken(webhookID, token string) (st *Webhook,
|
|||||||
// WebhookExecute executes a webhook.
|
// WebhookExecute executes a webhook.
|
||||||
// webhookID: The ID of a webhook.
|
// webhookID: The ID of a webhook.
|
||||||
// token : The auth token for the webhook
|
// token : The auth token for the webhook
|
||||||
// wait : Waits for server confirmation of message send and ensures that the return struct is populated (it is nil otherwise)
|
func (s *Session) WebhookExecute(webhookID, token string, wait bool, data *WebhookParams) (err error) {
|
||||||
//
|
|
||||||
// If `wait` is `false`, the returned *Message is always empty, because server
|
|
||||||
// does not provide the response data.
|
|
||||||
func (s *Session) WebhookExecute(webhookID, token string, wait bool, data *WebhookParams) (st *Message, err error) {
|
|
||||||
uri := EndpointWebhookToken(webhookID, token)
|
uri := EndpointWebhookToken(webhookID, token)
|
||||||
|
|
||||||
if wait {
|
if wait {
|
||||||
uri += "?wait=true"
|
uri += "?wait=true"
|
||||||
}
|
}
|
||||||
|
|
||||||
var response []byte
|
_, err = s.RequestWithBucketID("POST", uri, data, EndpointWebhookToken("", ""))
|
||||||
if data.File != nil {
|
|
||||||
body := &bytes.Buffer{}
|
|
||||||
bodywriter := multipart.NewWriter(body)
|
|
||||||
|
|
||||||
var payload []byte
|
|
||||||
payload, err = json.Marshal(data)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var p io.Writer
|
|
||||||
|
|
||||||
h := make(textproto.MIMEHeader)
|
|
||||||
h.Set("Content-Disposition", `form-data; name="payload_json"`)
|
|
||||||
h.Set("Content-Type", "application/json")
|
|
||||||
|
|
||||||
p, err = bodywriter.CreatePart(h)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = p.Write(payload); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
file := data.File
|
|
||||||
h := make(textproto.MIMEHeader)
|
|
||||||
h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="file"; filename="%s"`, quoteEscaper.Replace(file.Name)))
|
|
||||||
contentType := file.ContentType
|
|
||||||
if contentType == "" {
|
|
||||||
contentType = "application/octet-stream"
|
|
||||||
}
|
|
||||||
h.Set("Content-Type", contentType)
|
|
||||||
|
|
||||||
p, err = bodywriter.CreatePart(h)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = io.Copy(p, file.Reader); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = bodywriter.Close()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
response, err = s.request("POST", uri, bodywriter.FormDataContentType(), body.Bytes(), EndpointWebhookToken("", ""), 0)
|
|
||||||
} else {
|
|
||||||
response, err = s.RequestWithBucketID("POST", uri, data, EndpointWebhookToken("", ""))
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !wait {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = unmarshal(response, &st)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2150,8 +2085,6 @@ func (s *Session) WebhookExecute(webhookID, token string, wait bool, data *Webho
|
|||||||
// emojiID : Either the unicode emoji for the reaction, or a guild emoji identifier.
|
// emojiID : Either the unicode emoji for the reaction, or a guild emoji identifier.
|
||||||
func (s *Session) MessageReactionAdd(channelID, messageID, emojiID string) error {
|
func (s *Session) MessageReactionAdd(channelID, messageID, emojiID string) error {
|
||||||
|
|
||||||
// emoji such as #⃣ need to have # escaped
|
|
||||||
emojiID = strings.Replace(emojiID, "#", "%23", -1)
|
|
||||||
_, err := s.RequestWithBucketID("PUT", EndpointMessageReaction(channelID, messageID, emojiID, "@me"), nil, EndpointMessageReaction(channelID, "", "", ""))
|
_, err := s.RequestWithBucketID("PUT", EndpointMessageReaction(channelID, messageID, emojiID, "@me"), nil, EndpointMessageReaction(channelID, "", "", ""))
|
||||||
|
|
||||||
return err
|
return err
|
||||||
@@ -2164,8 +2097,6 @@ func (s *Session) MessageReactionAdd(channelID, messageID, emojiID string) error
|
|||||||
// userID : @me or ID of the user to delete the reaction for.
|
// userID : @me or ID of the user to delete the reaction for.
|
||||||
func (s *Session) MessageReactionRemove(channelID, messageID, emojiID, userID string) error {
|
func (s *Session) MessageReactionRemove(channelID, messageID, emojiID, userID string) error {
|
||||||
|
|
||||||
// emoji such as #⃣ need to have # escaped
|
|
||||||
emojiID = strings.Replace(emojiID, "#", "%23", -1)
|
|
||||||
_, err := s.RequestWithBucketID("DELETE", EndpointMessageReaction(channelID, messageID, emojiID, userID), nil, EndpointMessageReaction(channelID, "", "", ""))
|
_, err := s.RequestWithBucketID("DELETE", EndpointMessageReaction(channelID, messageID, emojiID, userID), nil, EndpointMessageReaction(channelID, "", "", ""))
|
||||||
|
|
||||||
return err
|
return err
|
||||||
@@ -2187,8 +2118,6 @@ func (s *Session) MessageReactionsRemoveAll(channelID, messageID string) error {
|
|||||||
// emojiID : Either the unicode emoji for the reaction, or a guild emoji identifier.
|
// emojiID : Either the unicode emoji for the reaction, or a guild emoji identifier.
|
||||||
// limit : max number of users to return (max 100)
|
// limit : max number of users to return (max 100)
|
||||||
func (s *Session) MessageReactions(channelID, messageID, emojiID string, limit int) (st []*User, err error) {
|
func (s *Session) MessageReactions(channelID, messageID, emojiID string, limit int) (st []*User, err error) {
|
||||||
// emoji such as #⃣ need to have # escaped
|
|
||||||
emojiID = strings.Replace(emojiID, "#", "%23", -1)
|
|
||||||
uri := EndpointMessageReactions(channelID, messageID, emojiID)
|
uri := EndpointMessageReactions(channelID, messageID, emojiID)
|
||||||
|
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
|
|||||||
7
vendor/github.com/bwmarrin/discordgo/state.go
generated
vendored
7
vendor/github.com/bwmarrin/discordgo/state.go
generated
vendored
@@ -882,13 +882,6 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
|
|||||||
}
|
}
|
||||||
case *MessageUpdate:
|
case *MessageUpdate:
|
||||||
if s.MaxMessageCount != 0 {
|
if s.MaxMessageCount != 0 {
|
||||||
var old *Message
|
|
||||||
old, err = s.Message(t.ChannelID, t.ID)
|
|
||||||
if err == nil {
|
|
||||||
oldCopy := *old
|
|
||||||
t.BeforeUpdate = &oldCopy
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.MessageAdd(t.Message)
|
err = s.MessageAdd(t.Message)
|
||||||
}
|
}
|
||||||
case *MessageDelete:
|
case *MessageDelete:
|
||||||
|
|||||||
68
vendor/github.com/bwmarrin/discordgo/structs.go
generated
vendored
68
vendor/github.com/bwmarrin/discordgo/structs.go
generated
vendored
@@ -15,7 +15,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -83,9 +82,6 @@ type Session struct {
|
|||||||
// The http client used for REST requests
|
// The http client used for REST requests
|
||||||
Client *http.Client
|
Client *http.Client
|
||||||
|
|
||||||
// The user agent used for REST APIs
|
|
||||||
UserAgent string
|
|
||||||
|
|
||||||
// Stores the last HeartbeatAck that was recieved (in UTC)
|
// Stores the last HeartbeatAck that was recieved (in UTC)
|
||||||
LastHeartbeatAck time.Time
|
LastHeartbeatAck time.Time
|
||||||
|
|
||||||
@@ -200,8 +196,6 @@ const (
|
|||||||
ChannelTypeGuildVoice
|
ChannelTypeGuildVoice
|
||||||
ChannelTypeGroupDM
|
ChannelTypeGroupDM
|
||||||
ChannelTypeGuildCategory
|
ChannelTypeGuildCategory
|
||||||
ChannelTypeGuildNews
|
|
||||||
ChannelTypeGuildStore
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Channel holds all data related to an individual Discord channel.
|
// A Channel holds all data related to an individual Discord channel.
|
||||||
@@ -226,10 +220,6 @@ type Channel struct {
|
|||||||
// guaranteed to be an ID of a valid message.
|
// guaranteed to be an ID of a valid message.
|
||||||
LastMessageID string `json:"last_message_id"`
|
LastMessageID string `json:"last_message_id"`
|
||||||
|
|
||||||
// The timestamp of the last pinned message in the channel.
|
|
||||||
// Empty if the channel has no pinned messages.
|
|
||||||
LastPinTimestamp Timestamp `json:"last_pin_timestamp"`
|
|
||||||
|
|
||||||
// Whether the channel is marked as NSFW.
|
// Whether the channel is marked as NSFW.
|
||||||
NSFW bool `json:"nsfw"`
|
NSFW bool `json:"nsfw"`
|
||||||
|
|
||||||
@@ -257,10 +247,6 @@ type Channel struct {
|
|||||||
|
|
||||||
// The ID of the parent channel, if the channel is under a category
|
// The ID of the parent channel, if the channel is under a category
|
||||||
ParentID string `json:"parent_id"`
|
ParentID string `json:"parent_id"`
|
||||||
|
|
||||||
// Amount of seconds a user has to wait before sending another message (0-21600)
|
|
||||||
// bots, as well as users with the permission manage_messages or manage_channel, are unaffected
|
|
||||||
RateLimitPerUser int `json:"rate_limit_per_user"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mention returns a string which mentions the channel
|
// Mention returns a string which mentions the channel
|
||||||
@@ -297,7 +283,6 @@ type Emoji struct {
|
|||||||
Managed bool `json:"managed"`
|
Managed bool `json:"managed"`
|
||||||
RequireColons bool `json:"require_colons"`
|
RequireColons bool `json:"require_colons"`
|
||||||
Animated bool `json:"animated"`
|
Animated bool `json:"animated"`
|
||||||
Available bool `json:"available"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageFormat returns a correctly formatted Emoji for use in Message content and embeds
|
// MessageFormat returns a correctly formatted Emoji for use in Message content and embeds
|
||||||
@@ -327,13 +312,12 @@ func (e *Emoji) APIName() string {
|
|||||||
// VerificationLevel type definition
|
// VerificationLevel type definition
|
||||||
type VerificationLevel int
|
type VerificationLevel int
|
||||||
|
|
||||||
// Constants for VerificationLevel levels from 0 to 4 inclusive
|
// Constants for VerificationLevel levels from 0 to 3 inclusive
|
||||||
const (
|
const (
|
||||||
VerificationLevelNone VerificationLevel = iota
|
VerificationLevelNone VerificationLevel = iota
|
||||||
VerificationLevelLow
|
VerificationLevelLow
|
||||||
VerificationLevelMedium
|
VerificationLevelMedium
|
||||||
VerificationLevelHigh
|
VerificationLevelHigh
|
||||||
VerificationLevelVeryHigh
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ExplicitContentFilterLevel type definition
|
// ExplicitContentFilterLevel type definition
|
||||||
@@ -355,17 +339,6 @@ const (
|
|||||||
MfaLevelElevated
|
MfaLevelElevated
|
||||||
)
|
)
|
||||||
|
|
||||||
// PremiumTier type definition
|
|
||||||
type PremiumTier int
|
|
||||||
|
|
||||||
// Constants for PremiumTier levels from 0 to 3 inclusive
|
|
||||||
const (
|
|
||||||
PremiumTierNone PremiumTier = iota
|
|
||||||
PremiumTier1
|
|
||||||
PremiumTier2
|
|
||||||
PremiumTier3
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
||||||
// sometimes referred to as Servers in the Discord client.
|
// sometimes referred to as Servers in the Discord client.
|
||||||
type Guild struct {
|
type Guild struct {
|
||||||
@@ -470,34 +443,6 @@ type Guild struct {
|
|||||||
|
|
||||||
// The Channel ID to which system messages are sent (eg join and leave messages)
|
// The Channel ID to which system messages are sent (eg join and leave messages)
|
||||||
SystemChannelID string `json:"system_channel_id"`
|
SystemChannelID string `json:"system_channel_id"`
|
||||||
|
|
||||||
// the vanity url code for the guild
|
|
||||||
VanityURLCode string `json:"vanity_url_code"`
|
|
||||||
|
|
||||||
// the description for the guild
|
|
||||||
Description string `json:"description"`
|
|
||||||
|
|
||||||
// The hash of the guild's banner
|
|
||||||
Banner string `json:"banner"`
|
|
||||||
|
|
||||||
// The premium tier of the guild
|
|
||||||
PremiumTier PremiumTier `json:"premium_tier"`
|
|
||||||
|
|
||||||
// The total number of users currently boosting this server
|
|
||||||
PremiumSubscriptionCount int `json:"premium_subscription_count"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// IconURL returns a URL to the guild's icon.
|
|
||||||
func (g *Guild) IconURL() string {
|
|
||||||
if g.Icon == "" {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(g.Icon, "a_") {
|
|
||||||
return EndpointGuildIconAnimated(g.ID, g.Icon)
|
|
||||||
}
|
|
||||||
|
|
||||||
return EndpointGuildIcon(g.ID, g.Icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// A UserGuild holds a brief version of a Guild
|
// A UserGuild holds a brief version of a Guild
|
||||||
@@ -672,9 +617,6 @@ type Member struct {
|
|||||||
|
|
||||||
// A list of IDs of the roles which are possessed by the member.
|
// A list of IDs of the roles which are possessed by the member.
|
||||||
Roles []string `json:"roles"`
|
Roles []string `json:"roles"`
|
||||||
|
|
||||||
// When the user used their Nitro boost on the server
|
|
||||||
PremiumSince Timestamp `json:"premium_since"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mention creates a member mention
|
// Mention creates a member mention
|
||||||
@@ -890,7 +832,7 @@ type WebhookParams struct {
|
|||||||
Username string `json:"username,omitempty"`
|
Username string `json:"username,omitempty"`
|
||||||
AvatarURL string `json:"avatar_url,omitempty"`
|
AvatarURL string `json:"avatar_url,omitempty"`
|
||||||
TTS bool `json:"tts,omitempty"`
|
TTS bool `json:"tts,omitempty"`
|
||||||
File *File `json:"-"`
|
File string `json:"file,omitempty"`
|
||||||
Embeds []*MessageEmbed `json:"embeds,omitempty"`
|
Embeds []*MessageEmbed `json:"embeds,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -930,7 +872,6 @@ const (
|
|||||||
PermissionVoiceDeafenMembers
|
PermissionVoiceDeafenMembers
|
||||||
PermissionVoiceMoveMembers
|
PermissionVoiceMoveMembers
|
||||||
PermissionVoiceUseVAD
|
PermissionVoiceUseVAD
|
||||||
PermissionVoicePrioritySpeaker = 1 << (iota + 2)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Constants for general management.
|
// Constants for general management.
|
||||||
@@ -966,8 +907,7 @@ const (
|
|||||||
PermissionVoiceMuteMembers |
|
PermissionVoiceMuteMembers |
|
||||||
PermissionVoiceDeafenMembers |
|
PermissionVoiceDeafenMembers |
|
||||||
PermissionVoiceMoveMembers |
|
PermissionVoiceMoveMembers |
|
||||||
PermissionVoiceUseVAD |
|
PermissionVoiceUseVAD
|
||||||
PermissionVoicePrioritySpeaker
|
|
||||||
PermissionAllChannel = PermissionAllText |
|
PermissionAllChannel = PermissionAllText |
|
||||||
PermissionAllVoice |
|
PermissionAllVoice |
|
||||||
PermissionCreateInstantInvite |
|
PermissionCreateInstantInvite |
|
||||||
@@ -1016,7 +956,7 @@ const (
|
|||||||
ErrCodeMissingAccess = 50001
|
ErrCodeMissingAccess = 50001
|
||||||
ErrCodeInvalidAccountType = 50002
|
ErrCodeInvalidAccountType = 50002
|
||||||
ErrCodeCannotExecuteActionOnDMChannel = 50003
|
ErrCodeCannotExecuteActionOnDMChannel = 50003
|
||||||
ErrCodeEmbedDisabled = 50004
|
ErrCodeEmbedCisabled = 50004
|
||||||
ErrCodeCannotEditFromAnotherUser = 50005
|
ErrCodeCannotEditFromAnotherUser = 50005
|
||||||
ErrCodeCannotSendEmptyMessage = 50006
|
ErrCodeCannotSendEmptyMessage = 50006
|
||||||
ErrCodeCannotSendMessagesToThisUser = 50007
|
ErrCodeCannotSendMessagesToThisUser = 50007
|
||||||
|
|||||||
17
vendor/github.com/bwmarrin/discordgo/util.go
generated
vendored
17
vendor/github.com/bwmarrin/discordgo/util.go
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
package discordgo
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SnowflakeTimestamp returns the creation time of a Snowflake ID relative to the creation of Discord.
|
|
||||||
func SnowflakeTimestamp(ID string) (t time.Time, err error) {
|
|
||||||
i, err := strconv.ParseInt(ID, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
timestamp := (i >> 22) + 1420070400000
|
|
||||||
t = time.Unix(timestamp/1000, 0)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
5
vendor/github.com/bwmarrin/discordgo/voice.go
generated
vendored
5
vendor/github.com/bwmarrin/discordgo/voice.go
generated
vendored
@@ -243,7 +243,6 @@ type voiceOP2 struct {
|
|||||||
Port int `json:"port"`
|
Port int `json:"port"`
|
||||||
Modes []string `json:"modes"`
|
Modes []string `json:"modes"`
|
||||||
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
||||||
IP string `json:"ip"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitUntilConnected waits for the Voice Connection to
|
// WaitUntilConnected waits for the Voice Connection to
|
||||||
@@ -543,7 +542,7 @@ func (v *VoiceConnection) udpOpen() (err error) {
|
|||||||
return fmt.Errorf("empty endpoint")
|
return fmt.Errorf("empty endpoint")
|
||||||
}
|
}
|
||||||
|
|
||||||
host := v.op2.IP + ":" + strconv.Itoa(v.op2.Port)
|
host := strings.TrimSuffix(v.endpoint, ":80") + ":" + strconv.Itoa(v.op2.Port)
|
||||||
addr, err := net.ResolveUDPAddr("udp", host)
|
addr, err := net.ResolveUDPAddr("udp", host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
v.log(LogWarning, "error resolving udp host %s, %s", host, err)
|
v.log(LogWarning, "error resolving udp host %s, %s", host, err)
|
||||||
@@ -594,7 +593,7 @@ func (v *VoiceConnection) udpOpen() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Grab port from position 68 and 69
|
// Grab port from position 68 and 69
|
||||||
port := binary.BigEndian.Uint16(rb[68:70])
|
port := binary.LittleEndian.Uint16(rb[68:70])
|
||||||
|
|
||||||
// Take the data from above and send it back to Discord to finalize
|
// Take the data from above and send it back to Discord to finalize
|
||||||
// the UDP connection handshake.
|
// the UDP connection handshake.
|
||||||
|
|||||||
22
vendor/github.com/bwmarrin/discordgo/wsapi.go
generated
vendored
22
vendor/github.com/bwmarrin/discordgo/wsapi.go
generated
vendored
@@ -261,6 +261,7 @@ type heartbeatOp struct {
|
|||||||
|
|
||||||
type helloOp struct {
|
type helloOp struct {
|
||||||
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
||||||
|
Trace []string `json:"_trace"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// FailedHeartbeatAcks is the Number of heartbeat intervals to wait until forcing a connection restart.
|
// FailedHeartbeatAcks is the Number of heartbeat intervals to wait until forcing a connection restart.
|
||||||
@@ -614,7 +615,11 @@ func (s *Session) ChannelVoiceJoin(gID, cID string, mute, deaf bool) (voice *Voi
|
|||||||
voice.session = s
|
voice.session = s
|
||||||
voice.Unlock()
|
voice.Unlock()
|
||||||
|
|
||||||
err = s.ChannelVoiceJoinManual(gID, cID, mute, deaf)
|
// Send the request to Discord that we want to join the voice channel
|
||||||
|
data := voiceChannelJoinOp{4, voiceChannelJoinData{&gID, &cID, mute, deaf}}
|
||||||
|
s.wsMutex.Lock()
|
||||||
|
err = s.wsConn.WriteJSON(data)
|
||||||
|
s.wsMutex.Unlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -635,25 +640,22 @@ func (s *Session) ChannelVoiceJoin(gID, cID string, mute, deaf bool) (voice *Voi
|
|||||||
// This should only be used when the VoiceServerUpdate will be intercepted and used elsewhere.
|
// This should only be used when the VoiceServerUpdate will be intercepted and used elsewhere.
|
||||||
//
|
//
|
||||||
// gID : Guild ID of the channel to join.
|
// gID : Guild ID of the channel to join.
|
||||||
// cID : Channel ID of the channel to join, leave empty to disconnect.
|
// cID : Channel ID of the channel to join.
|
||||||
// mute : If true, you will be set to muted upon joining.
|
// mute : If true, you will be set to muted upon joining.
|
||||||
// deaf : If true, you will be set to deafened upon joining.
|
// deaf : If true, you will be set to deafened upon joining.
|
||||||
func (s *Session) ChannelVoiceJoinManual(gID, cID string, mute, deaf bool) (err error) {
|
func (s *Session) ChannelVoiceJoinManual(gID, cID string, mute, deaf bool) (err error) {
|
||||||
|
|
||||||
s.log(LogInformational, "called")
|
s.log(LogInformational, "called")
|
||||||
|
|
||||||
var channelID *string
|
|
||||||
if cID == "" {
|
|
||||||
channelID = nil
|
|
||||||
} else {
|
|
||||||
channelID = &cID
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send the request to Discord that we want to join the voice channel
|
// Send the request to Discord that we want to join the voice channel
|
||||||
data := voiceChannelJoinOp{4, voiceChannelJoinData{&gID, channelID, mute, deaf}}
|
data := voiceChannelJoinOp{4, voiceChannelJoinData{&gID, &cID, mute, deaf}}
|
||||||
s.wsMutex.Lock()
|
s.wsMutex.Lock()
|
||||||
err = s.wsConn.WriteJSON(data)
|
err = s.wsConn.WriteJSON(data)
|
||||||
s.wsMutex.Unlock()
|
s.wsMutex.Unlock()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
vendor/github.com/d5/tengo/.goreleaser.yml
generated
vendored
6
vendor/github.com/d5/tengo/.goreleaser.yml
generated
vendored
@@ -1,8 +1,3 @@
|
|||||||
env:
|
|
||||||
- GO111MODULE=on
|
|
||||||
before:
|
|
||||||
hooks:
|
|
||||||
- go mod tidy
|
|
||||||
builds:
|
builds:
|
||||||
- env:
|
- env:
|
||||||
- CGO_ENABLED=0
|
- CGO_ENABLED=0
|
||||||
@@ -14,7 +9,6 @@ builds:
|
|||||||
- env:
|
- env:
|
||||||
- CGO_ENABLED=0
|
- CGO_ENABLED=0
|
||||||
main: ./cmd/tengomin/main.go
|
main: ./cmd/tengomin/main.go
|
||||||
id: tengomin
|
|
||||||
binary: tengomin
|
binary: tengomin
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
|||||||
6
vendor/github.com/d5/tengo/.travis.yml
generated
vendored
6
vendor/github.com/d5/tengo/.travis.yml
generated
vendored
@@ -1,13 +1,13 @@
|
|||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- "1.12"
|
- 1.9
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- env GO111MODULE=on go get -u golang.org/x/lint/golint
|
- go get -u golang.org/x/lint/golint
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- env GO111MODULE=on make test
|
- make test
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
- provider: script
|
- provider: script
|
||||||
|
|||||||
3
vendor/github.com/d5/tengo/go.mod
generated
vendored
3
vendor/github.com/d5/tengo/go.mod
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
module github.com/d5/tengo
|
|
||||||
|
|
||||||
go 1.12
|
|
||||||
0
vendor/github.com/d5/tengo/go.sum
generated
vendored
0
vendor/github.com/d5/tengo/go.sum
generated
vendored
20
vendor/github.com/d5/tengo/stdlib/base64.go
generated
vendored
20
vendor/github.com/d5/tengo/stdlib/base64.go
generated
vendored
@@ -1,20 +0,0 @@
|
|||||||
package stdlib
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"github.com/d5/tengo/objects"
|
|
||||||
)
|
|
||||||
|
|
||||||
var base64Module = map[string]objects.Object{
|
|
||||||
"encode": &objects.UserFunction{Value: FuncAYRS(base64.StdEncoding.EncodeToString)},
|
|
||||||
"decode": &objects.UserFunction{Value: FuncASRYE(base64.StdEncoding.DecodeString)},
|
|
||||||
|
|
||||||
"raw_encode": &objects.UserFunction{Value: FuncAYRS(base64.RawStdEncoding.EncodeToString)},
|
|
||||||
"raw_decode": &objects.UserFunction{Value: FuncASRYE(base64.RawStdEncoding.DecodeString)},
|
|
||||||
|
|
||||||
"url_encode": &objects.UserFunction{Value: FuncAYRS(base64.URLEncoding.EncodeToString)},
|
|
||||||
"url_decode": &objects.UserFunction{Value: FuncASRYE(base64.URLEncoding.DecodeString)},
|
|
||||||
|
|
||||||
"raw_url_encode": &objects.UserFunction{Value: FuncAYRS(base64.RawURLEncoding.EncodeToString)},
|
|
||||||
"raw_url_decode": &objects.UserFunction{Value: FuncASRYE(base64.RawURLEncoding.DecodeString)},
|
|
||||||
}
|
|
||||||
2
vendor/github.com/d5/tengo/stdlib/builtin_modules.go
generated
vendored
2
vendor/github.com/d5/tengo/stdlib/builtin_modules.go
generated
vendored
@@ -11,6 +11,4 @@ var BuiltinModules = map[string]map[string]objects.Object{
|
|||||||
"rand": randModule,
|
"rand": randModule,
|
||||||
"fmt": fmtModule,
|
"fmt": fmtModule,
|
||||||
"json": jsonModule,
|
"json": jsonModule,
|
||||||
"base64": base64Module,
|
|
||||||
"hex": hexModule,
|
|
||||||
}
|
}
|
||||||
|
|||||||
53
vendor/github.com/d5/tengo/stdlib/func_typedefs.go
generated
vendored
53
vendor/github.com/d5/tengo/stdlib/func_typedefs.go
generated
vendored
@@ -1036,29 +1036,6 @@ func FuncAYRIE(fn func([]byte) (int, error)) objects.CallableFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FuncAYRS transform a function of 'func([]byte) string' signature
|
|
||||||
// into CallableFunc type.
|
|
||||||
func FuncAYRS(fn func([]byte) string) objects.CallableFunc {
|
|
||||||
return func(args ...objects.Object) (ret objects.Object, err error) {
|
|
||||||
if len(args) != 1 {
|
|
||||||
return nil, objects.ErrWrongNumArguments
|
|
||||||
}
|
|
||||||
|
|
||||||
y1, ok := objects.ToByteSlice(args[0])
|
|
||||||
if !ok {
|
|
||||||
return nil, objects.ErrInvalidArgumentType{
|
|
||||||
Name: "first",
|
|
||||||
Expected: "bytes(compatible)",
|
|
||||||
Found: args[0].TypeName(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res := fn(y1)
|
|
||||||
|
|
||||||
return &objects.String{Value: res}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FuncASRIE transform a function of 'func(string) (int, error)' signature
|
// FuncASRIE transform a function of 'func(string) (int, error)' signature
|
||||||
// into CallableFunc type.
|
// into CallableFunc type.
|
||||||
func FuncASRIE(fn func(string) (int, error)) objects.CallableFunc {
|
func FuncASRIE(fn func(string) (int, error)) objects.CallableFunc {
|
||||||
@@ -1085,36 +1062,6 @@ func FuncASRIE(fn func(string) (int, error)) objects.CallableFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FuncASRYE transform a function of 'func(string) ([]byte, error)' signature
|
|
||||||
// into CallableFunc type.
|
|
||||||
func FuncASRYE(fn func(string) ([]byte, error)) objects.CallableFunc {
|
|
||||||
return func(args ...objects.Object) (ret objects.Object, err error) {
|
|
||||||
if len(args) != 1 {
|
|
||||||
return nil, objects.ErrWrongNumArguments
|
|
||||||
}
|
|
||||||
|
|
||||||
s1, ok := objects.ToString(args[0])
|
|
||||||
if !ok {
|
|
||||||
return nil, objects.ErrInvalidArgumentType{
|
|
||||||
Name: "first",
|
|
||||||
Expected: "string(compatible)",
|
|
||||||
Found: args[0].TypeName(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := fn(s1)
|
|
||||||
if err != nil {
|
|
||||||
return wrapError(err), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(res) > tengo.MaxBytesLen {
|
|
||||||
return nil, objects.ErrBytesLimit
|
|
||||||
}
|
|
||||||
|
|
||||||
return &objects.Bytes{Value: res}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FuncAIRSsE transform a function of 'func(int) ([]string, error)' signature
|
// FuncAIRSsE transform a function of 'func(int) ([]string, error)' signature
|
||||||
// into CallableFunc type.
|
// into CallableFunc type.
|
||||||
func FuncAIRSsE(fn func(int) ([]string, error)) objects.CallableFunc {
|
func FuncAIRSsE(fn func(int) ([]string, error)) objects.CallableFunc {
|
||||||
|
|||||||
53
vendor/github.com/d5/tengo/stdlib/gensrcmods.go
generated
vendored
Normal file
53
vendor/github.com/d5/tengo/stdlib/gensrcmods.go
generated
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
// +build ignore
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var tengoModFileRE = regexp.MustCompile(`^srcmod_(\w+).tengo$`)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
modules := make(map[string]string)
|
||||||
|
|
||||||
|
// enumerate all Tengo module files
|
||||||
|
files, err := ioutil.ReadDir(".")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, file := range files {
|
||||||
|
m := tengoModFileRE.FindStringSubmatch(file.Name())
|
||||||
|
if m != nil {
|
||||||
|
modName := m[1]
|
||||||
|
|
||||||
|
src, err := ioutil.ReadFile(file.Name())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("file '%s' read error: %s", file.Name(), err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
modules[modName] = string(src)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var out bytes.Buffer
|
||||||
|
out.WriteString(`// Code generated using gensrcmods.go; DO NOT EDIT.
|
||||||
|
|
||||||
|
package stdlib
|
||||||
|
|
||||||
|
// SourceModules are source type standard library modules.
|
||||||
|
var SourceModules = map[string]string{` + "\n")
|
||||||
|
for modName, modSrc := range modules {
|
||||||
|
out.WriteString("\t\"" + modName + "\": " + strconv.Quote(modSrc) + ",\n")
|
||||||
|
}
|
||||||
|
out.WriteString("}\n")
|
||||||
|
|
||||||
|
const target = "source_modules.go"
|
||||||
|
if err := ioutil.WriteFile(target, out.Bytes(), 0644); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
11
vendor/github.com/d5/tengo/stdlib/hex.go
generated
vendored
11
vendor/github.com/d5/tengo/stdlib/hex.go
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
package stdlib
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/hex"
|
|
||||||
"github.com/d5/tengo/objects"
|
|
||||||
)
|
|
||||||
|
|
||||||
var hexModule = map[string]objects.Object{
|
|
||||||
"encode": &objects.UserFunction{Value: FuncAYRS(hex.EncodeToString)},
|
|
||||||
"decode": &objects.UserFunction{Value: FuncASRYE(hex.DecodeString)},
|
|
||||||
}
|
|
||||||
13
vendor/github.com/gomarkdown/markdown/.gitignore
generated
vendored
13
vendor/github.com/gomarkdown/markdown/.gitignore
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
*.out
|
|
||||||
*.swp
|
|
||||||
*.8
|
|
||||||
*.6
|
|
||||||
_obj
|
|
||||||
_test*
|
|
||||||
markdown
|
|
||||||
tags
|
|
||||||
fuzz-workdir/
|
|
||||||
markdown-fuzz.zip
|
|
||||||
coverage.txt
|
|
||||||
testdata/*_got.md
|
|
||||||
testdata/*_ast.txt
|
|
||||||
7
vendor/github.com/gomarkdown/markdown/.gitpod
generated
vendored
7
vendor/github.com/gomarkdown/markdown/.gitpod
generated
vendored
@@ -1,7 +0,0 @@
|
|||||||
checkoutLocation: "src/github.com/gomarkdown/markdown"
|
|
||||||
workspaceLocation: "."
|
|
||||||
tasks:
|
|
||||||
- command: >
|
|
||||||
cd /workspace/src/github.com/gomarkdown/markdown &&
|
|
||||||
go get -v ./... &&
|
|
||||||
go test -c
|
|
||||||
17
vendor/github.com/gomarkdown/markdown/.travis.yml
generated
vendored
17
vendor/github.com/gomarkdown/markdown/.travis.yml
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
dist: bionic
|
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- "1.12.x"
|
|
||||||
|
|
||||||
install:
|
|
||||||
- go build -v ./...
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go test -v ./...
|
|
||||||
- go test -run=^$ -bench=BenchmarkReference -benchmem
|
|
||||||
- ./s/test_with_codecoverage.sh
|
|
||||||
- ./s/ci_fuzzit.sh
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
31
vendor/github.com/gomarkdown/markdown/LICENSE.txt
generated
vendored
31
vendor/github.com/gomarkdown/markdown/LICENSE.txt
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
Markdown is distributed under the Simplified BSD License:
|
|
||||||
|
|
||||||
Copyright © 2011 Russ Ross
|
|
||||||
Copyright © 2018 Krzysztof Kowalczyk
|
|
||||||
Copyright © 2018 Authors
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer in the documentation and/or other materials provided with
|
|
||||||
the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
||||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
325
vendor/github.com/gomarkdown/markdown/README.md
generated
vendored
325
vendor/github.com/gomarkdown/markdown/README.md
generated
vendored
@@ -1,325 +0,0 @@
|
|||||||
# Markdown Parser and HTML Renderer for Go
|
|
||||||
|
|
||||||
[](https://godoc.org/github.com/gomarkdown/markdown) [](https://codecov.io/gh/gomarkdown/markdown)
|
|
||||||
|
|
||||||
Package `github.com/gomarkdown/markdown` is a very fast Go library for parsing [Markdown](https://daringfireball.net/projects/markdown/) documents and rendering them to HTML.
|
|
||||||
|
|
||||||
It's fast and supports common extensions.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
go get -u github.com/gomarkdown/markdown
|
|
||||||
|
|
||||||
API Docs:
|
|
||||||
|
|
||||||
- https://godoc.org/github.com/gomarkdown/markdown : top level package
|
|
||||||
- https://godoc.org/github.com/gomarkdown/markdown/ast : defines abstract syntax tree of parsed markdown document
|
|
||||||
- https://godoc.org/github.com/gomarkdown/markdown/parser : parser
|
|
||||||
- https://godoc.org/github.com/gomarkdown/markdown/html : html renderer
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
To convert markdown text to HTML using reasonable defaults:
|
|
||||||
|
|
||||||
```go
|
|
||||||
md := []byte("## markdown document")
|
|
||||||
output := markdown.ToHTML(md, nil, nil)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Customizing markdown parser
|
|
||||||
|
|
||||||
Markdown format is loosely specified and there are multiple extensions invented after original specification was created.
|
|
||||||
|
|
||||||
The parser supports several [extensions](https://godoc.org/github.com/gomarkdown/markdown/parser#Extensions).
|
|
||||||
|
|
||||||
Default parser uses most common `parser.CommonExtensions` but you can easily use parser with custom extension:
|
|
||||||
|
|
||||||
```go
|
|
||||||
import (
|
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
"github.com/gomarkdown/markdown/parser"
|
|
||||||
)
|
|
||||||
|
|
||||||
extensions := parser.CommonExtensions | parser.AutoHeadingIDs
|
|
||||||
parser := parser.NewWithExtensions(extensions)
|
|
||||||
|
|
||||||
md := []byte("markdown text")
|
|
||||||
html := markdown.ToHTML(md, parser, nil)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Customizing HTML renderer
|
|
||||||
|
|
||||||
Similarly, HTML renderer can be configured with different [options](https://godoc.org/github.com/gomarkdown/markdown/html#RendererOptions)
|
|
||||||
|
|
||||||
Here's how to use a custom renderer:
|
|
||||||
|
|
||||||
```go
|
|
||||||
import (
|
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
"github.com/gomarkdown/markdown/html"
|
|
||||||
)
|
|
||||||
|
|
||||||
htmlFlags := html.CommonFlags | html.HrefTargetBlank
|
|
||||||
opts := html.RendererOptions{Flags: htmlFlags}
|
|
||||||
renderer := html.NewRenderer(opts)
|
|
||||||
|
|
||||||
md := []byte("markdown text")
|
|
||||||
html := markdown.ToHTML(md, nil, renderer)
|
|
||||||
```
|
|
||||||
|
|
||||||
HTML renderer also supports reusing most of the logic and overriding rendering of only specifc nodes.
|
|
||||||
|
|
||||||
You can provide [RenderNodeFunc](https://godoc.org/github.com/gomarkdown/markdown/html#RenderNodeFunc) in [RendererOptions](https://godoc.org/github.com/gomarkdown/markdown/html#RendererOptions).
|
|
||||||
|
|
||||||
The function is called for each node in AST, you can implement custom rendering logic and tell HTML renderer to skip rendering this node.
|
|
||||||
|
|
||||||
Here's the simplest example that drops all code blocks from the output:
|
|
||||||
|
|
||||||
````go
|
|
||||||
import (
|
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
"github.com/gomarkdown/markdown/ast"
|
|
||||||
"github.com/gomarkdown/markdown/html"
|
|
||||||
)
|
|
||||||
|
|
||||||
// return (ast.GoToNext, true) to tell html renderer to skip rendering this node
|
|
||||||
// (because you've rendered it)
|
|
||||||
func renderHookDropCodeBlock(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
|
|
||||||
// skip all nodes that are not CodeBlock nodes
|
|
||||||
if _, ok := node.(*ast.CodeBlock); !ok {
|
|
||||||
return ast.GoToNext, false
|
|
||||||
}
|
|
||||||
// custom rendering logic for ast.CodeBlock. By doing nothing it won't be
|
|
||||||
// present in the output
|
|
||||||
return ast.GoToNext, true
|
|
||||||
}
|
|
||||||
|
|
||||||
opts := html.RendererOptions{
|
|
||||||
Flags: html.CommonFlags,
|
|
||||||
RenderNodeHook: renderHookDropCodeBlock,
|
|
||||||
}
|
|
||||||
renderer := html.NewRenderer(opts)
|
|
||||||
md := "test\n```\nthis code block will be dropped from output\n```\ntext"
|
|
||||||
html := markdown.ToHTML([]byte(s), nil, renderer)
|
|
||||||
````
|
|
||||||
|
|
||||||
## Sanitize untrusted content
|
|
||||||
|
|
||||||
We don't protect against malicious content. When dealing with user-provided
|
|
||||||
markdown, run renderer HTML through HTML sanitizer such as [Bluemonday](https://github.com/microcosm-cc/bluemonday).
|
|
||||||
|
|
||||||
Here's an example of simple usage with Bluemonday:
|
|
||||||
|
|
||||||
```go
|
|
||||||
import (
|
|
||||||
"github.com/microcosm-cc/bluemonday"
|
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ...
|
|
||||||
maybeUnsafeHTML := markdown.ToHTML(md, nil, nil)
|
|
||||||
html := bluemonday.UGCPolicy().SanitizeBytes(maybeUnsafeHTML)
|
|
||||||
```
|
|
||||||
|
|
||||||
## mdtohtml command-line tool
|
|
||||||
|
|
||||||
https://github.com/gomarkdown/mdtohtml is a command-line markdown to html
|
|
||||||
converter built using this library.
|
|
||||||
|
|
||||||
You can also use it as an example of how to use the library.
|
|
||||||
|
|
||||||
You can install it with:
|
|
||||||
|
|
||||||
go get -u github.com/gomarkdown/mdtohtml
|
|
||||||
|
|
||||||
To run: `mdtohtml input-file [output-file]`
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **Compatibility**. The Markdown v1.0.3 test suite passes with
|
|
||||||
the `--tidy` option. Without `--tidy`, the differences are
|
|
||||||
mostly in whitespace and entity escaping, where this package is
|
|
||||||
more consistent and cleaner.
|
|
||||||
|
|
||||||
- **Common extensions**, including table support, fenced code
|
|
||||||
blocks, autolinks, strikethroughs, non-strict emphasis, etc.
|
|
||||||
|
|
||||||
- **Safety**. Markdown is paranoid when parsing, making it safe
|
|
||||||
to feed untrusted user input without fear of bad things
|
|
||||||
happening. The test suite stress tests this and there are no
|
|
||||||
known inputs that make it crash. If you find one, please let me
|
|
||||||
know and send me the input that does it.
|
|
||||||
|
|
||||||
NOTE: "safety" in this context means _runtime safety only_. In order to
|
|
||||||
protect yourself against JavaScript injection in untrusted content, see
|
|
||||||
[this example](https://github.com/gomarkdown/markdown#sanitize-untrusted-content).
|
|
||||||
|
|
||||||
- **Fast**. It is fast enough to render on-demand in
|
|
||||||
most web applications without having to cache the output.
|
|
||||||
|
|
||||||
- **Thread safety**. You can run multiple parsers in different
|
|
||||||
goroutines without ill effect. There is no dependence on global
|
|
||||||
shared state.
|
|
||||||
|
|
||||||
- **Minimal dependencies**. Only depends on standard library packages in Go.
|
|
||||||
|
|
||||||
- **Standards compliant**. Output successfully validates using the
|
|
||||||
W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
|
|
||||||
|
|
||||||
## Extensions
|
|
||||||
|
|
||||||
In addition to the standard markdown syntax, this package
|
|
||||||
implements the following extensions:
|
|
||||||
|
|
||||||
- **Intra-word emphasis supression**. The `_` character is
|
|
||||||
commonly used inside words when discussing code, so having
|
|
||||||
markdown interpret it as an emphasis command is usually the
|
|
||||||
wrong thing. We let you treat all emphasis markers as
|
|
||||||
normal characters when they occur inside a word.
|
|
||||||
|
|
||||||
- **Tables**. Tables can be created by drawing them in the input
|
|
||||||
using a simple syntax:
|
|
||||||
|
|
||||||
```
|
|
||||||
Name | Age
|
|
||||||
--------|------
|
|
||||||
Bob | 27
|
|
||||||
Alice | 23
|
|
||||||
```
|
|
||||||
|
|
||||||
Table footers are supported as well and can be added with equal signs (`=`):
|
|
||||||
|
|
||||||
```
|
|
||||||
Name | Age
|
|
||||||
--------|------
|
|
||||||
Bob | 27
|
|
||||||
Alice | 23
|
|
||||||
========|======
|
|
||||||
Total | 50
|
|
||||||
```
|
|
||||||
|
|
||||||
- **Fenced code blocks**. In addition to the normal 4-space
|
|
||||||
indentation to mark code blocks, you can explicitly mark them
|
|
||||||
and supply a language (to make syntax highlighting simple). Just
|
|
||||||
mark it like this:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func getTrue() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You can use 3 or more backticks to mark the beginning of the
|
|
||||||
block, and the same number to mark the end of the block.
|
|
||||||
|
|
||||||
- **Definition lists**. A simple definition list is made of a single-line
|
|
||||||
term followed by a colon and the definition for that term.
|
|
||||||
|
|
||||||
Cat
|
|
||||||
: Fluffy animal everyone likes
|
|
||||||
|
|
||||||
Internet
|
|
||||||
: Vector of transmission for pictures of cats
|
|
||||||
|
|
||||||
Terms must be separated from the previous definition by a blank line.
|
|
||||||
|
|
||||||
- **Footnotes**. A marker in the text that will become a superscript number;
|
|
||||||
a footnote definition that will be placed in a list of footnotes at the
|
|
||||||
end of the document. A footnote looks like this:
|
|
||||||
|
|
||||||
This is a footnote.[^1]
|
|
||||||
|
|
||||||
[^1]: the footnote text.
|
|
||||||
|
|
||||||
- **Autolinking**. We can find URLs that have not been
|
|
||||||
explicitly marked as links and turn them into links.
|
|
||||||
|
|
||||||
- **Strikethrough**. Use two tildes (`~~`) to mark text that
|
|
||||||
should be crossed out.
|
|
||||||
|
|
||||||
- **Hard line breaks**. With this extension enabled newlines in the input
|
|
||||||
translate into line breaks in the output. This extension is off by default.
|
|
||||||
|
|
||||||
- **Non blocking space**. With this extension enabled spaces preceeded by an backslash n the input
|
|
||||||
translate non-blocking spaces in the output. This extension is off by default.
|
|
||||||
|
|
||||||
- **Smart quotes**. Smartypants-style punctuation substitution is
|
|
||||||
supported, turning normal double- and single-quote marks into
|
|
||||||
curly quotes, etc.
|
|
||||||
|
|
||||||
- **LaTeX-style dash parsing** is an additional option, where `--`
|
|
||||||
is translated into `–`, and `---` is translated into
|
|
||||||
`—`. This differs from most smartypants processors, which
|
|
||||||
turn a single hyphen into an ndash and a double hyphen into an
|
|
||||||
mdash.
|
|
||||||
|
|
||||||
- **Smart fractions**, where anything that looks like a fraction
|
|
||||||
is translated into suitable HTML (instead of just a few special
|
|
||||||
cases like most smartypant processors). For example, `4/5`
|
|
||||||
becomes `<sup>4</sup>⁄<sub>5</sub>`, which renders as
|
|
||||||
<sup>4</sup>⁄<sub>5</sub>.
|
|
||||||
|
|
||||||
- **MathJaX Support** is an additional feature which is supported by
|
|
||||||
many markdown editor. It translate inline math equation quoted by `$`
|
|
||||||
and display math block quoted by `$$` into MathJax compatible format.
|
|
||||||
hyphen `_` won't break LaTeX render within a math element any more.
|
|
||||||
|
|
||||||
```
|
|
||||||
$$
|
|
||||||
\left[ \begin{array}{a} a^l_1 \\ ⋮ \\ a^l_{d_l} \end{array}\right]
|
|
||||||
= \sigma(
|
|
||||||
\left[ \begin{matrix}
|
|
||||||
w^l_{1,1} & ⋯ & w^l_{1,d_{l-1}} \\
|
|
||||||
⋮ & ⋱ & ⋮ \\
|
|
||||||
w^l_{d_l,1} & ⋯ & w^l_{d_l,d_{l-1}} \\
|
|
||||||
\end{matrix}\right] ·
|
|
||||||
\left[ \begin{array}{x} a^{l-1}_1 \\ ⋮ \\ ⋮ \\ a^{l-1}_{d_{l-1}} \end{array}\right] +
|
|
||||||
\left[ \begin{array}{b} b^l_1 \\ ⋮ \\ b^l_{d_l} \end{array}\right])
|
|
||||||
$$
|
|
||||||
```
|
|
||||||
|
|
||||||
- **Ordered list start number**. With this extension enabled an ordered list will start with the
|
|
||||||
the number that was used to start it.
|
|
||||||
|
|
||||||
- **Super and subscript**. With this extension enabled sequences between ^ will indicate
|
|
||||||
superscript and ~ will become a subscript. For example: H~2~O is a liquid, 2^10^ is 1024.
|
|
||||||
|
|
||||||
- **Block level attributes**, allow setting attributes (ID, classes and key/value pairs) on block
|
|
||||||
level elements. The attribute must be enclosed with braces and be put on a line before the
|
|
||||||
element.
|
|
||||||
|
|
||||||
```
|
|
||||||
{#id3 .myclass fontsize="tiny"}
|
|
||||||
# Header 1
|
|
||||||
```
|
|
||||||
|
|
||||||
Will convert into `<h1 id="id3" class="myclass" fontsize="tiny">Header 1</h1>`.
|
|
||||||
|
|
||||||
- **Mmark support**, see <https://mmark.nl/syntax> for all new syntax elements this adds.
|
|
||||||
|
|
||||||
## Todo
|
|
||||||
|
|
||||||
- port https://github.com/russross/blackfriday/issues/348
|
|
||||||
- port [LaTeX output](https://github.com/Ambrevar/Blackfriday-LaTeX):
|
|
||||||
renders output as LaTeX.
|
|
||||||
- port https://github.com/shurcooL/github_flavored_markdown to markdown
|
|
||||||
- port [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
|
|
||||||
but for markdown.
|
|
||||||
- More unit testing
|
|
||||||
- Improve unicode support. It does not understand all unicode
|
|
||||||
rules (about what constitutes a letter, a punctuation symbol,
|
|
||||||
etc.), so it may fail to detect word boundaries correctly in
|
|
||||||
some instances. It is safe on all utf-8 input.
|
|
||||||
|
|
||||||
## History
|
|
||||||
|
|
||||||
markdown is a fork of v2 of https://github.com/russross/blackfriday that is:
|
|
||||||
|
|
||||||
- actively maintained (sadly in Feb 2018 blackfriday was inactive for 5 months with many bugs and pull requests accumulated)
|
|
||||||
- refactored API (split into ast/parser/html sub-packages)
|
|
||||||
|
|
||||||
Blackfriday itself was based on C implementation [sundown](https://github.com/vmg/sundown) which in turn was based on [libsoldout](http://fossil.instinctive.eu/libsoldout/home).
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[Simplified BSD License](LICENSE.txt)
|
|
||||||
10
vendor/github.com/gomarkdown/markdown/ast/attribute.go
generated
vendored
10
vendor/github.com/gomarkdown/markdown/ast/attribute.go
generated
vendored
@@ -1,10 +0,0 @@
|
|||||||
package ast
|
|
||||||
|
|
||||||
// An attribute can be attached to block elements. They are specified as
|
|
||||||
// {#id .classs key="value"} where quotes for values are mandatory, multiple
|
|
||||||
// key/value pairs are separated by whitespace.
|
|
||||||
type Attribute struct {
|
|
||||||
ID []byte
|
|
||||||
Classes [][]byte
|
|
||||||
Attrs map[string][]byte
|
|
||||||
}
|
|
||||||
4
vendor/github.com/gomarkdown/markdown/ast/doc.go
generated
vendored
4
vendor/github.com/gomarkdown/markdown/ast/doc.go
generated
vendored
@@ -1,4 +0,0 @@
|
|||||||
/*
|
|
||||||
Package ast defines tree representation of a parsed markdown document.
|
|
||||||
*/
|
|
||||||
package ast
|
|
||||||
559
vendor/github.com/gomarkdown/markdown/ast/node.go
generated
vendored
559
vendor/github.com/gomarkdown/markdown/ast/node.go
generated
vendored
@@ -1,559 +0,0 @@
|
|||||||
package ast
|
|
||||||
|
|
||||||
// ListType contains bitwise or'ed flags for list and list item objects.
|
|
||||||
type ListType int
|
|
||||||
|
|
||||||
// These are the possible flag values for the ListItem renderer.
|
|
||||||
// Multiple flag values may be ORed together.
|
|
||||||
// These are mostly of interest if you are writing a new output format.
|
|
||||||
const (
|
|
||||||
ListTypeOrdered ListType = 1 << iota
|
|
||||||
ListTypeDefinition
|
|
||||||
ListTypeTerm
|
|
||||||
|
|
||||||
ListItemContainsBlock
|
|
||||||
ListItemBeginningOfList // TODO: figure out if this is of any use now
|
|
||||||
ListItemEndOfList
|
|
||||||
)
|
|
||||||
|
|
||||||
// CellAlignFlags holds a type of alignment in a table cell.
|
|
||||||
type CellAlignFlags int
|
|
||||||
|
|
||||||
// These are the possible flag values for the table cell renderer.
|
|
||||||
// Only a single one of these values will be used; they are not ORed together.
|
|
||||||
// These are mostly of interest if you are writing a new output format.
|
|
||||||
const (
|
|
||||||
TableAlignmentLeft CellAlignFlags = 1 << iota
|
|
||||||
TableAlignmentRight
|
|
||||||
TableAlignmentCenter = (TableAlignmentLeft | TableAlignmentRight)
|
|
||||||
)
|
|
||||||
|
|
||||||
func (a CellAlignFlags) String() string {
|
|
||||||
switch a {
|
|
||||||
case TableAlignmentLeft:
|
|
||||||
return "left"
|
|
||||||
case TableAlignmentRight:
|
|
||||||
return "right"
|
|
||||||
case TableAlignmentCenter:
|
|
||||||
return "center"
|
|
||||||
default:
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DocumentMatters holds the type of a {front,main,back}matter in the document
|
|
||||||
type DocumentMatters int
|
|
||||||
|
|
||||||
// These are all possible Document divisions.
|
|
||||||
const (
|
|
||||||
DocumentMatterNone DocumentMatters = iota
|
|
||||||
DocumentMatterFront
|
|
||||||
DocumentMatterMain
|
|
||||||
DocumentMatterBack
|
|
||||||
)
|
|
||||||
|
|
||||||
// CitationTypes holds the type of a citation, informative, normative or suppressed
|
|
||||||
type CitationTypes int
|
|
||||||
|
|
||||||
const (
|
|
||||||
CitationTypeNone CitationTypes = iota
|
|
||||||
CitationTypeSuppressed
|
|
||||||
CitationTypeInformative
|
|
||||||
CitationTypeNormative
|
|
||||||
)
|
|
||||||
|
|
||||||
// Node defines an ast node
|
|
||||||
type Node interface {
|
|
||||||
AsContainer() *Container
|
|
||||||
AsLeaf() *Leaf
|
|
||||||
GetParent() Node
|
|
||||||
SetParent(newParent Node)
|
|
||||||
GetChildren() []Node
|
|
||||||
SetChildren(newChildren []Node)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Container is a type of node that can contain children
|
|
||||||
type Container struct {
|
|
||||||
Parent Node
|
|
||||||
Children []Node
|
|
||||||
|
|
||||||
Literal []byte // Text contents of the leaf nodes
|
|
||||||
Content []byte // Markdown content of the block nodes
|
|
||||||
|
|
||||||
*Attribute // Block level attribute
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsContainer returns itself as *Container
|
|
||||||
func (c *Container) AsContainer() *Container {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsLeaf returns nil
|
|
||||||
func (c *Container) AsLeaf() *Leaf {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetParent returns parent node
|
|
||||||
func (c *Container) GetParent() Node {
|
|
||||||
return c.Parent
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetParent sets the parent node
|
|
||||||
func (c *Container) SetParent(newParent Node) {
|
|
||||||
c.Parent = newParent
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetChildren returns children nodes
|
|
||||||
func (c *Container) GetChildren() []Node {
|
|
||||||
return c.Children
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetChildren sets children node
|
|
||||||
func (c *Container) SetChildren(newChildren []Node) {
|
|
||||||
c.Children = newChildren
|
|
||||||
}
|
|
||||||
|
|
||||||
// Leaf is a type of node that cannot have children
|
|
||||||
type Leaf struct {
|
|
||||||
Parent Node
|
|
||||||
|
|
||||||
Literal []byte // Text contents of the leaf nodes
|
|
||||||
Content []byte // Markdown content of the block nodes
|
|
||||||
|
|
||||||
*Attribute // Block level attribute
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsContainer returns nil
|
|
||||||
func (l *Leaf) AsContainer() *Container {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsLeaf returns itself as *Leaf
|
|
||||||
func (l *Leaf) AsLeaf() *Leaf {
|
|
||||||
return l
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetParent returns parent node
|
|
||||||
func (l *Leaf) GetParent() Node {
|
|
||||||
return l.Parent
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetParent sets the parent nodd
|
|
||||||
func (l *Leaf) SetParent(newParent Node) {
|
|
||||||
l.Parent = newParent
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetChildren returns nil because Leaf cannot have children
|
|
||||||
func (l *Leaf) GetChildren() []Node {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetChildren will panic becuase Leaf cannot have children
|
|
||||||
func (l *Leaf) SetChildren(newChildren []Node) {
|
|
||||||
panic("leaf node cannot have children")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Document represents markdown document node, a root of ast
|
|
||||||
type Document struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// DocumentMatter represents markdown node that signals a document
|
|
||||||
// division: frontmatter, mainmatter or backmatter.
|
|
||||||
type DocumentMatter struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
Matter DocumentMatters
|
|
||||||
}
|
|
||||||
|
|
||||||
// BlockQuote represents markdown block quote node
|
|
||||||
type BlockQuote struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Aside represents an markdown aside node.
|
|
||||||
type Aside struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// List represents markdown list node
|
|
||||||
type List struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
ListFlags ListType
|
|
||||||
Tight bool // Skip <p>s around list item data if true
|
|
||||||
BulletChar byte // '*', '+' or '-' in bullet lists
|
|
||||||
Delimiter byte // '.' or ')' after the number in ordered lists
|
|
||||||
Start int // for ordered lists this indicates the starting number if > 0
|
|
||||||
RefLink []byte // If not nil, turns this list item into a footnote item and triggers different rendering
|
|
||||||
IsFootnotesList bool // This is a list of footnotes
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListItem represents markdown list item node
|
|
||||||
type ListItem struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
ListFlags ListType
|
|
||||||
Tight bool // Skip <p>s around list item data if true
|
|
||||||
BulletChar byte // '*', '+' or '-' in bullet lists
|
|
||||||
Delimiter byte // '.' or ')' after the number in ordered lists
|
|
||||||
RefLink []byte // If not nil, turns this list item into a footnote item and triggers different rendering
|
|
||||||
IsFootnotesList bool // This is a list of footnotes
|
|
||||||
}
|
|
||||||
|
|
||||||
// Paragraph represents markdown paragraph node
|
|
||||||
type Paragraph struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Math represents markdown MathAjax inline node
|
|
||||||
type Math struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// MathBlock represents markdown MathAjax block node
|
|
||||||
type MathBlock struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heading represents markdown heading node
|
|
||||||
type Heading struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
Level int // This holds the heading level number
|
|
||||||
HeadingID string // This might hold heading ID, if present
|
|
||||||
IsTitleblock bool // Specifies whether it's a title block
|
|
||||||
IsSpecial bool // We are a special heading (starts with .#)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HorizontalRule represents markdown horizontal rule node
|
|
||||||
type HorizontalRule struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Emph represents markdown emphasis node
|
|
||||||
type Emph struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Strong represents markdown strong node
|
|
||||||
type Strong struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Del represents markdown del node
|
|
||||||
type Del struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Link represents markdown link node
|
|
||||||
type Link struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
Destination []byte // Destination is what goes into a href
|
|
||||||
Title []byte // Title is the tooltip thing that goes in a title attribute
|
|
||||||
NoteID int // NoteID contains a serial number of a footnote, zero if it's not a footnote
|
|
||||||
Footnote Node // If it's a footnote, this is a direct link to the footnote Node. Otherwise nil.
|
|
||||||
DeferredID []byte // If a deferred link this holds the original ID.
|
|
||||||
}
|
|
||||||
|
|
||||||
// CrossReference is a reference node.
|
|
||||||
type CrossReference struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
Destination []byte // Destination is where the reference points to
|
|
||||||
}
|
|
||||||
|
|
||||||
// Citation is a citation node.
|
|
||||||
type Citation struct {
|
|
||||||
Leaf
|
|
||||||
|
|
||||||
Destination [][]byte // Destination is where the citation points to. Multiple ones are allowed.
|
|
||||||
Type []CitationTypes // 1:1 mapping of destination and citation type
|
|
||||||
Suffix [][]byte // Potential citation suffix, i.e. [@!RFC1035, p. 144]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Image represents markdown image node
|
|
||||||
type Image struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
Destination []byte // Destination is what goes into a href
|
|
||||||
Title []byte // Title is the tooltip thing that goes in a title attribute
|
|
||||||
}
|
|
||||||
|
|
||||||
// Text represents markdown text node
|
|
||||||
type Text struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTMLBlock represents markdown html node
|
|
||||||
type HTMLBlock struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// CodeBlock represents markdown code block node
|
|
||||||
type CodeBlock struct {
|
|
||||||
Leaf
|
|
||||||
|
|
||||||
IsFenced bool // Specifies whether it's a fenced code block or an indented one
|
|
||||||
Info []byte // This holds the info string
|
|
||||||
FenceChar byte
|
|
||||||
FenceLength int
|
|
||||||
FenceOffset int
|
|
||||||
}
|
|
||||||
|
|
||||||
// Softbreak represents markdown softbreak node
|
|
||||||
// Note: not used currently
|
|
||||||
type Softbreak struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hardbreak represents markdown hard break node
|
|
||||||
type Hardbreak struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// NonBlockingSpace represents markdown non-blocking space node
|
|
||||||
type NonBlockingSpace struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code represents markdown code node
|
|
||||||
type Code struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTMLSpan represents markdown html span node
|
|
||||||
type HTMLSpan struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Table represents markdown table node
|
|
||||||
type Table struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableCell represents markdown table cell node
|
|
||||||
type TableCell struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
IsHeader bool // This tells if it's under the header row
|
|
||||||
Align CellAlignFlags // This holds the value for align attribute
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableHeader represents markdown table head node
|
|
||||||
type TableHeader struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableBody represents markdown table body node
|
|
||||||
type TableBody struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableRow represents markdown table row node
|
|
||||||
type TableRow struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableFooter represents markdown table foot node
|
|
||||||
type TableFooter struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caption represents a figure, code or quote caption
|
|
||||||
type Caption struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
// CaptionFigure is a node (blockquote or codeblock) that has a caption
|
|
||||||
type CaptionFigure struct {
|
|
||||||
Container
|
|
||||||
|
|
||||||
HeadingID string // This might hold heading ID, if present
|
|
||||||
}
|
|
||||||
|
|
||||||
// Callout is a node that can exist both in text (where it is an actual node) and in a code block.
|
|
||||||
type Callout struct {
|
|
||||||
Leaf
|
|
||||||
|
|
||||||
ID []byte // number of this callout
|
|
||||||
}
|
|
||||||
|
|
||||||
// Index is a node that contains an Index item and an optional, subitem.
|
|
||||||
type Index struct {
|
|
||||||
Leaf
|
|
||||||
|
|
||||||
Primary bool
|
|
||||||
Item []byte
|
|
||||||
Subitem []byte
|
|
||||||
ID string // ID of the index
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subscript is a subscript node
|
|
||||||
type Subscript struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subscript is a superscript node
|
|
||||||
type Superscript struct {
|
|
||||||
Leaf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Footnotes is a node that contains all footnotes
|
|
||||||
type Footnotes struct {
|
|
||||||
Container
|
|
||||||
}
|
|
||||||
|
|
||||||
func removeNodeFromArray(a []Node, node Node) []Node {
|
|
||||||
n := len(a)
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
if a[i] == node {
|
|
||||||
return append(a[:i], a[i+1:]...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// AppendChild appends child to children of parent
|
|
||||||
// It panics if either node is nil.
|
|
||||||
func AppendChild(parent Node, child Node) {
|
|
||||||
RemoveFromTree(child)
|
|
||||||
child.SetParent(parent)
|
|
||||||
newChildren := append(parent.GetChildren(), child)
|
|
||||||
parent.SetChildren(newChildren)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RemoveFromTree removes this node from tree
|
|
||||||
func RemoveFromTree(n Node) {
|
|
||||||
if n.GetParent() == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// important: don't clear n.Children if n has no parent
|
|
||||||
// we're called from AppendChild and that might happen on a node
|
|
||||||
// that accumulated Children but hasn't been inserted into the tree
|
|
||||||
n.SetChildren(nil)
|
|
||||||
p := n.GetParent()
|
|
||||||
newChildren := removeNodeFromArray(p.GetChildren(), n)
|
|
||||||
if newChildren != nil {
|
|
||||||
p.SetChildren(newChildren)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLastChild returns last child of node n
|
|
||||||
// It's implemented as stand-alone function to keep Node interface small
|
|
||||||
func GetLastChild(n Node) Node {
|
|
||||||
a := n.GetChildren()
|
|
||||||
if len(a) > 0 {
|
|
||||||
return a[len(a)-1]
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetFirstChild returns first child of node n
|
|
||||||
// It's implemented as stand-alone function to keep Node interface small
|
|
||||||
func GetFirstChild(n Node) Node {
|
|
||||||
a := n.GetChildren()
|
|
||||||
if len(a) > 0 {
|
|
||||||
return a[0]
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetNextNode returns next sibling of node n (node after n)
|
|
||||||
// We can't make it part of Container or Leaf because we loose Node identity
|
|
||||||
func GetNextNode(n Node) Node {
|
|
||||||
parent := n.GetParent()
|
|
||||||
if parent == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
a := parent.GetChildren()
|
|
||||||
len := len(a) - 1
|
|
||||||
for i := 0; i < len; i++ {
|
|
||||||
if a[i] == n {
|
|
||||||
return a[i+1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetPrevNode returns previous sibling of node n (node before n)
|
|
||||||
// We can't make it part of Container or Leaf because we loose Node identity
|
|
||||||
func GetPrevNode(n Node) Node {
|
|
||||||
parent := n.GetParent()
|
|
||||||
if parent == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
a := parent.GetChildren()
|
|
||||||
len := len(a)
|
|
||||||
for i := 1; i < len; i++ {
|
|
||||||
if a[i] == n {
|
|
||||||
return a[i-1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// WalkStatus allows NodeVisitor to have some control over the tree traversal.
|
|
||||||
// It is returned from NodeVisitor and different values allow Node.Walk to
|
|
||||||
// decide which node to go to next.
|
|
||||||
type WalkStatus int
|
|
||||||
|
|
||||||
const (
|
|
||||||
// GoToNext is the default traversal of every node.
|
|
||||||
GoToNext WalkStatus = iota
|
|
||||||
// SkipChildren tells walker to skip all children of current node.
|
|
||||||
SkipChildren
|
|
||||||
// Terminate tells walker to terminate the traversal.
|
|
||||||
Terminate
|
|
||||||
)
|
|
||||||
|
|
||||||
// NodeVisitor is a callback to be called when traversing the syntax tree.
|
|
||||||
// Called twice for every node: once with entering=true when the branch is
|
|
||||||
// first visited, then with entering=false after all the children are done.
|
|
||||||
type NodeVisitor interface {
|
|
||||||
Visit(node Node, entering bool) WalkStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
// NodeVisitorFunc casts a function to match NodeVisitor interface
|
|
||||||
type NodeVisitorFunc func(node Node, entering bool) WalkStatus
|
|
||||||
|
|
||||||
// Walk traverses tree recursively
|
|
||||||
func Walk(n Node, visitor NodeVisitor) WalkStatus {
|
|
||||||
isContainer := n.AsContainer() != nil
|
|
||||||
status := visitor.Visit(n, true) // entering
|
|
||||||
if status == Terminate {
|
|
||||||
// even if terminating, close container node
|
|
||||||
if isContainer {
|
|
||||||
visitor.Visit(n, false)
|
|
||||||
}
|
|
||||||
return status
|
|
||||||
}
|
|
||||||
if isContainer && status != SkipChildren {
|
|
||||||
children := n.GetChildren()
|
|
||||||
for _, n := range children {
|
|
||||||
status = Walk(n, visitor)
|
|
||||||
if status == Terminate {
|
|
||||||
return status
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if isContainer {
|
|
||||||
status = visitor.Visit(n, false) // exiting
|
|
||||||
if status == Terminate {
|
|
||||||
return status
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return GoToNext
|
|
||||||
}
|
|
||||||
|
|
||||||
// Visit calls visitor function
|
|
||||||
func (f NodeVisitorFunc) Visit(node Node, entering bool) WalkStatus {
|
|
||||||
return f(node, entering)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WalkFunc is like Walk but accepts just a callback function
|
|
||||||
func WalkFunc(n Node, f NodeVisitorFunc) {
|
|
||||||
visitor := NodeVisitorFunc(f)
|
|
||||||
Walk(n, visitor)
|
|
||||||
}
|
|
||||||
165
vendor/github.com/gomarkdown/markdown/ast/print.go
generated
vendored
165
vendor/github.com/gomarkdown/markdown/ast/print.go
generated
vendored
@@ -1,165 +0,0 @@
|
|||||||
package ast
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Print is for debugging. It prints a string representation of parsed
|
|
||||||
// markdown doc (result of parser.Parse()) to dst.
|
|
||||||
//
|
|
||||||
// To make output readable, it shortens text output.
|
|
||||||
func Print(dst io.Writer, doc Node) {
|
|
||||||
PrintWithPrefix(dst, doc, " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrintWithPrefix is like Print but allows customizing prefix used for
|
|
||||||
// indentation. By default it's 2 spaces. You can change it to e.g. tab
|
|
||||||
// by passing "\t"
|
|
||||||
func PrintWithPrefix(w io.Writer, doc Node, prefix string) {
|
|
||||||
// for more compact output, don't print outer Document
|
|
||||||
if _, ok := doc.(*Document); ok {
|
|
||||||
for _, c := range doc.GetChildren() {
|
|
||||||
printRecur(w, c, prefix, 0)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printRecur(w, doc, prefix, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ToString is like Dump but returns result as a string
|
|
||||||
func ToString(doc Node) string {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
Print(&buf, doc)
|
|
||||||
return buf.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func contentToString(d1 []byte, d2 []byte) string {
|
|
||||||
if d1 != nil {
|
|
||||||
return string(d1)
|
|
||||||
}
|
|
||||||
if d2 != nil {
|
|
||||||
return string(d2)
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func getContent(node Node) string {
|
|
||||||
if c := node.AsContainer(); c != nil {
|
|
||||||
return contentToString(c.Literal, c.Content)
|
|
||||||
}
|
|
||||||
leaf := node.AsLeaf()
|
|
||||||
return contentToString(leaf.Literal, leaf.Content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func shortenString(s string, maxLen int) string {
|
|
||||||
// for cleaner, one-line ouput, replace some white-space chars
|
|
||||||
// with their escaped version
|
|
||||||
s = strings.Replace(s, "\n", `\n`, -1)
|
|
||||||
s = strings.Replace(s, "\r", `\r`, -1)
|
|
||||||
s = strings.Replace(s, "\t", `\t`, -1)
|
|
||||||
if maxLen < 0 {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
if len(s) < maxLen {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
// add "..." to indicate truncation
|
|
||||||
return s[:maxLen-3] + "..."
|
|
||||||
}
|
|
||||||
|
|
||||||
// get a short name of the type of v which excludes package name
|
|
||||||
// and strips "()" from the end
|
|
||||||
func getNodeType(node Node) string {
|
|
||||||
s := fmt.Sprintf("%T", node)
|
|
||||||
s = strings.TrimSuffix(s, "()")
|
|
||||||
if idx := strings.Index(s, "."); idx != -1 {
|
|
||||||
return s[idx+1:]
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
func printDefault(w io.Writer, indent string, typeName string, content string) {
|
|
||||||
content = strings.TrimSpace(content)
|
|
||||||
if len(content) > 0 {
|
|
||||||
fmt.Fprintf(w, "%s%s '%s'\n", indent, typeName, content)
|
|
||||||
} else {
|
|
||||||
fmt.Fprintf(w, "%s%s\n", indent, typeName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func getListFlags(f ListType) string {
|
|
||||||
var s string
|
|
||||||
if f&ListTypeOrdered != 0 {
|
|
||||||
s += "ordered "
|
|
||||||
}
|
|
||||||
if f&ListTypeDefinition != 0 {
|
|
||||||
s += "definition "
|
|
||||||
}
|
|
||||||
if f&ListTypeTerm != 0 {
|
|
||||||
s += "term "
|
|
||||||
}
|
|
||||||
if f&ListItemContainsBlock != 0 {
|
|
||||||
s += "has_block "
|
|
||||||
}
|
|
||||||
if f&ListItemBeginningOfList != 0 {
|
|
||||||
s += "start "
|
|
||||||
}
|
|
||||||
if f&ListItemEndOfList != 0 {
|
|
||||||
s += "end "
|
|
||||||
}
|
|
||||||
s = strings.TrimSpace(s)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
func printRecur(w io.Writer, node Node, prefix string, depth int) {
|
|
||||||
if node == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
indent := strings.Repeat(prefix, depth)
|
|
||||||
|
|
||||||
content := shortenString(getContent(node), 40)
|
|
||||||
typeName := getNodeType(node)
|
|
||||||
switch v := node.(type) {
|
|
||||||
case *Link:
|
|
||||||
content := "url=" + string(v.Destination)
|
|
||||||
printDefault(w, indent, typeName, content)
|
|
||||||
case *Image:
|
|
||||||
content := "url=" + string(v.Destination)
|
|
||||||
printDefault(w, indent, typeName, content)
|
|
||||||
case *List:
|
|
||||||
if v.Start > 1 {
|
|
||||||
content += fmt.Sprintf("start=%d ", v.Start)
|
|
||||||
}
|
|
||||||
if v.Tight {
|
|
||||||
content += "tight "
|
|
||||||
}
|
|
||||||
if v.IsFootnotesList {
|
|
||||||
content += "footnotes "
|
|
||||||
}
|
|
||||||
flags := getListFlags(v.ListFlags)
|
|
||||||
if len(flags) > 0 {
|
|
||||||
content += "flags=" + flags + " "
|
|
||||||
}
|
|
||||||
printDefault(w, indent, typeName, content)
|
|
||||||
case *ListItem:
|
|
||||||
if v.Tight {
|
|
||||||
content += "tight "
|
|
||||||
}
|
|
||||||
if v.IsFootnotesList {
|
|
||||||
content += "footnotes "
|
|
||||||
}
|
|
||||||
flags := getListFlags(v.ListFlags)
|
|
||||||
if len(flags) > 0 {
|
|
||||||
content += "flags=" + flags + " "
|
|
||||||
}
|
|
||||||
printDefault(w, indent, typeName, content)
|
|
||||||
default:
|
|
||||||
printDefault(w, indent, typeName, content)
|
|
||||||
}
|
|
||||||
for _, child := range node.GetChildren() {
|
|
||||||
printRecur(w, child, prefix, depth+1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
27
vendor/github.com/gomarkdown/markdown/changes-from-blackfriday.md
generated
vendored
27
vendor/github.com/gomarkdown/markdown/changes-from-blackfriday.md
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
## Changes from blackfriday
|
|
||||||
|
|
||||||
This library is derived from blackfriday library. Here's a list of changes.
|
|
||||||
|
|
||||||
**Redesigned API**
|
|
||||||
|
|
||||||
- split into 3 separate packages: ast, parser and html (for html renderer). This makes the API more manageable. It also separates e.g. parser option from renderer options
|
|
||||||
- changed how AST node is represented from union-like representation (manually keeping track of the type of the node) to using interface{} (which is a Go way to combine an arbitrary value with its type)
|
|
||||||
|
|
||||||
**Allow re-using most of html renderer logic**
|
|
||||||
|
|
||||||
You can implement your own renderer by implementing `Renderer` interface.
|
|
||||||
|
|
||||||
Implementing a full renderer is a lot of work and often you just want to tweak html rendering of few node typs.
|
|
||||||
|
|
||||||
I've added a way to hook `Renderer.Render` function in html renderer with a custom function that can take over rendering of specific nodes.
|
|
||||||
|
|
||||||
I use it myself to do syntax-highlighting of code snippets.
|
|
||||||
|
|
||||||
**Speed up go test**
|
|
||||||
|
|
||||||
Running `go test` was really slow (17 secs) because it did a poor man's version of fuzzing by feeding the parser all subsets of test strings in order to find panics
|
|
||||||
due to incorrect parsing logic.
|
|
||||||
|
|
||||||
I've moved that logic to `cmd/crashtest`, so that it can be run on CI but not slow down regular development.
|
|
||||||
|
|
||||||
Now `go test` is blazing fast.
|
|
||||||
8
vendor/github.com/gomarkdown/markdown/codecov.yml
generated
vendored
8
vendor/github.com/gomarkdown/markdown/codecov.yml
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
coverage:
|
|
||||||
status:
|
|
||||||
project:
|
|
||||||
default:
|
|
||||||
# basic
|
|
||||||
target: 60%
|
|
||||||
threshold: 2%
|
|
||||||
base: auto
|
|
||||||
35
vendor/github.com/gomarkdown/markdown/doc.go
generated
vendored
35
vendor/github.com/gomarkdown/markdown/doc.go
generated
vendored
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
Package markdown implements markdown parser and HTML renderer.
|
|
||||||
|
|
||||||
It parses markdown into AST format which can be serialized to HTML
|
|
||||||
(using html.Renderer) or possibly other formats (using alternate renderers).
|
|
||||||
|
|
||||||
Convert markdown to HTML
|
|
||||||
|
|
||||||
The simplest way to convert markdown document to HTML
|
|
||||||
|
|
||||||
md := []byte("## markdown document")
|
|
||||||
html := markdown.ToHTML(md, nil, nil)
|
|
||||||
|
|
||||||
Customizing parsing and HTML rendering
|
|
||||||
|
|
||||||
You can customize parser and HTML renderer:
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gomarkdown/markdown/parser"
|
|
||||||
"github.com/gomarkdown/markdown/renderer"
|
|
||||||
"github.com/gomarkdown/markdown"
|
|
||||||
)
|
|
||||||
extensions := parser.CommonExtensions | parser.AutoHeadingIDs
|
|
||||||
p := parser.NewWithExensions(extensions)
|
|
||||||
|
|
||||||
htmlFlags := html.CommonFlags | html.HrefTargetBlank
|
|
||||||
opts := html.RendererOptions{Flags: htmlFlags}
|
|
||||||
renderer := html.NewRenderer(opts)
|
|
||||||
|
|
||||||
md := []byte("markdown text")
|
|
||||||
html := markdown.ToHTML(md, p, renderer)
|
|
||||||
|
|
||||||
For a cmd-line tool see https://github.com/gomarkdown/mdtohtml
|
|
||||||
*/
|
|
||||||
package markdown
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user