OILS / devtools / services / zulip.sh View on Github | oilshell.org

90 lines, 44 significant
1#!/usr/bin/env bash
2#
3# Usage:
4# devtools/services/zulip.sh <function name>
5#
6# https://oilshell.zulipchat.com -> Personal -> Bots for email and API key
7#
8# To get a thread, you have to get the messages in the stream, and the filter
9# it with JQ.
10
11
12set -o nounset
13set -o pipefail
14set -o errexit
15
16my-curl() {
17 curl \
18 -s -S -X GET -G \
19 "$@"
20}
21
22messages-in-stream() {
23 local bot_email=$1
24 local bot_api_key=$2
25 local stream=${3:-'blog-ideas'}
26
27 local narrow='[{"operand": "'$stream'", "operator": "stream"}]'
28
29 # copied from example at https://zulip.com/api/get-messages
30 my-curl \
31 -u "$bot_email:$bot_api_key" \
32 -d 'anchor=newest' \
33 -d 'num_before=3000' \
34 -d 'num_after=0' \
35 -d 'apply_markdown=false' \
36 --data-urlencode narrow="$narrow" \
37 https://oilshell.zulipchat.com/api/v1/messages
38
39 # doesn't work
40 # --data-urlencode narrow='[{"operand": "0.8.4 Release Notes", "operator": "topic"}]' \
41}
42
43print-thread() {
44 # Get these from Zulip web interface
45 local bot_email=$1
46 local bot_api_key=$2
47 local stream=${3:-'oil-dev'}
48 local subject=${4:-'Test thread'}
49
50 # https://stackoverflow.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially/31791436
51
52 # JQ query
53 # - narrow to messages array
54 # - create record with content and subject field
55 # - select records where subject is "needle" var
56 # - print the content. -r prints it raw.
57
58 messages-in-stream "$bot_email" "$bot_api_key" "$stream" | \
59 jq --arg subject "$subject" -r \
60 '.messages[] | { content: .content, subject: .subject } |
61 select( .subject == $subject ) | (.content + "\n\n")'
62}
63
64#
65# These weren't needed
66#
67
68topics() {
69 local bot_email=$1
70 local bot_api_key=$2
71
72 # stream ID for #oil-dev. You get the max ID
73 local stream_id=121539
74
75 my-curl \
76 -u "$bot_email:$bot_api_key" \
77 https://oilshell.zulipchat.com/api/v1/users/me/$stream_id/topics
78}
79
80one-message() {
81 local bot_email=$1
82 local bot_api_key=$2
83
84 # message ID from max_id of topics
85 my-curl \
86 -u "$bot_email:$bot_api_key" \
87 https://oilshell.zulipchat.com/api/v1/messages/158997038
88}
89
90"$@"