-
Notifications
You must be signed in to change notification settings - Fork 0
/
bits.go
84 lines (73 loc) · 1.52 KB
/
bits.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package permissions
//go:generate stringer -type=PermissionBit -trimprefix=PermissionBit -output bits_string.go
import (
"encoding/json"
"strconv"
)
type PermissionBit uint64
var _ json.Marshaler = (*PermissionBit)(nil)
var _ json.Unmarshaler = (*PermissionBit)(nil)
func (p *PermissionBit) MarshalJSON() ([]byte, error) {
return json.Marshal(strconv.FormatUint(uint64(*p), 10))
}
func (p *PermissionBit) UnmarshalJSON(bytes []byte) error {
var perms string
if err := json.Unmarshal(bytes, &perms); err != nil {
return err
}
v, err := strconv.ParseUint(perms, 10, 64)
if err != nil {
return err
}
*p = PermissionBit(v)
return nil
}
func (p PermissionBit) Has(bits PermissionBit) bool {
return (p & bits) == bits
}
func (p PermissionBit) HasOrAdmin(bits PermissionBit) bool {
return (p&bits) == bits || (p&Administrator) == Administrator
}
const (
CreateInstantInvite PermissionBit = 1 << iota
KickMembers
BanMembers
Administrator
ManageChannels
ManageGuild
AddReactions
ViewAuditLog
PrioritySpeaker
Stream
ViewChannel
SendMessages
SendTTSMessages
ManageMessages
EmbedLinks
AttachFiles
ReadMessageHistory
MentionEveryone
UseExternalEmojis
ViewGuildInsights
Connect
Speak
MuteMembers
DeafenMembers
MoveMembers
UseVAD
ChangeNickname
ManageNicknames
ManageRoles
ManageWebhooks
ManageEmojisAndStickers
UseApplicationCommands
RequestToSpeak
ManageEvents
ManageThreads
CreatePublicThreads
CreatePrivateThreads
UseExternalStickers
SendMessagesInThreads
StartEmbeddedActivities
ModerateMembers
)