AtlatestRepositorysigil-discourse
1;;; (discourse admin) - Administrative functions.
2;;;
3;;; Functions for managing site settings and invites.
4
5(define-library (discourse admin)
6 (import (sigil core)
7 (sigil string)
8 (sigil dict)
9 (sigil json)
10 (discourse client))
12 (export discourse-list-site-settings
13 discourse-update-site-setting
14 discourse-create-invite)
16 (begin
18 ;;; List all site settings (admin endpoint).
19 (define (discourse-list-site-settings base-url api-key username)
20 (discourse-get/json api-key username
21 (discourse-url base-url "admin" "site_settings.json")))
23 ;;; Update a site setting (admin endpoint).
24 (define (discourse-update-site-setting base-url api-key username setting-name value)
25 (discourse-put/json api-key username
26 (discourse-url base-url "admin" "site_settings" (string-append setting-name ".json"))
27 #{ setting_name: value }))
29 ;;; Create an invite.
30 ;;;
31 ;;; group-ids is a comma-separated string of group IDs, or "" for none.
32 ;;;
33 ;;; Optional keyword parameters:
34 ;;; topic-id: integer topic ID — invite lands on this topic
35 ;;; group-names: comma-separated string of group names (alternative to group-ids)
36 (define (discourse-create-invite base-url api-key username email group-ids
37 (keys: (topic-id #f) (group-names #f)))
38 (let ((body (dict-merge #{ email: email
39 group_ids: group-ids }
40 (dict-filter (lambda (k v) v)
41 #{ topic_id: topic-id
42 group_names: group-names }))))
43 (discourse-post/json api-key username
44 (discourse-url base-url "invites.json")
45 body)))
47 ))