Skip to content

Commit ecda780

Browse files
authored
Merge pull request #61 from rneatherway/page-users
Add paging when fetching users
2 parents 2d8d997 + 587dcba commit ecda780

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

internal/slackclient/client.go

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ type User struct {
104104
}
105105

106106
type UsersResponse struct {
107+
CursorResponseMetadata
107108
Ok bool
108109
Members []User
109110
}
@@ -262,20 +263,32 @@ func (c *SlackClient) conversations() ([]Channel, error) {
262263
return channels, nil
263264
}
264265

265-
func (c *SlackClient) users(params map[string]string) (*UsersResponse, error) {
266-
body, err := c.get("users.list", nil)
267-
if err != nil {
268-
return nil, err
269-
}
266+
func (c *SlackClient) users() ([]User, error) {
267+
users := make([]User, 0, 100)
268+
resp := &UsersResponse{}
269+
for {
270+
body, err := c.get("users.list", map[string]string{
271+
"cursor": resp.ResponseMetadata.NextCursor,
272+
"limit": "1000",
273+
})
274+
if err != nil {
275+
return nil, err
276+
}
270277

271-
users := &UsersResponse{}
272-
err = json.Unmarshal(body, users)
273-
if err != nil {
274-
return nil, err
275-
}
278+
err = json.Unmarshal(body, resp)
279+
if err != nil {
280+
return nil, err
281+
}
276282

277-
if !users.Ok {
278-
return nil, fmt.Errorf("users response not OK: %s", body)
283+
if !resp.Ok {
284+
return nil, fmt.Errorf("users response not OK: %s", body)
285+
}
286+
287+
users = append(users, resp.Members...)
288+
289+
if resp.ResponseMetadata.NextCursor == "" {
290+
break
291+
}
279292
}
280293

281294
return users, nil
@@ -380,13 +393,13 @@ func (c *SlackClient) UsernameForID(id string) (string, error) {
380393
return name, nil
381394
}
382395

383-
ur, err := c.users(nil)
396+
ur, err := c.users()
384397
if err != nil {
385398
return "", err
386399
}
387400

388401
c.cache.Users = make(map[string]string)
389-
for _, ch := range ur.Members {
402+
for _, ch := range ur {
390403
c.cache.Users[ch.ID] = ch.Name
391404
}
392405

0 commit comments

Comments
 (0)