-
Notifications
You must be signed in to change notification settings - Fork 376
/
discord.go
64 lines (58 loc) · 1.59 KB
/
discord.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package discordlog
import (
"encoding/base64"
"strings"
"berty.tech/berty/v2/go/pkg/errcode"
"github.com/itsTurnip/dishooks"
qrcode "github.com/skip2/go-qrcode"
)
// rooms are webhook URLs encoded in base64 to prevent most stupid bots to spam our channels.
//
// if we get spammed, then we can think about a better way to store secrets on the repo and in the releases.
const (
QRCodeRoom = "aHR0cHM6Ly9kaXNjb3JkYXBwLmNvbS9hcGkvd2ViaG9va3MvNzEyNjkwNTc5NTk0ODA1Mzc5L2R2OTFFX0pqM0xkYVdFM2p5N0N1TDAtMmRzQ1NTaE85Q2RGRG05QUhtQThCWFRXS0lEZ29jUFRFRDVyTU5KVlFkcFJ5"
)
const (
avatarURL = "https://assets.berty.tech/files/developer--berty_developer.png"
)
// ShareQRLink shares a link as a QR Code on discord.
func ShareQRLink(username, room, title, qrData, url string) error {
clearRoom, err := base64.StdEncoding.DecodeString(room)
if err != nil {
return errcode.TODO.Wrap(err)
}
webhook, err := dishooks.WebhookFromURL(string(clearRoom))
if err != nil {
return errcode.TODO.Wrap(err)
}
qr, err := qrcode.New(qrData, qrcode.Medium)
if err != nil {
return errcode.TODO.Wrap(err)
}
png, err := qr.PNG(256)
if err != nil {
return errcode.TODO.Wrap(err)
}
msg := &dishooks.WebhookMessage{
AvatarURL: avatarURL,
Username: username,
Content: title,
Embeds: []*dishooks.Embed{
{
Title: "Associated Link",
Description: url,
}, {
Title: "QR Data",
Description: qrData,
},
},
}
if strings.HasPrefix(url, "http") {
msg.Embeds[0].URL = url
}
_, err = webhook.SendFile(png, "qr.png", msg)
if err != nil {
return errcode.TODO.Wrap(err)
}
return nil
}