forked from rebolek/gritter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgitter-tools.red
173 lines (157 loc) · 3 KB
/
gitter-tools.red
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
Red []
do %gitter-api.red
init-gitter: does [
do load %options.red
user: gitter/user-info
rooms: gitter/user-rooms user/id
room: select-room rooms "red/red" ; Remove later
]
select-room: function [
"Selects room by its name. Returns room ID."
rooms "Block of rooms"
name "Name of room"
/by "Select room by different field than name"
field
] [
unless by [field: 'name]
foreach room rooms [if equal? name room/:field [return room]]
none
]
list-rooms: function [
rooms
] [
foreach room rooms [
print room/name
]
]
strip-message: function [
"Remove unnecessary informations from message"
message
] [
message/html: none
message/author: any [all [message/fromUser message/fromUser/id] author]
message/fromUser: none
message/mentions: none
message/urls: none
message/issues: none
message/unread: none
message/readBy: none
message/meta: none
]
download-all-messages: func [
room
/only "Remove some unnecessary fields"
/to
filename
] [
unless exists? %messages/ [make-dir %messages/]
unless to [
filename: rejoin [%messages/ replace/all copy room/name #"/" #"-" %.red]
]
ret: gitter/get-messages room
if empty? ret [
; the room is empty
write filename ""
return none
]
if only [foreach message ret [strip-message message]]
last-id: ret/1/id
write filename mold/only reverse ret
until [
ret: gitter/get-messages/with room [beforeId: last-id]
if only [foreach message ret [strip-message message]]
unless empty? ret [
last-id: ret/1/id
write/append filename mold/only reverse ret
]
empty? ret
]
]
select-message: function [
"Select message by id"
messages
id
] [
foreach message messages [
if equal? id message/id [return message]
]
none
]
; --- searching
match-question: function [
"Return LOGIC! value indicating whether message contains question mark."
message
] [
not not find message #"?"
]
get-code: function [
"Returns block of code snippets or NONE"
message
] [
code: make block! 4
fence: "```"
parse message/text [
some [
thru fence
copy value
to fence
3 skip
(append code value)
]
]
either empty? code [none] [code]
]
get-all-code: function [
messages
] [
code: make map! []
foreach message messages [
code/(message/id): get-code message
]
code
]
; ---
stats: function [
messages
] [
users: #()
foreach message messages [
user: message/fromUser/username
unless users/:user [
users/:user: 0
]
users/:user: users/:user + 1
]
users
]
maximum-of: function [
series
] [
max: first series
pos: 1
forall next series [
if series/1 > max [
max: series/1
pos: index? series
]
]
at series pos
]
probe-messages: function [
messages
] [
foreach message messages [
print rejoin [message/fromUser/username " (" message/sent ") wrote:"]
print "---------------------------------------------------------------"
print message/text
print "---------------------------------------------------------------"
print ""
]
]
probe-rooms: function [
rooms
] [
foreach room rooms [
print rejoin [room/name ": #" room/id]
]
]