scuzzy/permissions/permissions.go

103 lines
1.9 KiB
Go

package permissions
import (
"github.com/bwmarrin/discord.go"
"github.com/foxtrot/scuzzy/models"
"strings"
)
type AdminRole struct {
Name string
ID string
}
type Permissions struct {
AdminRoles []AdminRole
CommandRestrictions []models.CommandRestriction
Guild *discordgo.Guild
Config *models.Configuration
}
func New(config *models.Configuration, guild *discordgo.Guild) *Permissions {
var ars []AdminRole
for _, gRole := range guild.Roles {
for _, aRole := range config.AdminRoles {
if aRole != gRole.Name {
continue
}
ar := AdminRole{
Name: gRole.Name,
ID: gRole.ID,
}
ars = append(ars, ar)
}
}
var crs []models.CommandRestriction
for _, cRes := range config.CommandRestrictions {
cr := models.CommandRestriction{
Command: cRes.Command,
Mode: cRes.Mode,
Channels: cRes.Channels,
}
crs = append(crs, cr)
}
return &Permissions{
AdminRoles: ars,
CommandRestrictions: crs,
Config: config,
Guild: guild,
}
}
func (p *Permissions) CheckAdminRole(m *discordgo.Member) bool {
for _, aR := range p.AdminRoles {
for _, mID := range m.Roles {
if aR.ID == mID {
return true
}
}
}
return false
}
func (p *Permissions) CheckIgnoredUser(m *discordgo.User) bool {
for _, iU := range p.Config.IgnoredUsers {
if iU == m.ID {
return true
}
}
return false
}
func (p *Permissions) CheckCommandRestrictions(m *discordgo.MessageCreate) bool {
cName := strings.Split(m.Content, " ")[0]
cName = strings.Replace(cName, p.Config.CommandKey, "", 1)
cChanID := m.ChannelID
for _, cR := range p.CommandRestrictions {
if cName == cR.Command {
for _, cID := range cR.Channels {
if cID == cChanID && cR.Mode == "white" {
return true
} else if cID == cChanID && cR.Mode == "black" {
return false
}
}
if cR.Mode == "white" {
return false
} else {
return true
}
}
}
return true
}