func removeRole(s *discordgo.Session, GuildID string, UserID string, arg string) string { fmt.Println("removeRole", arg) g, err := s.State.Guild(GuildID) if err != nil { fmt.Println(err) return "You f*****g broke it~" } exists, role := roleExists(g, arg) if !exists { return "I can't find such group~" } fmt.Println("Found?", exists, role) member, err := s.GuildMember(GuildID, UserID) if err != nil { fmt.Println(err) } pos := -1 for i, r := range member.Roles { if r == role.ID { pos = i break } } if pos < 0 { return fmt.Sprintf("You're already not subscribed to %s~", arg) } member.Roles = append(member.Roles[:pos], member.Roles[pos+1:]...) err = s.GuildMemberEdit(GuildID, UserID, member.Roles) if err != nil { fmt.Println(err) return "I can't touch that group dude, do it yourself~" } delete := true for _, member := range g.Members { if member.User.ID == UserID { continue // Ignore self since it's not updated here yet } for _, r := range member.Roles { if r == role.ID { delete = false break } } } fmt.Println("Should delete it?", delete) if delete { err := s.GuildRoleDelete(GuildID, role.ID) if err != nil { fmt.Println(err) return fmt.Sprintf("Unsubscribed from but failed to delete %s~", arg) } fmt.Println("Unsubscribed and deleted") return fmt.Sprintf("Unsubscribed from and deleted %s~", arg) } fmt.Println("Unsubscribed") return fmt.Sprintf("Unsubscribed from %s~", arg) }
func addRole(s *discordgo.Session, GuildID string, UserID string, arg string) string { g, err := s.State.Guild(GuildID) if err != nil { fmt.Println(err) return "You f*****g broke it~" } exists, role := roleExists(g, arg) if !exists { if !strings.HasPrefix(arg, "yes") { return fmt.Sprintf("I can't find such group~ Are you sure you didn't mistype it? Say **!subscribe yes %s** to create a new one~", arg) } if len(arg) < 5 { return "Are you sure you actually typed a name?~" } arg = arg[4:] exists, role = roleExists(g, arg) if !exists { newRole, err := s.GuildRoleCreate(GuildID) if err != nil { fmt.Println(err) return "Failed to create role" } role, err = s.GuildRoleEdit(GuildID, newRole.ID, arg, newRole.Color, newRole.Hoist, 37080064, true) if err != nil { fmt.Println(err) err = s.GuildRoleDelete(GuildID, newRole.ID) if err != nil { fmt.Println(err) } return "You f*****g broke it~" } fmt.Println(role) } else { return "Why are you trying to recreate that group?" } } member, err := s.GuildMember(GuildID, UserID) if err != nil { fmt.Println(err) return "" } if exists { for _, _role := range member.Roles { if _role == role.ID { return fmt.Sprintf("You're already subscribed to %s ~", arg) } } } newRoles := append(member.Roles, role.ID) err = s.GuildMemberEdit(GuildID, UserID, newRoles) if err != nil { fmt.Println(err) return "I can't touch that group dude, do it yourself~" } if exists { return fmt.Sprintf("You're now subscribed to %s~", arg) } return fmt.Sprintf("Created and subscribed to %s", arg) }