enerbot-slack 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/credentials.rb +9 -0
- data/lib/enerbot_slack.rb +30 -0
- data/lib/modules/slack_admin.rb +11 -0
- data/lib/modules/slack_client.rb +20 -0
- data/lib/modules/slack_format.rb +45 -0
- data/lib/modules/slack_image.rb +23 -0
- data/lib/modules/slack_message.rb +108 -0
- data/lib/modules/slack_search.rb +95 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c64e1086ccdfa0448057636b7108f5590521e0e54788cc4cea10b1645d96f1f4
|
4
|
+
data.tar.gz: b03f92947d891aee5a5d99005677c47e0ea667281eb4fbeb5ebd498950f26bd3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bf03f4ea93b1ea77466e3e5e2a306fb91477cb512d4d728d396fa55bf09b1dff458711eee2664ea6000e566b01c5b9d8b6c60438cd26b6762e8203be4df39252
|
7
|
+
data.tar.gz: 661324fa53960dd5609b38290a49e27d63e41908f619ba7cf3434ba95c824ef99c86bfc40fa77e29385bf2635dae43d042a841a228a880014ece14a7ff5ff783
|
data/lib/credentials.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'slack-ruby-client'
|
2
|
+
require_relative 'modules/slack_message'
|
3
|
+
require_relative 'modules/slack_search'
|
4
|
+
require_relative 'modules/slack_image'
|
5
|
+
require_relative 'modules/slack_format'
|
6
|
+
require_relative 'credentials'
|
7
|
+
|
8
|
+
# Groups client initialization with instance parameters
|
9
|
+
class EnerbotSlack < Credentials
|
10
|
+
include SlackMessage
|
11
|
+
include SlackImage
|
12
|
+
include SlackFormat
|
13
|
+
include SlackSearch
|
14
|
+
|
15
|
+
def initialize(name: '', image: '', token: nil, as_user: false)
|
16
|
+
set_credentials
|
17
|
+
|
18
|
+
Slack.configure do |config|
|
19
|
+
config.token = token.nil? ? @bot_token : token
|
20
|
+
config.raise 'Missing token' unless config.token
|
21
|
+
end
|
22
|
+
|
23
|
+
@bot_name = name unless name.empty?
|
24
|
+
@bot_icon = image unless image.empty?
|
25
|
+
@bot_user = as_user
|
26
|
+
|
27
|
+
@time_client ||= Slack::RealTime::Client.new
|
28
|
+
@web_client ||= Slack::Web::Client.new
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Selection that should be improved
|
4
|
+
module SlackAdmin
|
5
|
+
def root_list_include?(user)
|
6
|
+
ENV['SLACK_BOT_ADMINS'].include? user
|
7
|
+
rescue NoMethodError => e
|
8
|
+
puts "You probably didn't set the SLACK_BOT_ADMINS variable. Error: #{e.message}"
|
9
|
+
false
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'slack-ruby-client'
|
4
|
+
|
5
|
+
# Client initialization that powers the rest of interactions
|
6
|
+
module SlackClient
|
7
|
+
def configure_client(type = 'web', token = ENV['SLACK_API_TOKEN'])
|
8
|
+
Slack.configure do |config|
|
9
|
+
config.token = token
|
10
|
+
config.raise 'Missing Bot token' unless config.token
|
11
|
+
end
|
12
|
+
|
13
|
+
case type
|
14
|
+
when 'realtime'
|
15
|
+
@configure_client = Slack::RealTime::Client.new
|
16
|
+
when 'web'
|
17
|
+
@configure_client = Slack::Web::Client.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Module for regular expressions that are common
|
4
|
+
module SlackFormat
|
5
|
+
def attachment_style(text, pretext: 'Test', color: '#e93d94', author: '')
|
6
|
+
attachment = []
|
7
|
+
attachment << {
|
8
|
+
"color": color,
|
9
|
+
"author_name": author,
|
10
|
+
"pretext": pretext,
|
11
|
+
"text": text
|
12
|
+
}
|
13
|
+
attachment
|
14
|
+
end
|
15
|
+
|
16
|
+
def coin_pattern(text)
|
17
|
+
check = text.match(/^<@(.*?)>.*(\+\+|--|balance)(.*)/ix)
|
18
|
+
!check.nil? ? check.captures : false
|
19
|
+
end
|
20
|
+
|
21
|
+
def hyper_text_pattern(text, type = 'user')
|
22
|
+
pattern = case type
|
23
|
+
when 'user'
|
24
|
+
/<@(.*)>/
|
25
|
+
when 'channel'
|
26
|
+
/<#(.*)\|(.*)>/
|
27
|
+
when 'channel_fix'
|
28
|
+
/\s#(.*?)\s/
|
29
|
+
end
|
30
|
+
text.match(pattern)
|
31
|
+
end
|
32
|
+
|
33
|
+
def channel_pattern(data)
|
34
|
+
match = data.match(/\s(<[#@])?((.*)\|)?(.*?)(>)? (.*?)$/i)
|
35
|
+
p match
|
36
|
+
unless match.nil?
|
37
|
+
channel = match.captures[2] || match.captures[3]
|
38
|
+
text = match.captures[5]
|
39
|
+
check_ts = channel.match(/(.*)-(\d*\.\d*)/)
|
40
|
+
channel = check_ts.captures[0] unless check_ts.nil?
|
41
|
+
thread = check_ts.captures[1] unless check_ts.nil?
|
42
|
+
end
|
43
|
+
[text, channel, thread]
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require './lib/slack_search'
|
4
|
+
|
5
|
+
# Obtains data of user from Slack and then uses them to mimic looks.
|
6
|
+
module SlackImage
|
7
|
+
def imitate_look(user)
|
8
|
+
c = get_user_info(user)
|
9
|
+
name = c.profile.display_name
|
10
|
+
image = c.profile.image_512
|
11
|
+
event_look_set(name, image)
|
12
|
+
end
|
13
|
+
|
14
|
+
def event_look_set(name, image)
|
15
|
+
ENV['SLACK_BOT_ICON'] = image
|
16
|
+
ENV['SLACK_BOT_NAME'] = name
|
17
|
+
end
|
18
|
+
|
19
|
+
def event_look_revert
|
20
|
+
ENV['SLACK_BOT_ICON'] = 'https://i.imgur.com/uo5AfyZ.png'
|
21
|
+
ENV['SLACK_BOT_NAME'] = 'Chayannetor'
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'slack_client'
|
4
|
+
require_relative 'slack_search'
|
5
|
+
|
6
|
+
# Communication and interactions methods with Slack
|
7
|
+
module SlackMessage
|
8
|
+
include SlackClient
|
9
|
+
include SlackSearch
|
10
|
+
|
11
|
+
def destination_points(data, ts = nil)
|
12
|
+
@thread = if data.respond_to? :thread_ts
|
13
|
+
data.ts
|
14
|
+
else
|
15
|
+
ts unless ts.nil?
|
16
|
+
end
|
17
|
+
@channel = if data.respond_to? :channel
|
18
|
+
data.channel
|
19
|
+
else
|
20
|
+
data
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def send_message(text, data, ts = nil)
|
25
|
+
client = configure_client
|
26
|
+
destination_points(data, ts)
|
27
|
+
client.chat_postMessage channel: @channel,
|
28
|
+
text: text,
|
29
|
+
icon_url: ENV['SLACK_BOT_ICON'],
|
30
|
+
username: ENV['SLACK_BOT_NAME'],
|
31
|
+
thread_ts: @thread,
|
32
|
+
as_user: false
|
33
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
34
|
+
print e.message
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
38
|
+
def send_direct_message(text, channel)
|
39
|
+
dm = get_user_id(channel)
|
40
|
+
dm == false ? false : send_message(text, dm)
|
41
|
+
end
|
42
|
+
|
43
|
+
def send_attachment(attachment, data, ts = nil)
|
44
|
+
client = configure_client
|
45
|
+
destination_points(data, ts)
|
46
|
+
client.chat_postMessage channel: @channel,
|
47
|
+
attachments: attachment,
|
48
|
+
icon_url: ENV['SLACK_BOT_ICON'],
|
49
|
+
username: ENV['SLACK_BOT_NAME'],
|
50
|
+
thread_ts: @thread,
|
51
|
+
as_user: false
|
52
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
53
|
+
print e.message
|
54
|
+
false
|
55
|
+
end
|
56
|
+
|
57
|
+
def send_ephemeral(text, user, data, ts = nil)
|
58
|
+
client = configure_client
|
59
|
+
destination_points(data, ts)
|
60
|
+
client.chat_postEphemeral channel: @channel,
|
61
|
+
text: text,
|
62
|
+
user: user,
|
63
|
+
icon_url: ENV['SLACK_BOT_ICON'],
|
64
|
+
username: ENV['SLACK_BOT_NAME'],
|
65
|
+
as_user: false
|
66
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
67
|
+
print e.message
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
def send_command(command, text, data, ts = nil)
|
72
|
+
client = configure_client('web', ENV['SLACK_REAL_TOKEN'])
|
73
|
+
destination_points(data, ts)
|
74
|
+
client.chat_command channel: @channel,
|
75
|
+
command: command,
|
76
|
+
text: text
|
77
|
+
end
|
78
|
+
|
79
|
+
def add_reaction(icon, channel, thread)
|
80
|
+
client = configure_client
|
81
|
+
client.reactions_add channel: channel,
|
82
|
+
name: icon,
|
83
|
+
timestamp: thread,
|
84
|
+
icon_url: ENV['SLACK_BOT_ICON'],
|
85
|
+
username: ENV['SLACK_BOT_NAME'],
|
86
|
+
as_user: false
|
87
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
88
|
+
print e.message
|
89
|
+
false
|
90
|
+
end
|
91
|
+
|
92
|
+
def send_file(path, data, ts = nil)
|
93
|
+
file = path
|
94
|
+
client = configure_client
|
95
|
+
destination_points(data, ts)
|
96
|
+
client.files_upload channels: @channel,
|
97
|
+
icon_url: ENV['SLACK_BOT_ICON'],
|
98
|
+
username: ENV['SLACK_BOT_NAME'],
|
99
|
+
thread_ts: @thread,
|
100
|
+
file: Faraday::UploadIO.new(file, 'text'),
|
101
|
+
title: File.basename(file),
|
102
|
+
filename: File.basename(file),
|
103
|
+
as_user: false
|
104
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
105
|
+
print e.message
|
106
|
+
false
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'slack_client'
|
4
|
+
|
5
|
+
# Module for searching content on Slack
|
6
|
+
module SlackSearch
|
7
|
+
include SlackClient
|
8
|
+
|
9
|
+
def get_user_id(channel = @channel_id)
|
10
|
+
client = configure_client
|
11
|
+
dm = client.conversations_open users: channel
|
12
|
+
dm.channel.id
|
13
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
14
|
+
print e.message
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_user_info(user)
|
19
|
+
client = configure_client
|
20
|
+
c = client.users_info user: user
|
21
|
+
c.user
|
22
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
23
|
+
print e.message
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_user_list
|
28
|
+
client = configure_client
|
29
|
+
client.users_list
|
30
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
31
|
+
print e.message
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def verify_type
|
36
|
+
properties = {
|
37
|
+
'channel' => @properties.is_channel,
|
38
|
+
'group' => @properties.is_group,
|
39
|
+
'im' => @properties.is_im
|
40
|
+
}
|
41
|
+
check = ''
|
42
|
+
properties.each { |k, v| check = k if v == true }
|
43
|
+
check
|
44
|
+
end
|
45
|
+
|
46
|
+
def conversation_type(channel = @channel_id)
|
47
|
+
@channel_id = channel if @channel_id.nil?
|
48
|
+
result = conversation_info
|
49
|
+
if result == false
|
50
|
+
print 'Check if IM'
|
51
|
+
@channel_id = get_user_id
|
52
|
+
conversation_info == false ? false : verify_type
|
53
|
+
else
|
54
|
+
verify_type
|
55
|
+
end
|
56
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
57
|
+
print e.message
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
def conversation_info(channel = @channel_id)
|
62
|
+
client = configure_client
|
63
|
+
info = client.conversations_info channel: channel
|
64
|
+
@properties = info.channel
|
65
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
66
|
+
print e.message
|
67
|
+
false
|
68
|
+
end
|
69
|
+
|
70
|
+
def conversation_members(channel, limit = 60)
|
71
|
+
client = configure_client
|
72
|
+
info = client.conversations_members channel: channel, limit: limit
|
73
|
+
info.members
|
74
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
75
|
+
print e.message
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
def conversation_list
|
80
|
+
client = configure_client
|
81
|
+
client.conversations_list.channels
|
82
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
83
|
+
print e.message
|
84
|
+
false
|
85
|
+
end
|
86
|
+
|
87
|
+
def search_messages_on(channel, quantity = 5)
|
88
|
+
# type = conversation_type(channel)
|
89
|
+
client = configure_client
|
90
|
+
client.conversations_history channel: channel, count: quantity
|
91
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
92
|
+
print e.message
|
93
|
+
"Channel not found #{channel}"
|
94
|
+
end
|
95
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: enerbot-slack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Luciano Adonis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-02-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: slack-ruby-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.2'
|
55
|
+
description: The dream of enerbot
|
56
|
+
email: luciano.adonisv@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/credentials.rb
|
62
|
+
- lib/enerbot_slack.rb
|
63
|
+
- lib/modules/slack_admin.rb
|
64
|
+
- lib/modules/slack_client.rb
|
65
|
+
- lib/modules/slack_format.rb
|
66
|
+
- lib/modules/slack_image.rb
|
67
|
+
- lib/modules/slack_message.rb
|
68
|
+
- lib/modules/slack_search.rb
|
69
|
+
homepage: https://rubygems.org/gems/core_slack
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.4.19
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Core functions for any kind of interaction with Slack
|
92
|
+
test_files: []
|