@@ -104,6 +104,7 @@ type User struct {
104
104
}
105
105
106
106
type UsersResponse struct {
107
+ CursorResponseMetadata
107
108
Ok bool
108
109
Members []User
109
110
}
@@ -262,20 +263,32 @@ func (c *SlackClient) conversations() ([]Channel, error) {
262
263
return channels , nil
263
264
}
264
265
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
+ }
270
277
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
+ }
276
282
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
+ }
279
292
}
280
293
281
294
return users , nil
@@ -380,13 +393,13 @@ func (c *SlackClient) UsernameForID(id string) (string, error) {
380
393
return name , nil
381
394
}
382
395
383
- ur , err := c .users (nil )
396
+ ur , err := c .users ()
384
397
if err != nil {
385
398
return "" , err
386
399
}
387
400
388
401
c .cache .Users = make (map [string ]string )
389
- for _ , ch := range ur . Members {
402
+ for _ , ch := range ur {
390
403
c .cache .Users [ch .ID ] = ch .Name
391
404
}
392
405
0 commit comments