ruboty-slack_events 0.2.0 → 0.3.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 +4 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +8 -0
- data/Rakefile +3 -1
- data/lib/ruboty/adapters/slack_events.rb +4 -4
- data/lib/ruboty/slack_events/filter/rubotify.rb +66 -0
- data/lib/ruboty/slack_events/{mention → filter}/slackify.rb +2 -1
- data/lib/ruboty/slack_events/resolvers/user_resolver.rb +3 -0
- data/lib/ruboty/slack_events/version.rb +1 -1
- data/lib/ruboty/slack_events.rb +2 -2
- metadata +5 -4
- data/lib/ruboty/slack_events/mention/rubotify.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdf0c6b6732081933efdc52213d1a9388e1e0ef809e6057da1adb68ef4032d54
|
4
|
+
data.tar.gz: 4d23791111c4f38d0811d17ea0adac7a52da52096423155a8baec62d4ce00e66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dffe1198d352f9d065f3aff234f78f3f13dfb0627afe4d2120d5e087f4302b32f7ad56aca4af0e3f1f32250bde4f0e0659567d2d0793343f1175be198a773b7e
|
7
|
+
data.tar.gz: 0bbaf0b61b5a585cf4989ff014be85a5acc12fbcc1839d2dbc37683503531f6a02edf5ccf47cfdc327731ec722c4d2a77e08b2a4ba8212b5c851f835dbd2ba20
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
## Unreleased
|
2
|
+
## 0.3.1 - 2025-04-07
|
3
|
+
|
4
|
+
- Let UserResolver#user_info_by_id return nil on user_not_found error (https://github.com/tomoasleep/ruboty-slack_events/pull/2)
|
5
|
+
|
6
|
+
## 0.3.0 - 2025-04-04
|
7
|
+
|
8
|
+
- Rewrite text filter to parse links and unescape HTML entities
|
9
|
+
|
2
10
|
## 0.2.0 - 2025-04-03
|
3
11
|
|
4
12
|
- Support reply on threads
|
data/Rakefile
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require "rubocop/rake_task"
|
5
5
|
require "bump/tasks"
|
6
|
+
require "rspec/core/rake_task"
|
6
7
|
|
7
8
|
Bump.changelog = true
|
8
9
|
|
9
10
|
RuboCop::RakeTask.new
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
10
12
|
|
11
|
-
task default:
|
13
|
+
task default: %i[rubocop spec]
|
@@ -62,12 +62,12 @@ module Ruboty
|
|
62
62
|
@resolvers ||= ::Ruboty::SlackEvents::Resolvers.new(slack_client:)
|
63
63
|
end
|
64
64
|
|
65
|
-
def slackify #: ::Ruboty::SlackEvents::
|
66
|
-
@slackify ||= ::Ruboty::SlackEvents::
|
65
|
+
def slackify #: ::Ruboty::SlackEvents::Filter::Slackify
|
66
|
+
@slackify ||= ::Ruboty::SlackEvents::Filter::Slackify.new(resolvers:)
|
67
67
|
end
|
68
68
|
|
69
|
-
def rubotify #: ::Ruboty::SlackEvents::
|
70
|
-
@rubotify ||= ::Ruboty::SlackEvents::
|
69
|
+
def rubotify #: ::Ruboty::SlackEvents::Filter::Rubotify
|
70
|
+
@rubotify ||= ::Ruboty::SlackEvents::Filter::Rubotify.new(resolvers:)
|
71
71
|
end
|
72
72
|
|
73
73
|
def ignore_bot_message?
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
|
5
|
+
module Ruboty
|
6
|
+
module SlackEvents
|
7
|
+
module Filter
|
8
|
+
# Convert Slack text format to Ruboty format
|
9
|
+
# For more details of Slack text format, see: https://api.slack.com/reference/surfaces/formatting
|
10
|
+
class Rubotify
|
11
|
+
attr_reader :resolvers #: Resolvers
|
12
|
+
|
13
|
+
# @rbs resolvers: Resolvers
|
14
|
+
def initialize(resolvers:)
|
15
|
+
@resolvers = resolvers
|
16
|
+
end
|
17
|
+
|
18
|
+
# @rbs text: String
|
19
|
+
def call(text) #: String
|
20
|
+
text
|
21
|
+
.then { replace_user_mentions(_1) }
|
22
|
+
.then { replace_link(_1) }
|
23
|
+
.then { unescape(_1) }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @rbs text: String
|
29
|
+
def replace_user_mentions(text) #: String
|
30
|
+
text.gsub(/<@(?<user_id>\w+)>/) do |user_mention|
|
31
|
+
user_id = Regexp.last_match[:user_id]
|
32
|
+
|
33
|
+
user_info = resolvers.user_resolver.user_info_by_id(user_id)
|
34
|
+
|
35
|
+
next user_mention unless user_info
|
36
|
+
|
37
|
+
"@#{user_info.name}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @rbs text: String
|
42
|
+
def replace_link(text) #: String
|
43
|
+
text.gsub(/<(?<url>[^\>|]+)(?:\|(?<text>[^\>]+))?>/) do |link|
|
44
|
+
url = Regexp.last_match[:url]
|
45
|
+
text = Regexp.last_match[:text]
|
46
|
+
|
47
|
+
begin
|
48
|
+
next link unless URI.parse(url).scheme
|
49
|
+
rescue URI::InvalidURIError, URI::InvalidComponentError
|
50
|
+
next link
|
51
|
+
end
|
52
|
+
|
53
|
+
text || url
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Unescape HTML entities in the text.
|
58
|
+
# See: https://api.slack.com/reference/surfaces/formatting#escaping
|
59
|
+
# @rbs text: String
|
60
|
+
def unescape(text) #: String
|
61
|
+
CGI.unescapeHTML(text)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -34,6 +34,9 @@ module Ruboty
|
|
34
34
|
Logger.debug { "Slack API: users.info(#{user_id})" }
|
35
35
|
res = slack_client.users_info(user: user_id)
|
36
36
|
res.user
|
37
|
+
rescue Slack::Web::Api::Errors::UserNotFound => e
|
38
|
+
Logger.debug { "Slack API Error: users.info(#{user_id}) => #{e.message}" }
|
39
|
+
nil
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
data/lib/ruboty/slack_events.rb
CHANGED
@@ -9,8 +9,8 @@ end
|
|
9
9
|
require_relative "slack_events/version"
|
10
10
|
|
11
11
|
require_relative "slack_events/api/socket_client"
|
12
|
-
require_relative "slack_events/
|
13
|
-
require_relative "slack_events/
|
12
|
+
require_relative "slack_events/filter/slackify"
|
13
|
+
require_relative "slack_events/filter/rubotify"
|
14
14
|
require_relative "slack_events/resolvers"
|
15
15
|
require_relative "slack_events/logger"
|
16
16
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruboty-slack_events
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomoya Chiba
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-04-
|
10
|
+
date: 2025-04-07 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: async-websocket
|
@@ -58,6 +58,7 @@ executables: []
|
|
58
58
|
extensions: []
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
|
+
- ".rspec"
|
61
62
|
- ".rubocop.yml"
|
62
63
|
- CHANGELOG.md
|
63
64
|
- CODE_OF_CONDUCT.md
|
@@ -69,9 +70,9 @@ files:
|
|
69
70
|
- lib/ruboty/slack_events.rb
|
70
71
|
- lib/ruboty/slack_events/api/socket_client.rb
|
71
72
|
- lib/ruboty/slack_events/app_info.rb
|
73
|
+
- lib/ruboty/slack_events/filter/rubotify.rb
|
74
|
+
- lib/ruboty/slack_events/filter/slackify.rb
|
72
75
|
- lib/ruboty/slack_events/logger.rb
|
73
|
-
- lib/ruboty/slack_events/mention/rubotify.rb
|
74
|
-
- lib/ruboty/slack_events/mention/slackify.rb
|
75
76
|
- lib/ruboty/slack_events/resolvers.rb
|
76
77
|
- lib/ruboty/slack_events/resolvers/user_resolver.rb
|
77
78
|
- lib/ruboty/slack_events/version.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ruboty
|
4
|
-
module SlackEvents
|
5
|
-
module Mention
|
6
|
-
class Rubotify
|
7
|
-
attr_reader :resolvers #: Resolvers
|
8
|
-
|
9
|
-
# @rbs resolvers: Resolvers
|
10
|
-
def initialize(resolvers:)
|
11
|
-
@resolvers = resolvers
|
12
|
-
end
|
13
|
-
|
14
|
-
# @rbs text: String
|
15
|
-
def call(text) #: String
|
16
|
-
replace_user_mentions(text)
|
17
|
-
end
|
18
|
-
|
19
|
-
# @rbs text: String
|
20
|
-
def replace_user_mentions(text) #: String
|
21
|
-
text.gsub(/<@(?<user_id>\w+)>/) do |user_mention|
|
22
|
-
user_id = Regexp.last_match[:user_id]
|
23
|
-
|
24
|
-
user_info = resolvers.user_resolver.user_info_by_id(user_id)
|
25
|
-
|
26
|
-
next user_mention unless user_info
|
27
|
-
|
28
|
-
"@#{user_info.name}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|