Discord Components & Role Selection (#5)
This commit is contained in:
72
discord/role.go
Normal file
72
discord/role.go
Normal file
@ -0,0 +1,72 @@
|
||||
package discord
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
"log"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
"github.com/yeslayla/birdbot/core"
|
||||
)
|
||||
|
||||
type Role struct {
|
||||
discord *Discord
|
||||
ID string
|
||||
|
||||
Name string
|
||||
Color color.Color
|
||||
}
|
||||
|
||||
// GetRole returns a role that exists on Discord
|
||||
func (discord *Discord) GetRole(name string) *Role {
|
||||
|
||||
roles, err := discord.session.GuildRoles(discord.guildID)
|
||||
if err != nil {
|
||||
log.Printf("Error occured listing roles: %s", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, role := range roles {
|
||||
if role.Managed {
|
||||
continue
|
||||
}
|
||||
if role.Name == name {
|
||||
|
||||
return &Role{
|
||||
Name: role.Name,
|
||||
Color: core.IntToColor(role.Color),
|
||||
discord: discord,
|
||||
ID: role.ID,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRoleAndCreate gets a role and creates it if it doesn't exist
|
||||
func (discord *Discord) GetRoleAndCreate(name string) *Role {
|
||||
role := discord.GetRole(name)
|
||||
if role != nil {
|
||||
return role
|
||||
}
|
||||
|
||||
if _, err := discord.session.GuildRoleCreate(discord.guildID, &discordgo.RoleParams{
|
||||
Name: name,
|
||||
Color: core.Int(0),
|
||||
}); err != nil {
|
||||
log.Printf("Failed to create role: %s", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return discord.GetRole(name)
|
||||
}
|
||||
|
||||
// Save updates the role on Discord
|
||||
func (role *Role) Save() {
|
||||
if _, err := role.discord.session.GuildRoleEdit(role.discord.guildID, role.ID, &discordgo.RoleParams{
|
||||
Name: role.Name,
|
||||
Color: core.Int(core.ColorToInt(role.Color)),
|
||||
}); err != nil {
|
||||
log.Printf("Failed to save role: %s", err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user