fix: put the link and content together

This commit is contained in:
wangcham
2025-04-01 02:34:16 -04:00
parent 8799f86ea4
commit 715da548c8
3 changed files with 39 additions and 13 deletions

View File

@@ -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)
@@ -45,6 +46,8 @@ class SlackClient():
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,

View File

@@ -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 = ""
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)
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"), "")
return message_text
return ""
@property

View File

@@ -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