shutwork 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +64 -1
- data/lib/shutwork/cli.rb +7 -3
- data/lib/shutwork/client.rb +12 -0
- data/lib/shutwork/command/base.rb +17 -1
- data/lib/shutwork/command/display.rb +54 -0
- data/lib/shutwork/command/help.rb +3 -3
- data/lib/shutwork/command/me.rb +5 -6
- data/lib/shutwork/command/rooms.rb +44 -15
- data/lib/shutwork/command/token.rb +5 -5
- data/lib/shutwork/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ff7c92d1e6570df34fa40f2fbcb6e7296a98439ecc067b1bb0435a93998ea01
|
4
|
+
data.tar.gz: 4280596b8d939771b5d4d7b85f5dbff32a38d1a780e2d78b6ef819d766327e00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eaa3804849dd7e30754697ba72a46c9465f1a7fc673c05dee40a3420937aba805a0c52586d56a73b5d58d17482c903eebf126c8a006db39d9631ea7387b9cb7d
|
7
|
+
data.tar.gz: 780e63d70d1b8d359260b8b2da437b1b8c15db4dc3fc296172e042768648800edb0ad31ecde2e315ac855762b58aa598df1487fb95ee17a9934eb98a5de79e21
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Shutwork
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.com/kayhide/shutwork.svg?branch=master)](https://travis-ci.com/kayhide/shutwork)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/shutwork.svg)](https://badge.fury.io/rb/shutwork)
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -10,7 +11,69 @@ Install `shutwork` as:
|
|
10
11
|
|
11
12
|
## Usage
|
12
13
|
|
13
|
-
|
14
|
+
### About me
|
15
|
+
|
16
|
+
To get me:
|
17
|
+
|
18
|
+
$ shutwork me
|
19
|
+
|
20
|
+
For the first time, it will complain about the absense of token and tell you what to do.
|
21
|
+
Follow the displayed instruction and supply your token.
|
22
|
+
|
23
|
+
When token is prepared, `me` command will show your account id and your name.
|
24
|
+
|
25
|
+
$ shutwork me
|
26
|
+
123456 Alice
|
27
|
+
|
28
|
+
### List rooms and messages
|
29
|
+
|
30
|
+
To get rooms:
|
31
|
+
|
32
|
+
$ shutwork rooms
|
33
|
+
12000000 A room
|
34
|
+
29000000 Bob
|
35
|
+
47000000 Another room
|
36
|
+
188000000 Yet anoter room
|
37
|
+
....
|
38
|
+
|
39
|
+
To get messages of a room:
|
40
|
+
|
41
|
+
$ shutwork rooms 12000000
|
42
|
+
----------------
|
43
|
+
2019-10-23 01:19:50 +0900 Alice
|
44
|
+
Hey, it is working!
|
45
|
+
----------------
|
46
|
+
2019-10-23 12:49:16 +0900 Bob
|
47
|
+
Wow, unbelievable!
|
48
|
+
----------------
|
49
|
+
....
|
50
|
+
|
51
|
+
### List members and files
|
52
|
+
|
53
|
+
To list memebers at a room:
|
54
|
+
|
55
|
+
$ shutwork rooms 12000000 --members
|
56
|
+
123456 Alice
|
57
|
+
29000000 Bob
|
58
|
+
...
|
59
|
+
|
60
|
+
To list files at a room:
|
61
|
+
|
62
|
+
$ shutwork rooms 12000000 --files
|
63
|
+
2016-08-30 16:12:31 +0900 544KB help_me.jpg
|
64
|
+
2016-09-02 12:26:26 +0900 229KB maybe_broken.jpg
|
65
|
+
2016-10-15 19:59:53 +0900 1.0MB smoking_melting.jpg
|
66
|
+
2016-11-23 21:52:26 +0900 253KB seriously_damaged.jpg
|
67
|
+
2017-01-28 16:05:37 +0900 204KB rip.jpg
|
68
|
+
...
|
69
|
+
|
70
|
+
|
71
|
+
### Note
|
72
|
+
|
73
|
+
Because of the limitation of Chatwork API, messages cannot be retrieved more than 100 items.
|
74
|
+
|
75
|
+
It only collects the most recent 100 messages.
|
76
|
+
|
14
77
|
|
15
78
|
|
16
79
|
## Development
|
data/lib/shutwork/cli.rb
CHANGED
@@ -31,11 +31,11 @@ module Shutwork
|
|
31
31
|
|
32
32
|
case command
|
33
33
|
when "me"
|
34
|
-
Shutwork::Command::Me.new.run
|
34
|
+
Shutwork::Command::Me.new.run ARGV.clone
|
35
35
|
when "rooms"
|
36
|
-
Shutwork::Command::Rooms.new.run
|
36
|
+
Shutwork::Command::Rooms.new.run ARGV.clone
|
37
37
|
when "token"
|
38
|
-
Shutwork::Command::Token.new.run
|
38
|
+
Shutwork::Command::Token.new.run ARGV.clone
|
39
39
|
when nil
|
40
40
|
Shutwork::Command::Help.new.run
|
41
41
|
else
|
@@ -56,6 +56,10 @@ module Shutwork
|
|
56
56
|
$stderr.puts "3. Check if it works as:"
|
57
57
|
$stderr.puts " shutwork me"
|
58
58
|
$stderr.puts
|
59
|
+
|
60
|
+
rescue Errno::EPIPE
|
61
|
+
exit 0
|
62
|
+
|
59
63
|
end
|
60
64
|
end
|
61
65
|
end
|
data/lib/shutwork/client.rb
CHANGED
@@ -31,6 +31,18 @@ module Shutwork
|
|
31
31
|
process @conn.get("rooms/#{room_id}/messages?force=1")
|
32
32
|
end
|
33
33
|
|
34
|
+
def room_members room_id
|
35
|
+
process @conn.get("rooms/#{room_id}/members")
|
36
|
+
end
|
37
|
+
|
38
|
+
def room_files room_id
|
39
|
+
process @conn.get("rooms/#{room_id}/files")
|
40
|
+
end
|
41
|
+
|
42
|
+
def file room_id, file_id
|
43
|
+
process @conn.get("rooms/#{room_id}/files/#{file_id}?create_download_url=1")
|
44
|
+
end
|
45
|
+
|
34
46
|
def process res
|
35
47
|
if @verbose
|
36
48
|
$stderr.puts res.headers.to_json
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require "forwardable"
|
2
|
-
|
2
|
+
require "open-uri"
|
3
3
|
require "thor/shell/color"
|
4
4
|
|
5
|
+
require "shutwork/command/display"
|
6
|
+
|
5
7
|
module Shutwork
|
6
8
|
module Command
|
7
9
|
class Base
|
@@ -9,9 +11,23 @@ module Shutwork
|
|
9
11
|
|
10
12
|
def_delegators :@shell, :say, :say_status
|
11
13
|
|
14
|
+
include Display
|
15
|
+
|
12
16
|
def initialize
|
13
17
|
@shell = Thor::Shell::Color.new
|
14
18
|
end
|
19
|
+
|
20
|
+
def download_file url, dst, at = nil
|
21
|
+
FileUtils.mkdir_p dst.dirname
|
22
|
+
open(url) do |i|
|
23
|
+
open(dst, 'wb') do |o|
|
24
|
+
o.write i.read
|
25
|
+
end
|
26
|
+
if at
|
27
|
+
File.utime at, at, dst
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
15
31
|
end
|
16
32
|
end
|
17
33
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Shutwork
|
2
|
+
module Command
|
3
|
+
module Display
|
4
|
+
def display_account item
|
5
|
+
puts ("%10s %s" % [item["account_id"], item["name"]])
|
6
|
+
end
|
7
|
+
|
8
|
+
def display_room item
|
9
|
+
puts ("%10s %s" % [item["room_id"], item["name"]])
|
10
|
+
end
|
11
|
+
|
12
|
+
def display_message item
|
13
|
+
puts "----------------"
|
14
|
+
puts ("%s %s" % [
|
15
|
+
format_datetime(item["send_time"]),
|
16
|
+
item.dig("account", "name")
|
17
|
+
])
|
18
|
+
puts item["body"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def display_file item
|
22
|
+
puts ("%s %6s %s" % [
|
23
|
+
format_datetime(item["upload_time"]),
|
24
|
+
format_filesize(item["filesize"]),
|
25
|
+
item["filename"]]
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def format_datetime x
|
30
|
+
Time.at(x).to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def format_filesize x
|
34
|
+
to_filesize_human x
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_filesize_human x
|
38
|
+
x = %w(KB MB GB TB).inject([x.to_f, 'B']) do |acc, u|
|
39
|
+
v = acc.first / 1024
|
40
|
+
if v.round(2) < 0.90
|
41
|
+
acc
|
42
|
+
else
|
43
|
+
[v, u]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
if x.first >= 10.0 || x.last == 'B'
|
47
|
+
"%.0f%s" % x
|
48
|
+
else
|
49
|
+
"%.1f%s" % x
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -10,11 +10,11 @@ Usage: shutwork COMMAND
|
|
10
10
|
Available options:
|
11
11
|
-h,--help Show this help text
|
12
12
|
--version Show version
|
13
|
-
-r,--raw Show result in raw format
|
14
13
|
|
15
14
|
Available commands:
|
16
|
-
me
|
17
|
-
rooms Rooms
|
15
|
+
me Show me
|
16
|
+
rooms Show Rooms and messages
|
17
|
+
token Manage token
|
18
18
|
EOS
|
19
19
|
end
|
20
20
|
end
|
data/lib/shutwork/command/me.rb
CHANGED
@@ -8,16 +8,16 @@ require "shutwork/token"
|
|
8
8
|
module Shutwork
|
9
9
|
module Command
|
10
10
|
class Me < Base
|
11
|
-
def parse_args
|
11
|
+
def parse_args args
|
12
12
|
opts = OptionParser.new
|
13
13
|
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
14
14
|
opts.on("-r", "--raw", "Show results in raw format") { @raw = true }
|
15
15
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
16
|
-
opts.parse
|
16
|
+
opts.parse args
|
17
17
|
end
|
18
18
|
|
19
|
-
def run
|
20
|
-
parse_args
|
19
|
+
def run args = []
|
20
|
+
parse_args args
|
21
21
|
token = Shutwork::Token.read
|
22
22
|
@client = Shutwork::Client.new token: token, verbose: @verbose
|
23
23
|
|
@@ -25,8 +25,7 @@ module Shutwork
|
|
25
25
|
if @raw
|
26
26
|
puts item
|
27
27
|
else
|
28
|
-
|
29
|
-
puts ("%10s %s" % [me["account_id"], me["name"]])
|
28
|
+
display_account JSON.parse(item)
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
@@ -8,21 +8,29 @@ require "shutwork/token"
|
|
8
8
|
module Shutwork
|
9
9
|
module Command
|
10
10
|
class Rooms < Base
|
11
|
-
def parse_args
|
11
|
+
def parse_args args
|
12
12
|
opts = OptionParser.new
|
13
13
|
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
14
14
|
opts.on("-r", "--raw", "Show results in raw format") { @raw = true }
|
15
15
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
16
|
-
opts.
|
16
|
+
opts.on("--members", "Fetch members instead of messages") { @target = :members }
|
17
|
+
opts.on("--files", "Fetch files instead of messages") { @target = :files }
|
18
|
+
opts.on("--download", "Download files") { @download = true }
|
19
|
+
opts.on("--download-dir DIR", "Set download dir (default: download)") { |dir| @download_dir = dir }
|
20
|
+
opts.parse args
|
17
21
|
end
|
18
22
|
|
19
|
-
def run
|
20
|
-
@args = parse_args
|
23
|
+
def run args = []
|
24
|
+
@args = parse_args args
|
21
25
|
token = Shutwork::Token.read
|
22
26
|
@client = Shutwork::Client.new token: token, verbose: @verbose
|
23
27
|
|
24
28
|
if @args.first
|
25
|
-
|
29
|
+
if @download
|
30
|
+
download @args.first
|
31
|
+
else
|
32
|
+
show @args.first
|
33
|
+
end
|
26
34
|
else
|
27
35
|
list
|
28
36
|
end
|
@@ -33,23 +41,44 @@ module Shutwork
|
|
33
41
|
if @raw
|
34
42
|
puts items
|
35
43
|
else
|
36
|
-
|
37
|
-
rooms.each do |room|
|
38
|
-
puts ("%10s %s" % [room["room_id"], room["name"]])
|
39
|
-
end
|
44
|
+
JSON.parse(items).each(&method(:display_room))
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
48
|
def show room_id
|
44
|
-
items =
|
49
|
+
items =
|
50
|
+
case @target
|
51
|
+
when :members
|
52
|
+
@display = :display_account
|
53
|
+
@client.room_members room_id
|
54
|
+
when :files
|
55
|
+
@display = :display_file
|
56
|
+
@client.room_files room_id
|
57
|
+
else
|
58
|
+
@display = :display_message
|
59
|
+
@client.room_messages room_id
|
60
|
+
end
|
45
61
|
if @raw
|
46
62
|
puts items
|
47
63
|
else
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
64
|
+
JSON.parse(items).each(&method(@display))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def download room_id
|
69
|
+
dir = Pathname.new(@download_dir || "download").join(room_id.to_s)
|
70
|
+
items = @client.room_files room_id
|
71
|
+
files = JSON.parse(items)
|
72
|
+
files.each do |file|
|
73
|
+
dst = dir.join file["filename"]
|
74
|
+
if dst.exist?
|
75
|
+
say_status "exist", dst, :cyan
|
76
|
+
else
|
77
|
+
say_status "download", dst, :yellow
|
78
|
+
x = @client.file room_id, file["file_id"]
|
79
|
+
url = JSON.parse(x)["download_url"]
|
80
|
+
at = Time.at file["upload_time"]
|
81
|
+
download_file url, dst, at
|
53
82
|
end
|
54
83
|
end
|
55
84
|
end
|
@@ -4,16 +4,16 @@ require "shutwork/token"
|
|
4
4
|
module Shutwork
|
5
5
|
module Command
|
6
6
|
class Token < Base
|
7
|
-
def parse_args
|
7
|
+
def parse_args args
|
8
8
|
opts = OptionParser.new
|
9
|
-
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
9
|
+
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase} [TOKEN]"
|
10
10
|
opts.on("--skip-verify", "Skips validity check") { @skip_verify = true }
|
11
11
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
12
|
-
opts.parse
|
12
|
+
opts.parse args
|
13
13
|
end
|
14
14
|
|
15
|
-
def run
|
16
|
-
@token = parse_args.first&.strip
|
15
|
+
def run args = []
|
16
|
+
@token = parse_args(args).first&.strip
|
17
17
|
|
18
18
|
if @token
|
19
19
|
unless @skip_verify
|
data/lib/shutwork/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shutwork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hideaki Kawai
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/shutwork/cli.rb
|
116
116
|
- lib/shutwork/client.rb
|
117
117
|
- lib/shutwork/command/base.rb
|
118
|
+
- lib/shutwork/command/display.rb
|
118
119
|
- lib/shutwork/command/help.rb
|
119
120
|
- lib/shutwork/command/me.rb
|
120
121
|
- lib/shutwork/command/rooms.rb
|