slk 0.1.0 → 0.2.0
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/CHANGELOG.md +22 -1
- data/README.md +5 -5
- data/bin/slk +3 -3
- data/lib/{slack_cli → slk}/api/activity.rb +10 -11
- data/lib/{slack_cli → slk}/api/bots.rb +5 -4
- data/lib/slk/api/client.rb +51 -0
- data/lib/{slack_cli → slk}/api/conversations.rb +14 -13
- data/lib/slk/api/dnd.rb +41 -0
- data/lib/{slack_cli → slk}/api/emoji.rb +4 -3
- data/lib/{slack_cli → slk}/api/threads.rb +13 -12
- data/lib/{slack_cli → slk}/api/usergroups.rb +2 -1
- data/lib/slk/api/users.rb +105 -0
- data/lib/slk/cli.rb +157 -0
- data/lib/slk/commands/activity.rb +152 -0
- data/lib/{slack_cli → slk}/commands/base.rb +67 -41
- data/lib/slk/commands/cache.rb +141 -0
- data/lib/slk/commands/catchup.rb +411 -0
- data/lib/slk/commands/config.rb +114 -0
- data/lib/slk/commands/dnd.rb +172 -0
- data/lib/slk/commands/emoji.rb +352 -0
- data/lib/slk/commands/help.rb +97 -0
- data/lib/slk/commands/messages.rb +299 -0
- data/lib/slk/commands/presence.rb +109 -0
- data/lib/slk/commands/preset.rb +231 -0
- data/lib/slk/commands/status.rb +223 -0
- data/lib/slk/commands/thread.rb +72 -0
- data/lib/slk/commands/unread.rb +305 -0
- data/lib/slk/commands/workspaces.rb +168 -0
- data/lib/slk/formatters/activity_formatter.rb +148 -0
- data/lib/slk/formatters/attachment_formatter.rb +65 -0
- data/lib/slk/formatters/block_formatter.rb +57 -0
- data/lib/{slack_cli → slk}/formatters/duration_formatter.rb +6 -5
- data/lib/slk/formatters/emoji_replacer.rb +141 -0
- data/lib/slk/formatters/json_message_formatter.rb +95 -0
- data/lib/slk/formatters/mention_replacer.rb +158 -0
- data/lib/slk/formatters/message_formatter.rb +174 -0
- data/lib/{slack_cli → slk}/formatters/output.rb +7 -6
- data/lib/slk/formatters/reaction_formatter.rb +87 -0
- data/lib/{slack_cli → slk}/models/channel.rb +12 -10
- data/lib/slk/models/duration.rb +94 -0
- data/lib/slk/models/message.rb +242 -0
- data/lib/slk/models/preset.rb +78 -0
- data/lib/{slack_cli → slk}/models/reaction.rb +6 -6
- data/lib/{slack_cli → slk}/models/status.rb +6 -6
- data/lib/slk/models/user.rb +55 -0
- data/lib/slk/models/workspace.rb +54 -0
- data/lib/{slack_cli → slk}/runner.rb +22 -19
- data/lib/slk/services/activity_enricher.rb +124 -0
- data/lib/slk/services/api_client.rb +145 -0
- data/lib/{slack_cli → slk}/services/cache_store.rb +20 -17
- data/lib/{slack_cli → slk}/services/configuration.rb +9 -8
- data/lib/slk/services/emoji_downloader.rb +103 -0
- data/lib/slk/services/emoji_searcher.rb +72 -0
- data/lib/{slack_cli → slk}/services/encryption.rb +11 -14
- data/lib/slk/services/gemoji_sync.rb +97 -0
- data/lib/{slack_cli → slk}/services/preset_store.rb +34 -33
- data/lib/slk/services/reaction_enricher.rb +82 -0
- data/lib/slk/services/setup_wizard.rb +131 -0
- data/lib/slk/services/target_resolver.rb +108 -0
- data/lib/{slack_cli → slk}/services/token_store.rb +11 -10
- data/lib/slk/services/unread_marker.rb +101 -0
- data/lib/{slack_cli → slk}/support/error_logger.rb +2 -1
- data/lib/{slack_cli → slk}/support/help_formatter.rb +36 -44
- data/lib/{slack_cli → slk}/support/inline_images.rb +28 -19
- data/lib/slk/support/interactive_prompt.rb +29 -0
- data/lib/{slack_cli → slk}/support/slack_url_parser.rb +15 -17
- data/lib/slk/support/text_wrapper.rb +57 -0
- data/lib/slk/support/user_resolver.rb +141 -0
- data/lib/{slack_cli → slk}/support/xdg_paths.rb +6 -5
- data/lib/slk/version.rb +5 -0
- data/lib/slk.rb +112 -0
- metadata +80 -59
- data/lib/slack_cli/api/client.rb +0 -49
- data/lib/slack_cli/api/dnd.rb +0 -40
- data/lib/slack_cli/api/users.rb +0 -101
- data/lib/slack_cli/cli.rb +0 -118
- data/lib/slack_cli/commands/activity.rb +0 -292
- data/lib/slack_cli/commands/cache.rb +0 -116
- data/lib/slack_cli/commands/catchup.rb +0 -484
- data/lib/slack_cli/commands/config.rb +0 -159
- data/lib/slack_cli/commands/dnd.rb +0 -143
- data/lib/slack_cli/commands/emoji.rb +0 -412
- data/lib/slack_cli/commands/help.rb +0 -76
- data/lib/slack_cli/commands/messages.rb +0 -317
- data/lib/slack_cli/commands/presence.rb +0 -107
- data/lib/slack_cli/commands/preset.rb +0 -239
- data/lib/slack_cli/commands/status.rb +0 -194
- data/lib/slack_cli/commands/thread.rb +0 -62
- data/lib/slack_cli/commands/unread.rb +0 -312
- data/lib/slack_cli/commands/workspaces.rb +0 -151
- data/lib/slack_cli/formatters/emoji_replacer.rb +0 -143
- data/lib/slack_cli/formatters/mention_replacer.rb +0 -154
- data/lib/slack_cli/formatters/message_formatter.rb +0 -429
- data/lib/slack_cli/models/duration.rb +0 -85
- data/lib/slack_cli/models/message.rb +0 -217
- data/lib/slack_cli/models/preset.rb +0 -73
- data/lib/slack_cli/models/user.rb +0 -56
- data/lib/slack_cli/models/workspace.rb +0 -52
- data/lib/slack_cli/services/api_client.rb +0 -149
- data/lib/slack_cli/services/reaction_enricher.rb +0 -87
- data/lib/slack_cli/support/user_resolver.rb +0 -114
- data/lib/slack_cli/version.rb +0 -5
- data/lib/slack_cli.rb +0 -91
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SlackCli
|
|
4
|
-
module Support
|
|
5
|
-
# Shared logic for resolving user and channel names from Slack data.
|
|
6
|
-
# Include this module in commands that need to look up user/channel names.
|
|
7
|
-
#
|
|
8
|
-
# == Required Interface
|
|
9
|
-
# Including classes must provide these methods:
|
|
10
|
-
# - runner: Returns the Runner instance for API access
|
|
11
|
-
# - cache_store: Returns the CacheStore for name lookups
|
|
12
|
-
# - debug(message): Logs debug messages (can be a no-op)
|
|
13
|
-
module UserResolver
|
|
14
|
-
# Resolves a DM channel ID to the user's display name
|
|
15
|
-
# @param workspace [Models::Workspace] The workspace to look up in
|
|
16
|
-
# @param channel_id [String] The DM channel ID (starts with D)
|
|
17
|
-
# @param conversations [Api::Conversations] API client for conversation info
|
|
18
|
-
# @return [String] User name or channel ID if not found
|
|
19
|
-
def resolve_dm_user_name(workspace, channel_id, conversations)
|
|
20
|
-
info = conversations.info(channel: channel_id)
|
|
21
|
-
return channel_id unless info["ok"] && info["channel"]
|
|
22
|
-
|
|
23
|
-
user_id = info["channel"]["user"]
|
|
24
|
-
return channel_id unless user_id
|
|
25
|
-
|
|
26
|
-
# Try cache first
|
|
27
|
-
cached = cache_store.get_user(workspace.name, user_id)
|
|
28
|
-
return cached if cached
|
|
29
|
-
|
|
30
|
-
# Try users API lookup
|
|
31
|
-
begin
|
|
32
|
-
users_api = runner.users_api(workspace.name)
|
|
33
|
-
user_info = users_api.info(user_id)
|
|
34
|
-
if user_info["ok"] && user_info["user"]
|
|
35
|
-
profile = user_info["user"]["profile"] || {}
|
|
36
|
-
name = profile["display_name"]
|
|
37
|
-
name = profile["real_name"] if name.to_s.empty?
|
|
38
|
-
name = user_info["user"]["name"] if name.to_s.empty?
|
|
39
|
-
if name && !name.empty?
|
|
40
|
-
cache_store.set_user(workspace.name, user_id, name, persist: true)
|
|
41
|
-
return name
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
rescue ApiError => e
|
|
45
|
-
debug("User lookup failed for #{user_id}: #{e.message}")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
user_id
|
|
49
|
-
rescue ApiError => e
|
|
50
|
-
debug("DM info lookup failed for #{channel_id}: #{e.message}")
|
|
51
|
-
channel_id
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Resolves a channel ID to a formatted label (@username or #channel)
|
|
55
|
-
# @param workspace [Models::Workspace] The workspace to look up in
|
|
56
|
-
# @param channel_id [String] The channel ID
|
|
57
|
-
# @return [String] Formatted label like "@username" or "#channel"
|
|
58
|
-
def resolve_conversation_label(workspace, channel_id)
|
|
59
|
-
# DM channels start with D
|
|
60
|
-
if channel_id.start_with?("D")
|
|
61
|
-
conversations = runner.conversations_api(workspace.name)
|
|
62
|
-
user_name = resolve_dm_user_name(workspace, channel_id, conversations)
|
|
63
|
-
return "@#{user_name}"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Try cache first
|
|
67
|
-
cached_name = cache_store.get_channel_name(workspace.name, channel_id)
|
|
68
|
-
return "##{cached_name}" if cached_name
|
|
69
|
-
|
|
70
|
-
# Try API lookup
|
|
71
|
-
begin
|
|
72
|
-
conversations = runner.conversations_api(workspace.name)
|
|
73
|
-
response = conversations.info(channel: channel_id)
|
|
74
|
-
if response["ok"] && response["channel"]
|
|
75
|
-
name = response["channel"]["name"]
|
|
76
|
-
if name
|
|
77
|
-
cache_store.set_channel(workspace.name, name, channel_id)
|
|
78
|
-
return "##{name}"
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
rescue ApiError => e
|
|
82
|
-
debug("Channel info lookup failed for #{channel_id}: #{e.message}")
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
"##{channel_id}"
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Extracts the user name from a message hash
|
|
89
|
-
# @param msg [Hash] The message data from API
|
|
90
|
-
# @param workspace [Models::Workspace] The workspace context
|
|
91
|
-
# @return [String] User name, user_id as fallback, or "unknown" if neither found
|
|
92
|
-
def extract_user_from_message(msg, workspace)
|
|
93
|
-
# Try user_profile embedded in message
|
|
94
|
-
if msg["user_profile"]
|
|
95
|
-
name = msg["user_profile"]["display_name"]
|
|
96
|
-
name = msg["user_profile"]["real_name"] if name.to_s.empty?
|
|
97
|
-
return name unless name.to_s.empty?
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Try username field
|
|
101
|
-
return msg["username"] unless msg["username"].to_s.empty?
|
|
102
|
-
|
|
103
|
-
# Try cache
|
|
104
|
-
user_id = msg["user"] || msg["bot_id"]
|
|
105
|
-
if user_id
|
|
106
|
-
cached = cache_store.get_user(workspace.name, user_id)
|
|
107
|
-
return cached if cached
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
user_id || "unknown"
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
data/lib/slack_cli/version.rb
DELETED
data/lib/slack_cli.rb
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "net/http"
|
|
4
|
-
require "uri"
|
|
5
|
-
require "json"
|
|
6
|
-
require "fileutils"
|
|
7
|
-
require "optparse"
|
|
8
|
-
require "time"
|
|
9
|
-
require "io/console"
|
|
10
|
-
|
|
11
|
-
module SlackCli
|
|
12
|
-
class Error < StandardError; end
|
|
13
|
-
class ApiError < Error; end
|
|
14
|
-
class ConfigError < Error; end
|
|
15
|
-
class EncryptionError < Error; end
|
|
16
|
-
class TokenStoreError < Error; end
|
|
17
|
-
class WorkspaceNotFoundError < ConfigError; end
|
|
18
|
-
class PresetNotFoundError < ConfigError; end
|
|
19
|
-
|
|
20
|
-
autoload :VERSION, "slack_cli/version"
|
|
21
|
-
autoload :CLI, "slack_cli/cli"
|
|
22
|
-
autoload :Runner, "slack_cli/runner"
|
|
23
|
-
|
|
24
|
-
module Models
|
|
25
|
-
autoload :Duration, "slack_cli/models/duration"
|
|
26
|
-
autoload :Workspace, "slack_cli/models/workspace"
|
|
27
|
-
autoload :Status, "slack_cli/models/status"
|
|
28
|
-
autoload :Message, "slack_cli/models/message"
|
|
29
|
-
autoload :Reaction, "slack_cli/models/reaction"
|
|
30
|
-
autoload :User, "slack_cli/models/user"
|
|
31
|
-
autoload :Channel, "slack_cli/models/channel"
|
|
32
|
-
autoload :Preset, "slack_cli/models/preset"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
module Services
|
|
36
|
-
autoload :ApiClient, "slack_cli/services/api_client"
|
|
37
|
-
autoload :Configuration, "slack_cli/services/configuration"
|
|
38
|
-
autoload :TokenStore, "slack_cli/services/token_store"
|
|
39
|
-
autoload :CacheStore, "slack_cli/services/cache_store"
|
|
40
|
-
autoload :PresetStore, "slack_cli/services/preset_store"
|
|
41
|
-
autoload :Encryption, "slack_cli/services/encryption"
|
|
42
|
-
autoload :ReactionEnricher, "slack_cli/services/reaction_enricher"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
module Formatters
|
|
46
|
-
autoload :Output, "slack_cli/formatters/output"
|
|
47
|
-
autoload :DurationFormatter, "slack_cli/formatters/duration_formatter"
|
|
48
|
-
autoload :MentionReplacer, "slack_cli/formatters/mention_replacer"
|
|
49
|
-
autoload :EmojiReplacer, "slack_cli/formatters/emoji_replacer"
|
|
50
|
-
autoload :MessageFormatter, "slack_cli/formatters/message_formatter"
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
module Commands
|
|
54
|
-
autoload :Base, "slack_cli/commands/base"
|
|
55
|
-
autoload :Status, "slack_cli/commands/status"
|
|
56
|
-
autoload :Presence, "slack_cli/commands/presence"
|
|
57
|
-
autoload :Dnd, "slack_cli/commands/dnd"
|
|
58
|
-
autoload :Messages, "slack_cli/commands/messages"
|
|
59
|
-
autoload :Thread, "slack_cli/commands/thread"
|
|
60
|
-
autoload :Unread, "slack_cli/commands/unread"
|
|
61
|
-
autoload :Catchup, "slack_cli/commands/catchup"
|
|
62
|
-
autoload :Activity, "slack_cli/commands/activity"
|
|
63
|
-
autoload :Preset, "slack_cli/commands/preset"
|
|
64
|
-
autoload :Workspaces, "slack_cli/commands/workspaces"
|
|
65
|
-
autoload :Cache, "slack_cli/commands/cache"
|
|
66
|
-
autoload :Emoji, "slack_cli/commands/emoji"
|
|
67
|
-
autoload :Config, "slack_cli/commands/config"
|
|
68
|
-
autoload :Help, "slack_cli/commands/help"
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
module Api
|
|
72
|
-
autoload :Users, "slack_cli/api/users"
|
|
73
|
-
autoload :Conversations, "slack_cli/api/conversations"
|
|
74
|
-
autoload :Dnd, "slack_cli/api/dnd"
|
|
75
|
-
autoload :Emoji, "slack_cli/api/emoji"
|
|
76
|
-
autoload :Client, "slack_cli/api/client"
|
|
77
|
-
autoload :Bots, "slack_cli/api/bots"
|
|
78
|
-
autoload :Threads, "slack_cli/api/threads"
|
|
79
|
-
autoload :Usergroups, "slack_cli/api/usergroups"
|
|
80
|
-
autoload :Activity, "slack_cli/api/activity"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
module Support
|
|
84
|
-
autoload :XdgPaths, "slack_cli/support/xdg_paths"
|
|
85
|
-
autoload :SlackUrlParser, "slack_cli/support/slack_url_parser"
|
|
86
|
-
autoload :InlineImages, "slack_cli/support/inline_images"
|
|
87
|
-
autoload :HelpFormatter, "slack_cli/support/help_formatter"
|
|
88
|
-
autoload :ErrorLogger, "slack_cli/support/error_logger"
|
|
89
|
-
autoload :UserResolver, "slack_cli/support/user_resolver"
|
|
90
|
-
end
|
|
91
|
-
end
|