diff --git a/exporter-ng.py b/exporter_ng.py similarity index 88% rename from exporter-ng.py rename to exporter_ng.py index fc5f712..955eb44 100644 --- a/exporter-ng.py +++ b/exporter_ng.py @@ -150,12 +150,11 @@ class SlackUser: @classmethod def from_dict(cls, data: Dict) -> 'SlackUser': - profile = data.get("profile", {}) return cls( id=data["id"], name=data.get("name", ""), - real_name=profile.get("real_name"), - display_name=profile.get("display_name"), + real_name=data.get("real_name"), + display_name=data.get("display_name"), is_admin=data.get("is_admin", False), is_owner=data.get("is_owner", False), is_primary_owner=data.get("is_primary_owner", False), @@ -195,15 +194,18 @@ class SlackUser: class SlackChannel: """Reprezentacja kanału Slack""" - def __init__(self, data: Dict): + def __init__(self, data: Dict, users: Dict[str, SlackUser]): self.id = data["id"] self.name = data.get("name", "") self.is_private = data.get("is_private", False) self.is_im = data.get("is_im", False) self.is_mpim = data.get("is_mpim", False) self.is_group = data.get("is_group", False) - self.creator_id = data.get("creator") - self.user_id = data.get("user") + self._creator_id = data.get("creator_id") + self._user_id = data.get("user_id") + self.user = users[self._user_id].get_display_name() if self._user_id and self._user_id in users else "(nieznany)" + self._mpim_users = self._list_mpim({u.name: u for u in users.values()}) if self.is_mpim else [] + self.label = self._create_label(users) @property def type(self) -> str: @@ -216,7 +218,24 @@ class SlackChannel: else: return "channel" - def format(self, users: Dict[str, SlackUser]) -> str: + @property + def short_label(self) -> str: + if self.is_im: + return f"(DM) {self.user}" + elif self.is_mpim: + return f"(MPDM) {', '.join(self._mpim_users)}" + return self.name + + def _list_mpim(self, users: Dict[str, SlackUser]) -> List[str]: + result = [] + for part in self.name.split("-"): + name = users.get(part) + if name: + result.append(name.get_display_name()) + return result + + + def _create_label(self, users: Dict[str, SlackUser]) -> str: """Formatuje informacje o kanale""" parts = [f"[{self.id}]"] @@ -228,10 +247,10 @@ class SlackChannel: parts.append(self.type) - if self.creator_id and self.creator_id in users: - parts.append(f"created by {users[self.creator_id].name}") - elif self.user_id and self.user_id in users: - parts.append(f"with {users[self.user_id].name}") + if self._creator_id and self._creator_id in users: + parts.append(f"created by {users[self._creator_id].get_display_name()}") + elif self._user_id and self._user_id in users: + parts.append(f"with {users[self._user_id].get_display_name()}") return " ".join(parts) @@ -322,13 +341,15 @@ class SlackExporter: def _load_users(self) -> Dict[str, SlackUser]: """Ładuje użytkowników""" - users_data = self.api.get_users() + # users_data = self.api.get_users() + users_data = json.load(open("out/user_list.json", "r", encoding="utf-8")) return {u["id"]: SlackUser.from_dict(u) for u in users_data} def _load_channels(self) -> List[SlackChannel]: """Ładuje kanały""" - channels_data = self.api.get_channels() - return [SlackChannel(ch) for ch in channels_data] + # channels_data = self.api.get_channels() + channels_data = json.load(open("out/channel_list.json", "r", encoding="utf-8")) + return [SlackChannel(ch, self.users) for ch in channels_data] def _save_data(self, data: Any, filename: str, as_json: bool = False): """Zapisuje dane do pliku""" @@ -346,6 +367,12 @@ class SlackExporter: else: f.write(data) + def export_channels(self, channels: List[str]): + with open(os.path.join(self.output_dir, "channels.txt"), "w", encoding="utf-8") as f: + for channel in channels: + f.write(str(channel) + "\n") + pass + def export_channel_list(self, as_json: bool = False): """Eksportuje listę kanałów""" if as_json: