From 715da548c8b1bbd20f56fb1821b133a739363a60 Mon Sep 17 00:00:00 2001 From: wangcham Date: Tue, 1 Apr 2025 02:34:16 -0400 Subject: [PATCH] fix: put the link and content together --- libs/slack_api/api.py | 5 ++++- libs/slack_api/slackevent.py | 40 +++++++++++++++++++++++++++++------ pkg/platform/sources/slack.py | 7 ++---- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/libs/slack_api/api.py b/libs/slack_api/api.py index 5988e3e7..86239ce9 100644 --- a/libs/slack_api/api.py +++ b/libs/slack_api/api.py @@ -32,6 +32,7 @@ class SlackClient(): if self.bot_user_id and bot_user_id == self.bot_user_id: return jsonify({'status': 'ok'}) + # 处理私信 if data and data.get("event", {}).get("channel_type") in ["im"]: event = SlackEvent.from_payload(data) @@ -44,6 +45,8 @@ class SlackClient(): event = SlackEvent.from_payload(data) await self._handle_message(event) return jsonify({'status':'ok'}) + + return jsonify({'status': 'ok'}) except Exception as e: raise(e) @@ -68,7 +71,7 @@ class SlackClient(): return func return decorator - async def send_message_to_channle(self,text:str,channel_id:str): + async def send_message_to_channel(self,text:str,channel_id:str): try: response = await self.client.chat_postMessage( channel=channel_id, diff --git a/libs/slack_api/slackevent.py b/libs/slack_api/slackevent.py index bf335ac8..5a6e9f90 100644 --- a/libs/slack_api/slackevent.py +++ b/libs/slack_api/slackevent.py @@ -11,18 +11,44 @@ class SlackEvent(dict): @property def text(self) -> str: + if self.get("event", {}).get("channel_type") == "im": - elements = self["event"]["blocks"][0]["elements"][0]["elements"] - for el in elements: - if el.get("type") == "text": - return el.get("text", "") + blocks = self.get("event", {}).get("blocks", []) + if not blocks: + return "" + + elements = blocks[0].get("elements", []) + if not elements: + return "" + + elements = elements[0].get("elements", []) + text = "" + + for el in elements: + if el.get("type") == "text": + text += el.get("text", "") + elif el.get("type") == "link": + text += el.get("url", "") + + return text + if self.get("event",{}).get("channel_type") == 'channel': - - message_text = next((el["text"] for block in self.get("event", {}).get("blocks", []) if block.get("type") == "rich_text" for element in block.get("elements", []) if element.get("type") == "rich_text_section" for el in element.get("elements", []) if el.get("type") == "text"), "") + message_text = "" + for block in self.get("event", {}).get("blocks", []): + if block.get("type") == "rich_text": + for element in block.get("elements", []): + if element.get("type") == "rich_text_section": + parts = [] + for el in element.get("elements", []): + if el.get("type") == "text": + parts.append(el["text"]) + elif el.get("type") == "link": + parts.append(el["url"]) + message_text = "".join(parts) + return message_text - return "" @property diff --git a/pkg/platform/sources/slack.py b/pkg/platform/sources/slack.py index b899bbe2..9d910a70 100644 --- a/pkg/platform/sources/slack.py +++ b/pkg/platform/sources/slack.py @@ -138,7 +138,7 @@ class SlackAdapter(adapter.MessagePlatformAdapter): for content in content_list: if slack_event.type == 'channel': - await self.bot.send_message_to_channle( + await self.bot.send_message_to_channel( content['content'],slack_event.channel_id ) if slack_event.type == 'im': @@ -158,10 +158,7 @@ class SlackAdapter(adapter.MessagePlatformAdapter): ], ): async def on_message(event:SlackEvent): - if self.bot.bot_user_id: - self.bot_account_id = self.bot.bot_user_id - else: - self.bot_account_id = 'SlackBot' + self.bot_account_id = 'SlackBot' try: return await callback( await self.event_converter.target2yiri(event,self.bot),self