aboutsummaryrefslogtreecommitdiffstats
path: root/slack/slack_conversation.py
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2023-01-29 13:18:51 +0100
committerTrygve Aaberge <trygveaa@gmail.com>2024-02-18 11:32:53 +0100
commit33c5891478937ceb3c1f7e72ef9cd47e6b0e1090 (patch)
tree9179e2ccec3680170d891df223081f52c4306c46 /slack/slack_conversation.py
parentf5dab24587beee2f2d4d4310adb64dad820787ad (diff)
downloadwee-slack-33c5891478937ceb3c1f7e72ef9cd47e6b0e1090.tar.gz
Open all conversation types on start
Diffstat (limited to 'slack/slack_conversation.py')
-rw-r--r--slack/slack_conversation.py54
1 files changed, 41 insertions, 13 deletions
diff --git a/slack/slack_conversation.py b/slack/slack_conversation.py
index a23666e..fbf42bf 100644
--- a/slack/slack_conversation.py
+++ b/slack/slack_conversation.py
@@ -12,6 +12,7 @@ from slack.task import gather
from slack.util import get_callback_name
if TYPE_CHECKING:
+ from slack_api.slack_conversations_info import SlackConversationsInfo
from typing_extensions import Literal
from slack.slack_api import SlackApi
@@ -22,16 +23,21 @@ def get_conversation_from_buffer_pointer(
buffer_pointer: str,
) -> Optional[SlackConversation]:
for workspace in shared.workspaces.values():
- for conversation in workspace.conversations.values():
+ for conversation in workspace.open_conversations.values():
if conversation.buffer_pointer == buffer_pointer:
return conversation
return None
class SlackConversation:
- def __init__(self, workspace: SlackWorkspace, id: str):
+ def __init__(
+ self,
+ workspace: SlackWorkspace,
+ info: SlackConversationsInfo,
+ ):
self.workspace = workspace
- self.id = id
+ self._info = info
+ self._members: List[str]
# TODO: buffer_pointer may be accessed by buffer_switch before it's initialized
self.buffer_pointer: str = ""
self.name: str
@@ -48,10 +54,19 @@ class SlackConversation:
self.completion_values: List[str] = []
self.completion_index = 0
+ @classmethod
+ async def create(cls, workspace: SlackWorkspace, conversation_id: str):
+ info_response = await workspace.api.fetch_conversations_info(conversation_id)
+ return cls(workspace, info_response["channel"])
+
@property
def _api(self) -> SlackApi:
return self.workspace.api
+ @property
+ def id(self) -> str:
+ return self._info["id"]
+
@contextmanager
def loading(self):
self.is_loading = True
@@ -70,17 +85,28 @@ class SlackConversation:
finally:
self.completion_context = "ACTIVE_COMPLETION"
- async def init(self):
- with self.loading():
- info = await self._api.fetch_conversations_info(self)
+ async def open_if_open(self):
+ if "is_open" in self._info:
+ if self._info["is_open"]:
+ await self.open_buffer()
+ elif "is_member" in self._info and self._info["is_member"]:
+ await self.open_buffer()
- info_channel = info["channel"]
- if info_channel["is_im"] is True:
- self.name = "IM" # TODO
- elif info_channel["is_mpim"] is True:
- self.name = "MPIM" # TODO
- else:
- self.name = info_channel["name"]
+ async def open_buffer(self):
+ with self.loading():
+ if "is_im" in self._info and self._info["is_im"] is True:
+ im_user = await self.workspace.users[self._info["user"]]
+ self.name = im_user.nick()
+ elif self._info["is_mpim"] is True:
+ members_response = await self._api.fetch_conversations_members(self)
+ self._members = members_response["members"]
+ await self.workspace.users.initialize_items(self._members)
+ member_users = await gather(
+ *(self.workspace.users[user_id] for user_id in self._members)
+ )
+ self.name = ",".join([user.nick() for user in member_users])
+ else:
+ self.name = f"#{self._info['name']}"
full_name = f"{shared.SCRIPT_NAME}.{self.workspace.name}.{self.name}"
@@ -92,6 +118,8 @@ class SlackConversation:
self.buffer_pointer, "localvar_set_nick", self.workspace.my_user.nick()
)
+ self.workspace.open_conversations[self.id] = self
+
async def fill_history(self):
if self.history_filled or self.history_pending:
return