slacktail 0.0.1
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 +7 -0
- data/README.md +52 -0
- data/bin/slacktail +12 -0
- data/lib/slacktail/attachment.rb +18 -0
- data/lib/slacktail/base.rb +9 -0
- data/lib/slacktail/client.rb +23 -0
- data/lib/slacktail/command.rb +43 -0
- data/lib/slacktail/extensions/string.rb +21 -0
- data/lib/slacktail/field.rb +11 -0
- data/lib/slacktail/has_client.rb +9 -0
- data/lib/slacktail/has_text.rb +15 -0
- data/lib/slacktail/message.rb +67 -0
- data/lib/slacktail/message_view.rb +22 -0
- data/lib/slacktail/version.rb +3 -0
- data/lib/slacktail.rb +13 -0
- metadata +129 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 90c2bc64c84bf955e31f8ffc852e30d84811d3e8efe62d55e1c18186215fd938
|
|
4
|
+
data.tar.gz: aed391d0419c87b308dd909eaa7d515e1c84cdd24374eb56e1b779a3e7dbabf3
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: ea9f8f39ce1bf2c03fa72402f6feb06828de1674bb9d91aa57add31eefda72afb2a1c6243fd5a17c6d7884d3ff5752473a2b8907c729f4337d52a7e105da5445
|
|
7
|
+
data.tar.gz: fbe56116ee1b230ba647f3af890d3f962365b8d2e222f41c2130848d05c52e04717174861c36a2e41877c5b1ed6d082f45fe72cc0dedac3f844dc0d730cf4d59
|
data/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Slacktail
|
|
2
|
+
==================================================
|
|
3
|
+
|
|
4
|
+
[](https://badge.fury.io/rb/slacktail)
|
|
5
|
+
[](https://travis-ci.com/DannyBen/slacktail)
|
|
6
|
+
[](https://codeclimate.com/github/DannyBen/slacktail/maintainability)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Slacktail is a single-purpose command line utility for follwoing messages
|
|
11
|
+
sent to your Slack organization chat.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Installation
|
|
16
|
+
--------------------------------------------------
|
|
17
|
+
|
|
18
|
+
$ gem install slacktail
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Authorization
|
|
22
|
+
--------------------------------------------------
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
1. Obtain an API key from Slack.
|
|
26
|
+
In your Slack settings, go to [Custom Integrations] and create a new
|
|
27
|
+
Bot Application. Then, find the API Token in the bot's configuration page.
|
|
28
|
+
|
|
29
|
+
2. Set the `SLACK_API_TOKEN` environemnt variable to the API Token. This
|
|
30
|
+
should probably be set in your `~/.bashrc`, with
|
|
31
|
+
`export SLACK_API_TOKEN=<your token>`
|
|
32
|
+
|
|
33
|
+
3. Invite your bot to any channel you want to monitor. Type
|
|
34
|
+
`/invite @<botname>` in any channel.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Usage
|
|
38
|
+
--------------------------------------------------
|
|
39
|
+
|
|
40
|
+
Follow all channels:
|
|
41
|
+
|
|
42
|
+
$ slacktail
|
|
43
|
+
|
|
44
|
+
Follow specific channels
|
|
45
|
+
|
|
46
|
+
$ slacktail general development lobby
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
[Custom Integrations]: https://my.slack.com/apps/manage/custom-integrations
|
data/bin/slacktail
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Slacktail
|
|
2
|
+
class Attachment < Base
|
|
3
|
+
include HasText
|
|
4
|
+
|
|
5
|
+
def color
|
|
6
|
+
data.color || ''
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def fields
|
|
10
|
+
@fields ||= fields!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def fields!
|
|
14
|
+
return [] unless data.fields
|
|
15
|
+
data.fields.map { |field| Field.new field }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Slacktail
|
|
2
|
+
class Client
|
|
3
|
+
class << self
|
|
4
|
+
attr_writer :default
|
|
5
|
+
|
|
6
|
+
def default
|
|
7
|
+
@default ||= default!
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def can_connect?
|
|
11
|
+
!!ENV['SLACK_API_TOKEN']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def default!
|
|
15
|
+
raise ArgumentError, 'Please set SLACK_API_TOKEN' unless can_connect?
|
|
16
|
+
Slack.configure { |c| c.token = ENV['SLACK_API_TOKEN'] }
|
|
17
|
+
Slack::RealTime::Client.new
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Slacktail
|
|
2
|
+
class Command < MisterBin::Command
|
|
3
|
+
include HasClient
|
|
4
|
+
|
|
5
|
+
version VERSION
|
|
6
|
+
summary "Show and follow slack messages in real time"
|
|
7
|
+
|
|
8
|
+
usage "slacktail [CHANNELS...]"
|
|
9
|
+
usage "slacktail (-h|--help|--version)"
|
|
10
|
+
|
|
11
|
+
param "CHANNELS", "Channels to follow"
|
|
12
|
+
|
|
13
|
+
example "slacktail"
|
|
14
|
+
example "slacktail general debug"
|
|
15
|
+
|
|
16
|
+
def run(args = nil)
|
|
17
|
+
args ||= {}
|
|
18
|
+
@channels = args['CHANNELS'] || []
|
|
19
|
+
|
|
20
|
+
say "Connecting... " if Client.can_connect?
|
|
21
|
+
|
|
22
|
+
client.on :message do |data|
|
|
23
|
+
@message = Message.new data
|
|
24
|
+
@message.render unless skip?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
client.on(:hello) { resay "!txtgrn!Ready\n" }
|
|
28
|
+
client.on(:closed) { |_data| say "Goodbye" }
|
|
29
|
+
client.start!
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def skip?
|
|
35
|
+
return true if @message.empty?
|
|
36
|
+
return false if @channels.empty?
|
|
37
|
+
return false if @channels.include? @message.pure_channel
|
|
38
|
+
return true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class String
|
|
2
|
+
def to_markdown
|
|
3
|
+
TTY::Markdown.parse self
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def to_colsole_color
|
|
7
|
+
color = {
|
|
8
|
+
'000000' => :wht,
|
|
9
|
+
'ff0000' => :red,
|
|
10
|
+
'00ff00' => :grn,
|
|
11
|
+
'0000ff' => :blu,
|
|
12
|
+
'ffff00' => :ylw,
|
|
13
|
+
'ff00ff' => :pur,
|
|
14
|
+
'00ffff' => :cyn,
|
|
15
|
+
'ffffff' => :blk,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
key = self.downcase
|
|
19
|
+
color.keys.include?(key) ? color[key] : :rst
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Slacktail
|
|
2
|
+
class Message < Base
|
|
3
|
+
include MessageView, HasText, HasClient
|
|
4
|
+
|
|
5
|
+
def channel
|
|
6
|
+
@channel ||= channel!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def pure_channel
|
|
10
|
+
channel.gsub '#', ''
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def color
|
|
14
|
+
if attachments.any?
|
|
15
|
+
attachments.first.color.to_colsole_color
|
|
16
|
+
else
|
|
17
|
+
:cyn
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def items
|
|
22
|
+
@items ||= items!
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def empty?
|
|
26
|
+
items.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def user
|
|
30
|
+
if data.username
|
|
31
|
+
data.username
|
|
32
|
+
elsif data.bot_id
|
|
33
|
+
client.bots[data.bot_id].name
|
|
34
|
+
else
|
|
35
|
+
"anonymous"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def attachments
|
|
40
|
+
@attachments ||= attachments!
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def items!
|
|
46
|
+
result = text_lines
|
|
47
|
+
attachments.each do |attachment|
|
|
48
|
+
result += attachment.text_lines
|
|
49
|
+
result += attachment.fields
|
|
50
|
+
end
|
|
51
|
+
result
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def channel!
|
|
55
|
+
channel = client.channels[data.channel]
|
|
56
|
+
channel ? "##{channel.name}" : "@private"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def attachments!
|
|
60
|
+
return [] unless data.attachments
|
|
61
|
+
data.attachments.map do |attachment|
|
|
62
|
+
Attachment.new attachment
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Slacktail
|
|
2
|
+
module MessageView
|
|
3
|
+
include Colsole
|
|
4
|
+
|
|
5
|
+
def render
|
|
6
|
+
prefix = "!txt#{color}!▌!txtrst! "
|
|
7
|
+
now = Time.now.strftime "%H:%M"
|
|
8
|
+
say "#{prefix}!txtcyn!#{now} ➤ !bldcyn!@#{user}!txtcyn! ➤ #{channel}".strip
|
|
9
|
+
|
|
10
|
+
items.each do |line|
|
|
11
|
+
if line.is_a? String
|
|
12
|
+
say "#{prefix}#{line.to_markdown}".strip
|
|
13
|
+
elsif line.is_a? Field
|
|
14
|
+
say "#{prefix}!txtblu!#{line.key}!txtrst! : !txtgrn!#{line.value}".strip
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
say ""
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/slacktail.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'requires'
|
|
2
|
+
require 'mister_bin'
|
|
3
|
+
require 'slack-ruby-client'
|
|
4
|
+
require 'tty-markdown'
|
|
5
|
+
require 'byebug' if ENV['BYEBUG']
|
|
6
|
+
|
|
7
|
+
requires \
|
|
8
|
+
'slacktail/base',
|
|
9
|
+
'slacktail/message_view',
|
|
10
|
+
'slacktail/has_text',
|
|
11
|
+
'slacktail/has_client',
|
|
12
|
+
'slacktail'
|
|
13
|
+
|
metadata
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: slacktail
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Danny Ben Shitrit
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-12-06 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: async-websocket
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.6'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.6'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: mister_bin
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.5'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.5'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: requires
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0.1'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0.1'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: slack-ruby-client
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.13'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.13'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: tty-markdown
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0.4'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0.4'
|
|
83
|
+
description: Slacktail is a single-purpose command line utility for follwoing messages
|
|
84
|
+
sent to your Slack organization chat.
|
|
85
|
+
email: db@dannyben.com
|
|
86
|
+
executables:
|
|
87
|
+
- slacktail
|
|
88
|
+
extensions: []
|
|
89
|
+
extra_rdoc_files: []
|
|
90
|
+
files:
|
|
91
|
+
- README.md
|
|
92
|
+
- bin/slacktail
|
|
93
|
+
- lib/slacktail.rb
|
|
94
|
+
- lib/slacktail/attachment.rb
|
|
95
|
+
- lib/slacktail/base.rb
|
|
96
|
+
- lib/slacktail/client.rb
|
|
97
|
+
- lib/slacktail/command.rb
|
|
98
|
+
- lib/slacktail/extensions/string.rb
|
|
99
|
+
- lib/slacktail/field.rb
|
|
100
|
+
- lib/slacktail/has_client.rb
|
|
101
|
+
- lib/slacktail/has_text.rb
|
|
102
|
+
- lib/slacktail/message.rb
|
|
103
|
+
- lib/slacktail/message_view.rb
|
|
104
|
+
- lib/slacktail/version.rb
|
|
105
|
+
homepage: https://github.com/dannyben/slacktail
|
|
106
|
+
licenses:
|
|
107
|
+
- MIT
|
|
108
|
+
metadata: {}
|
|
109
|
+
post_install_message:
|
|
110
|
+
rdoc_options: []
|
|
111
|
+
require_paths:
|
|
112
|
+
- lib
|
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 2.4.0
|
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
|
+
requirements:
|
|
120
|
+
- - ">="
|
|
121
|
+
- !ruby/object:Gem::Version
|
|
122
|
+
version: '0'
|
|
123
|
+
requirements: []
|
|
124
|
+
rubyforge_project:
|
|
125
|
+
rubygems_version: 2.7.6
|
|
126
|
+
signing_key:
|
|
127
|
+
specification_version: 4
|
|
128
|
+
summary: Command line tool for following slack messages in real time
|
|
129
|
+
test_files: []
|