package main import ( "regexp" "github.com/bwmarrin/discordgo" ) // True if user has ANY role passed in func hasRole(user *discordgo.Member, role ...Role) bool { for _, r := range role { if includes(user.Roles, r.ID) { return true } } return false } // True if user has ALL roles passed in func hasRoles(user *discordgo.Member, role ...Role) bool { for _, r := range role { if !includes(user.Roles, r.ID) { return false } } return true } func mentionsMe(msg *discordgo.Message) bool { for _, user := range msg.Mentions { if user != nil && user.ID == myselfID { return true } } return false } func includes(list []string, val string) bool { for _, x := range list { if x == val { return true } } return false } func SendDM(userID string, message string) error { ch, err := discord.UserChannelCreate(userID) // only creates it if it doesn"t already exist if err != nil { return err } _, err = discord.ChannelMessageSend(ch.ID, message) return err } func highestRole(user *discordgo.Member) *Role { for _, role := range staffRoles { if includes(user.Roles, role.ID) { return &role } } return nil } // true if user1 is higher than user2 // also false if user1 is staff and user2 is not func outranks(user1, user2 *discordgo.Member) bool { role := highestRole(user2) if role == nil { return IsUserStaff(user1) } if user1.User.ID == "96711543202254848" { // pepsi is poo poo and outranks nobody return false } return IsUserHigherThan(user1, *role) } // Get a Member from the Impact Discord func GetMember(userID string) (member *discordgo.Member, err error) { member, err = discord.State.Member(impactServer, userID) if err != nil { member, err = discord.GuildMember(impactServer, userID) } return member, err } func findNamedMatches(r *regexp.Regexp, str string) map[string]string { matches := r.FindStringSubmatch(str) names := r.SubexpNames() subs := map[string]string{} for i, sub := range matches { if names[i] != "" { subs[names[i]] = sub } } return subs }