Utoljára aktív 1701943929

permoverwrites.go Eredeti
1func memberChannelPerms(g *discordgo.Guild, c *discordgo.Channel, m *discordgo.Member) int64 {
2 if g.OwnerID == m.User.ID {
3 return discordgo.PermissionAll
4 }
5
6 // Get everyone role of the guild
7 var everyoneRole *discordgo.Role
8
9 var roleMap = make(map[string]*discordgo.Role)
10 for _, role := range g.Roles {
11 roleMap[role.ID] = role
12 if role.ID == g.ID {
13 everyoneRole = role
14 }
15 }
16
17 var perms int64
18
19 // Apply everyone role
20 if everyoneRole != nil {
21 perms |= everyoneRole.Permissions
22 }
23
24 // Apply member roles
25 for _, role := range m.Roles {
26 if r, ok := roleMap[role]; ok {
27 perms |= r.Permissions
28 }
29 }
30
31 if perms&discordgo.PermissionAdministrator == discordgo.PermissionAdministrator {
32 return discordgo.PermissionAll // ADMINISTRATOR overrides all
33 }
34
35 // Now we have the base everyone perms, apply the rest of the perms in hierarchy order
36 var everyoneOverwrite *discordgo.PermissionOverwrite
37 var roleOverwrites []*discordgo.PermissionOverwrite
38 var memberOverwrites *discordgo.PermissionOverwrite
39
40 for _, overwrite := range c.PermissionOverwrites {
41 if overwrite.ID == g.ID {
42 everyoneOverwrite = overwrite
43 } else if overwrite.Type == discordgo.PermissionOverwriteTypeRole {
44 if slices.Contains(m.Roles, overwrite.ID) {
45 roleOverwrites = append(roleOverwrites, overwrite)
46 }
47 } else if overwrite.Type == discordgo.PermissionOverwriteTypeMember && overwrite.ID == m.User.ID {
48 if overwrite.ID == m.User.ID {
49 memberOverwrites = overwrite
50 }
51 }
52 }
53
54 // First, apply everyone overwrite
55 if everyoneOverwrite != nil {
56 perms &= ^everyoneOverwrite.Deny
57 perms |= everyoneOverwrite.Allow
58 }
59
60 // Next, apply role overwrites
61 for _, overwrite := range roleOverwrites {
62 perms &= ^overwrite.Deny
63 perms |= overwrite.Allow
64 }
65
66 // Finally, apply member overwrite
67 if memberOverwrites != nil {
68 perms &= ^memberOverwrites.Deny
69 perms |= memberOverwrites.Allow
70 }
71
72 return perms
73}
74