Discord Components & Role Selection (#5)

This commit is contained in:
2023-04-01 01:23:37 -04:00
committed by GitHub
parent 5e6a433b92
commit e1038a15cd
25 changed files with 696 additions and 31 deletions

View File

@ -9,6 +9,7 @@ import (
// NewUser creates a new user object from a discordgo.User object
func NewUser(user *discordgo.User) common.User {
if user == nil {
log.Print("Cannot user object, user is nil!")
return common.User{
@ -20,3 +21,38 @@ func NewUser(user *discordgo.User) common.User {
ID: user.ID,
}
}
// AssignRole adds a role to a user
func (discord *Discord) AssignRole(user common.User, role *Role) error {
return discord.session.GuildMemberRoleAdd(discord.guildID, user.ID, role.ID)
}
// UnassignRole removes a role from a user
func (discord *Discord) UnassignRole(user common.User, role *Role) error {
return discord.session.GuildMemberRoleRemove(discord.guildID, user.ID, role.ID)
}
// HasRole returns true when a user has a given role
func (discord *Discord) HasRole(user common.User, role *Role) bool {
return discord.HasAtLeastOneRole(user, []*Role{role})
}
// HasAtLeastOneRole returns true when a user has at one role from a given array
func (discord *Discord) HasAtLeastOneRole(user common.User, roles []*Role) bool {
member, err := discord.session.GuildMember(discord.guildID, user.ID)
if err != nil {
log.Printf("Failed to get member: %s", err)
return false
}
for _, v := range member.Roles {
for _, targetRole := range roles {
if v == targetRole.ID {
return true
}
}
}
return false
}