Kaynağa Gözat

Added support to get members from a group

thisnthat 8 ay önce
ebeveyn
işleme
151da1bcc8
1 değiştirilmiş dosya ile 48 ekleme ve 0 silme
  1. 48 0
      groups.go

+ 48 - 0
groups.go

@@ -1 +1,49 @@
 package discourse
+
+import (
+	"encoding/json"
+	"fmt"
+	"strings"
+)
+
+func GetGroupMembers(config APIConfig, groupName string, limit int) ([]string, error) {
+	offset := 0
+
+	members := []string{}
+
+	for {
+		url := fmt.Sprintf("%s/groups/%s/members.json?limit=%d&offset=%d", config.Endpoint, groupName, limit, offset)
+		req, _ := newGetRequest(config, url)
+		client := getClient(rl)
+		response, _ := client.Do(req)
+
+		var result *GroupResponse
+		json.NewDecoder(response.Body).Decode(&result)
+
+		if result.ErrorType != "" {
+			return nil, fmt.Errorf("failed to get discourse group memers. Error: %s", strings.Join(result.Errors, "; "))
+		}
+
+		for _, member := range result.Members {
+			members = append(members, member.Username)
+		}
+
+		if len(result.Members) < limit {
+			break
+		}
+
+		offset += limit
+	}
+
+	return members, nil
+}
+
+type GroupResponse struct {
+	Errors    []string      `json:"errors"`
+	ErrorType string        `json:"error_type"`
+	Members   []GroupMember `json:members"`
+}
+
+type GroupMember struct {
+	Username string `json:"username"`
+}