slacktail 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/slacktail.svg)](https://badge.fury.io/rb/slacktail)
|
5
|
+
[![Build Status](https://travis-ci.com/DannyBen/slacktail.svg?branch=master)](https://travis-ci.com/DannyBen/slacktail)
|
6
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/.../maintainability)](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: []
|