AtlatestRepositorysigil-discourse
sigil-discourse / tree / src / discourseadmin.sgl
1
;;; (discourse admin) - Administrative functions.2
;;;3
;;; Functions for managing site settings and invites.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-settings13
discourse-update-site-setting14
discourse-create-invite)16
(begin18
;;; List all site settings (admin endpoint).19
(define (discourse-list-site-settings base-url api-key username)20
(discourse-get/json api-key username21
(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 username26
(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 topic35
;;; group-names: comma-separated string of group names (alternative to group-ids)36
(define (discourse-create-invite base-url api-key username email group-ids37
(keys: (topic-id #f) (group-names #f)))38
(let ((body (dict-merge #{ email: email39
group_ids: group-ids }40
(dict-filter (lambda (k v) v)41
#{ topic_id: topic-id42
group_names: group-names }))))43
(discourse-post/json api-key username44
(discourse-url base-url "invites.json")45
body)))47
))