aboutsummaryrefslogtreecommitdiffstats
path: root/slack/commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'slack/commands.py')
-rw-r--r--slack/commands.py47
1 files changed, 42 insertions, 5 deletions
diff --git a/slack/commands.py b/slack/commands.py
index 8e807e1..a08799a 100644
--- a/slack/commands.py
+++ b/slack/commands.py
@@ -271,7 +271,7 @@ def command_slack_workspace_del(
)
-@weechat_command(min_args=1)
+@weechat_command("%(threads)", min_args=1)
def command_slack_thread(
buffer: str, args: List[str], options: Dict[str, Optional[str]]
):
@@ -392,9 +392,13 @@ def command_cb(data: str, buffer: str, args: str) -> int:
return weechat.WEECHAT_RC_OK
-def completion_list_add(completion: str, word: str, nick_completion: int, where: str):
+def completion_list_add(
+ completion: str, word: str, nick_completion: int, where: str, buffer: str
+):
if word == "%(slack_workspaces)":
- completion_slack_workspaces_cb("", "slack_workspaces", "", completion)
+ completion_slack_workspaces_cb("", "slack_workspaces", buffer, completion)
+ elif word == "%(threads)":
+ completion_thread_hashes_cb("", "threads", buffer, completion)
else:
# TODO: Consider WeeChat verison support, in < 2.9 one must use hook_completion_list_add
weechat.completion_list_add(completion, word, nick_completion, where)
@@ -421,11 +425,13 @@ def completion_slack_workspace_commands_cb(
for match in matching_cmds:
cmd_arg = match.split(" ")
completion_list_add(
- completion, cmd_arg[0], 0, weechat.WEECHAT_LIST_POS_SORT
+ completion, cmd_arg[0], 0, weechat.WEECHAT_LIST_POS_SORT, buffer
)
else:
for arg in command.completion.split("|"):
- completion_list_add(completion, arg, 0, weechat.WEECHAT_LIST_POS_SORT)
+ completion_list_add(
+ completion, arg, 0, weechat.WEECHAT_LIST_POS_SORT, buffer
+ )
return weechat.WEECHAT_RC_OK
@@ -440,6 +446,31 @@ def completion_irc_channels_cb(
return weechat.WEECHAT_RC_OK
+def completion_thread_hashes_cb(
+ data: str, completion_item: str, buffer: str, completion: str
+) -> int:
+ slack_buffer = shared.buffers.get(buffer)
+ if not isinstance(slack_buffer, SlackConversation):
+ return weechat.WEECHAT_RC_OK
+
+ message_tss = sorted(slack_buffer.message_hashes.keys())
+ messages = [slack_buffer.messages.get(ts) for ts in message_tss]
+ thread_messages = [
+ message
+ for message in messages
+ if message is not None and message.is_thread_parent
+ ]
+ for message in thread_messages:
+ weechat.completion_list_add(
+ completion, message.hash, 0, weechat.WEECHAT_LIST_POS_BEGINNING
+ )
+ for message in thread_messages:
+ weechat.completion_list_add(
+ completion, f"${message.hash}", 0, weechat.WEECHAT_LIST_POS_BEGINNING
+ )
+ return weechat.WEECHAT_RC_OK
+
+
def complete_input(slack_buffer: SlackBuffer, query: str):
if (
slack_buffer.completion_context == "ACTIVE_COMPLETION"
@@ -543,6 +574,12 @@ def register_commands():
get_callback_name(completion_irc_channels_cb),
"",
)
+ weechat.hook_completion(
+ "threads",
+ "complete thread ids for slack",
+ get_callback_name(completion_thread_hashes_cb),
+ "",
+ )
for cmd, command in commands.items():
if command.top_level: