groups.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package discourse
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strings"
  6. )
  7. func GetGroupMembers(config APIConfig, groupName string, limit int) ([]string, error) {
  8. offset := 0
  9. members := []string{}
  10. for {
  11. url := fmt.Sprintf("%s/groups/%s/members.json?limit=%d&offset=%d", config.Endpoint, groupName, limit, offset)
  12. req, _ := newGetRequest(config, url)
  13. client := getClient(rl)
  14. response, _ := client.Do(req)
  15. var result *GroupResponse
  16. json.NewDecoder(response.Body).Decode(&result)
  17. if result.ErrorType != "" {
  18. return nil, fmt.Errorf("failed to get discourse group memers. Error: %s", strings.Join(result.Errors, "; "))
  19. }
  20. for _, member := range result.Members {
  21. members = append(members, member.Username)
  22. }
  23. if len(result.Members) < limit {
  24. break
  25. }
  26. offset += limit
  27. }
  28. return members, nil
  29. }
  30. type GroupResponse struct {
  31. Errors []string `json:"errors"`
  32. ErrorType string `json:"error_type"`
  33. Members []GroupMember `json:members"`
  34. }
  35. type GroupMember struct {
  36. Username string `json:"username"`
  37. }