AtlatestRepositorysigil-discourse
1;;; (discourse groups) - Group management.
2;;;
3;;; Functions for listing, creating, and managing Discourse groups
4;;; and their members.
5
6(define-library (discourse groups)
7 (import (sigil core)
8 (sigil string)
9 (discourse client))
11 (export discourse-list-groups
12 discourse-get-group
13 discourse-create-group
14 discourse-delete-group
15 discourse-add-group-members
16 discourse-remove-group-members
17 discourse-list-group-members)
19 (begin
21 ;;; List all groups.
22 (define (discourse-list-groups base-url api-key username)
23 (discourse-get/json api-key username
24 (discourse-url base-url "groups.json")))
26 ;;; Get a group by name.
27 (define (discourse-get-group base-url api-key username group-name)
28 (discourse-get/json api-key username
29 (discourse-url base-url "groups" (string-append group-name ".json"))))
31 ;;; Create a new group (admin endpoint).
32 (define (discourse-create-group base-url api-key username group-name)
33 (discourse-post/json api-key username
34 (discourse-url base-url "admin" "groups.json")
35 #{ group: #{ name: group-name } }))
37 ;;; Delete a group (admin endpoint).
38 (define (discourse-delete-group base-url api-key username group-id)
39 (discourse-delete api-key username
40 (discourse-url base-url "admin" "groups" (string-append (number->string group-id) ".json"))))
42 ;;; Add members to a group.
43 ;;;
44 ;;; usernames is a comma-separated string.
45 (define (discourse-add-group-members base-url api-key username group-id usernames)
46 (discourse-put/json api-key username
47 (discourse-url base-url "groups" (number->string group-id) "members.json")
48 #{ usernames: usernames }))
50 ;;; Remove members from a group.
51 ;;;
52 ;;; usernames is a comma-separated string.
53 (define (discourse-remove-group-members base-url api-key username group-id usernames)
54 (discourse-delete/json api-key username
55 (discourse-url base-url "groups" (number->string group-id) "members.json")
56 #{ usernames: usernames }))
58 ;;; List members of a group.
59 (define (discourse-list-group-members base-url api-key username group-name)
60 (discourse-get/json api-key username
61 (discourse-url base-url "groups" group-name "members.json")))
63 ))