slackup 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -0
- data/lib/slackup/version.rb +1 -1
- data/lib/slackup.rb +144 -21
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f775a52592ebb2b334b49c07577edb1d63ae909
|
4
|
+
data.tar.gz: c8f07567b097c4138ddccf4d1359c711d24dc6c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8991c5c8a2b0227974db3c2e0ccb33a3d6a69df8154145a1b9e90bfe9aa17a64fadb158999cf9867119a9b0f152744c9c6555359aec2dc0fd0c532d199ad494
|
7
|
+
data.tar.gz: 6dadcf2bc8c6adc5d0bd692800b541176a90664a7f93b251d9786e36e5727b9e09c8ee208c47bca2cef21e45cefa05d2a7da4c945e83638415cf53109fcea8cd
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -45,6 +45,8 @@ This gem is does the bare basics of backup and works for me.
|
|
45
45
|
|
46
46
|
It has no tests.
|
47
47
|
|
48
|
+
It depends on the ['slack-api' gem](https://github.com/aki017/slack-ruby-gem)
|
49
|
+
|
48
50
|
## Contributing
|
49
51
|
|
50
52
|
1. Fork it ( https://github.com/[my-github-username]/slackup/fork )
|
data/lib/slackup/version.rb
CHANGED
data/lib/slackup.rb
CHANGED
@@ -42,12 +42,18 @@ class Slackup
|
|
42
42
|
def execute
|
43
43
|
SEMAPHORE.synchronize do
|
44
44
|
authorize! &&
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
Dir.chdir(name) do
|
46
|
+
channels.each do |channel|
|
47
|
+
write_channel_messages(channel)
|
48
|
+
end
|
49
|
+
write_stars
|
50
|
+
write_users
|
51
|
+
Dir.chdir(ims_dir) do
|
52
|
+
im_list.each do |im|
|
53
|
+
write_im_messages(im)
|
54
|
+
end
|
55
|
+
end
|
48
56
|
end
|
49
|
-
write_stars
|
50
|
-
end
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
@@ -67,45 +73,162 @@ class Slackup
|
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
76
|
+
User = Struct.new(:user_hash) do
|
77
|
+
def id; user_hash["id"]; end
|
78
|
+
|
79
|
+
def name; user_hash["name"]; end
|
80
|
+
|
81
|
+
def deleted; user_hash["deleted"]; end
|
82
|
+
|
83
|
+
def color; user_hash["color"]; end
|
84
|
+
|
85
|
+
def profile; user_hash["profile"]; end
|
86
|
+
|
87
|
+
def admin?; user_hash["is_admin"]; end
|
88
|
+
|
89
|
+
def owner?; user_hash["is_owner"]; end
|
90
|
+
|
91
|
+
def has_2fa?; user_hash["has_2fa"]; end
|
92
|
+
|
93
|
+
def has_files?; user_hash["has_files"]; end
|
94
|
+
|
95
|
+
def to_hash; user_hash; end
|
96
|
+
end
|
97
|
+
# {
|
98
|
+
# "ok": true,
|
99
|
+
# "members": [
|
100
|
+
# {
|
101
|
+
# "id": "U023BECGF",
|
102
|
+
# "name": "bobby",
|
103
|
+
# "deleted": false,
|
104
|
+
# "color": "9f69e7",
|
105
|
+
# "profile": {
|
106
|
+
# "first_name": "Bobby",
|
107
|
+
# "last_name": "Tables",
|
108
|
+
# "real_name": "Bobby Tables",
|
109
|
+
# "email": "bobby@slack.com",
|
110
|
+
# "skype": "my-skype-name",
|
111
|
+
# "phone": "+1 (123) 456 7890",
|
112
|
+
# "image_24": "https:\/\/...",
|
113
|
+
# "image_32": "https:\/\/...",
|
114
|
+
# "image_48": "https:\/\/...",
|
115
|
+
# "image_72": "https:\/\/...",
|
116
|
+
# "image_192": "https:\/\/..."
|
117
|
+
# },
|
118
|
+
# "is_admin": true,
|
119
|
+
# "is_owner": true,
|
120
|
+
# "has_2fa": false,
|
121
|
+
# "has_files": true
|
122
|
+
# },
|
123
|
+
# ]
|
124
|
+
# }
|
70
125
|
def users
|
71
|
-
@users ||= Slack.users_list["members"]
|
126
|
+
@users ||= Slack.users_list["members"].map { |member| User.new(member) }
|
72
127
|
end
|
73
128
|
|
74
129
|
def channels
|
75
130
|
@channels ||= Slack.channels_list["channels"]
|
76
131
|
end
|
77
132
|
|
133
|
+
Im = Struct.new(:im_hash) do
|
134
|
+
def id; im_hash["id"]; end
|
135
|
+
|
136
|
+
def user; im_hash["user"]; end
|
137
|
+
end
|
138
|
+
# @return [Hash]
|
139
|
+
# @example
|
140
|
+
# {
|
141
|
+
# "ok"=>true,
|
142
|
+
# "ims"=>[
|
143
|
+
# {"id"=>"D1234567890", "is_im"=>true, "user"=>"USLACKBOT", "created"=>1372105335, "is_user_deleted"=>false},
|
144
|
+
# ]
|
145
|
+
# }
|
146
|
+
def im_list
|
147
|
+
@im_list ||= Slack.im_list["ims"].map { |im| Im.new(im) }
|
148
|
+
end
|
149
|
+
|
150
|
+
# @param im_id [String] is the 'channel' of the im, e.g. "D1234567890"
|
151
|
+
# @return [Hash]
|
152
|
+
# @example return
|
153
|
+
# {
|
154
|
+
# "ok": true,
|
155
|
+
# "latest": "1358547726.000003",
|
156
|
+
# "messages": [
|
157
|
+
# {
|
158
|
+
# "type": "message",
|
159
|
+
# "ts": "1358546515.000008",
|
160
|
+
# "user": "U2147483896",
|
161
|
+
# "text": "Hello"
|
162
|
+
# },
|
163
|
+
# ]
|
164
|
+
# "has_more": false
|
165
|
+
def im_history(im_id)
|
166
|
+
Slack.im_history(channel: im_id)
|
167
|
+
end
|
168
|
+
|
78
169
|
def write_channel_messages(channel)
|
79
|
-
messages = Slack.channels_history(
|
80
|
-
File.open(backup_filename(channel[
|
81
|
-
|
170
|
+
messages = Slack.channels_history(channel: channel["id"], count: "1000")["messages"]
|
171
|
+
File.open(backup_filename(channel["name"]), "w") do |f|
|
172
|
+
formatted_messages = format_channel_messages(messages)
|
173
|
+
f.write serialize(formatted_messages)
|
82
174
|
end
|
83
175
|
end
|
84
176
|
|
85
|
-
def
|
177
|
+
def format_messages(messages)
|
86
178
|
messages.reverse.map { |msg|
|
87
|
-
if
|
88
|
-
|
89
|
-
if user["id"] == msg["user"]
|
90
|
-
break msg["user"] = user["name"]
|
91
|
-
end
|
92
|
-
end
|
179
|
+
if msg.has_key?("text") && msg.has_key?("user")
|
180
|
+
msg["user"] = user_name(msg["user"])
|
93
181
|
msg
|
94
182
|
else
|
95
183
|
nil
|
96
184
|
end
|
97
|
-
}.compact
|
185
|
+
}.compact
|
186
|
+
end
|
187
|
+
|
188
|
+
alias_method :format_channel_messages, :format_messages
|
189
|
+
alias_method :format_im_messages, :format_messages
|
190
|
+
|
191
|
+
# gets user name for an id, if mapping is known, else returns the input
|
192
|
+
def user_name(user_id)
|
193
|
+
@user_names ||= users.each_with_object({}) {|user, lookup|
|
194
|
+
lookup[user.id] = user.name
|
195
|
+
}
|
196
|
+
@user_names.fetch(user_id) {
|
197
|
+
user_id
|
198
|
+
}
|
98
199
|
end
|
99
200
|
|
100
201
|
def write_stars
|
101
|
-
File.open(backup_filename("stars"),"w") do |f|
|
202
|
+
File.open(backup_filename("stars"), "w") do |f|
|
102
203
|
stars = Slack.stars_list(count: "1000", page: "1")
|
103
|
-
f.write(
|
204
|
+
f.write(serialize(stars))
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def write_users
|
209
|
+
File.open(backup_filename("users"), "w") do |f|
|
210
|
+
f.write(serialize(users.map(&:to_hash)))
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def serialize(obj)
|
215
|
+
obj.to_yaml
|
216
|
+
end
|
217
|
+
|
218
|
+
def write_im_messages(im)
|
219
|
+
messages = im_history(im.id)["messages"]
|
220
|
+
im_username = user_name(im.user).downcase.gsub(/\s+/, "-")
|
221
|
+
formatted_messages = format_im_messages(messages)
|
222
|
+
return if formatted_messages.empty?
|
223
|
+
File.open(backup_filename(im_username), "w") do |f|
|
224
|
+
f.write serialize(formatted_messages)
|
104
225
|
end
|
105
226
|
end
|
106
227
|
|
107
|
-
def
|
108
|
-
|
228
|
+
def ims_dir
|
229
|
+
@ims_dir ||= "ims"
|
230
|
+
FileUtils.mkdir_p(@ims_dir)
|
231
|
+
@ims_dir
|
109
232
|
end
|
110
233
|
|
111
234
|
def backup_filename(name)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slackup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Fleischer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-api
|