修复:slack消息交互

This commit is contained in:
jxxghp
2025-06-16 09:49:01 +08:00
parent c06001d921
commit bab1f73480
3 changed files with 97 additions and 69 deletions
+5 -5
View File
@@ -126,7 +126,7 @@ class MessageChain(ChainBase):
def handle_message(self, channel: MessageChannel, source: str, def handle_message(self, channel: MessageChannel, source: str,
userid: Union[str, int], username: str, text: str, userid: Union[str, int], username: str, text: str,
original_message_id: Optional[int] = None, original_message_id: Optional[Union[str, int]] = None,
original_chat_id: Optional[str] = None) -> None: original_chat_id: Optional[str] = None) -> None:
""" """
识别消息内容,执行操作 识别消息内容,执行操作
@@ -502,7 +502,7 @@ class MessageChain(ChainBase):
def _handle_callback(self, text: str, channel: MessageChannel, source: str, def _handle_callback(self, text: str, channel: MessageChannel, source: str,
userid: Union[str, int], username: str, userid: Union[str, int], username: str,
original_message_id: Optional[int] = None, original_message_id: Optional[Union[str, int]] = None,
original_chat_id: Optional[str] = None) -> None: original_chat_id: Optional[str] = None) -> None:
""" """
处理按钮回调 处理按钮回调
@@ -554,7 +554,7 @@ class MessageChain(ChainBase):
logger.info(f"未知的回调数据:{callback_data}") logger.info(f"未知的回调数据:{callback_data}")
def _handle_page_callback(self, callback_data: str, channel: MessageChannel, source: str, def _handle_page_callback(self, callback_data: str, channel: MessageChannel, source: str,
userid: Union[str, int], original_message_id: Optional[int], userid: Union[str, int], original_message_id: Optional[Union[str, int]],
original_chat_id: Optional[str]): original_chat_id: Optional[str]):
""" """
处理翻页回调 处理翻页回调
@@ -669,7 +669,7 @@ class MessageChain(ChainBase):
def __post_medias_message(self, channel: MessageChannel, source: str, def __post_medias_message(self, channel: MessageChannel, source: str,
title: str, items: list, userid: str, total: int, title: str, items: list, userid: str, total: int,
original_message_id: Optional[int] = None, original_message_id: Optional[Union[str, int]] = None,
original_chat_id: Optional[str] = None): original_chat_id: Optional[str] = None):
""" """
发送媒体列表消息 发送媒体列表消息
@@ -758,7 +758,7 @@ class MessageChain(ChainBase):
def __post_torrents_message(self, channel: MessageChannel, source: str, def __post_torrents_message(self, channel: MessageChannel, source: str,
title: str, items: list, userid: str, total: int, title: str, items: list, userid: str, total: int,
original_message_id: Optional[int] = None, original_message_id: Optional[Union[str, int]] = None,
original_chat_id: Optional[str] = None): original_chat_id: Optional[str] = None):
""" """
发送种子列表消息 发送种子列表消息
+90 -62
View File
@@ -52,7 +52,7 @@ class Slack:
with requests.post(self._ds_url, json=message, timeout=10) as local_res: with requests.post(self._ds_url, json=message, timeout=10) as local_res:
logger.debug("message: %s processed, response is: %s" % (message, local_res.text)) logger.debug("message: %s processed, response is: %s" % (message, local_res.text))
@slack_app.action(re.compile(r"actionId-\d+")) @slack_app.action(re.compile(r"actionId-.*"))
def slack_action(ack, body): def slack_action(ack, body):
ack() ack()
with requests.post(self._ds_url, json=body, timeout=60) as local_res: with requests.post(self._ds_url, json=body, timeout=60) as local_res:
@@ -258,67 +258,95 @@ class Slack:
"type": "divider" "type": "divider"
}) })
index = 1 index = 1
for media in medias:
if media.get_poster_image(): # 如果有自定义按钮,先添加所有媒体项,然后添加统一的按钮
if media.vote_star: if buttons:
text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \ # 添加媒体列表(不带单独的选择按钮)
f"\n类型:{media.type.value}" \ for media in medias:
f"\n{media.vote_star}" \ if media.get_poster_image():
f"\n{media.get_overview_string(50)}" if media.vote_star:
else: text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \
text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \ f"\n类型:{media.type.value}" \
f"\n类型:{media.type.value}" \ f"\n{media.vote_star}" \
f"\n{media.get_overview_string(50)}" f"\n{media.get_overview_string(50)}"
blocks.append( else:
{ text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \
"type": "section", f"\n类型:{media.type.value}" \
"text": { f"\n{media.get_overview_string(50)}"
"type": "mrkdwn", blocks.append(
"text": text {
}, "type": "section",
"accessory": { "text": {
"type": "image", "type": "mrkdwn",
"image_url": f"{media.get_poster_image()}", "text": text
"alt_text": f"{media.title_year}" },
"accessory": {
"type": "image",
"image_url": f"{media.get_poster_image()}",
"alt_text": f"{media.title_year}"
}
} }
} )
) index += 1
# 如果有自定义按钮,使用自定义按钮,否则使用默认选择按钮
if buttons: # 添加统一的自定义按钮(在所有媒体项之后)
# 使用自定义按钮(通常来自MessageChain的智能生成) for button_row in buttons:
for button_row in buttons: elements = []
elements = [] for button in button_row:
for button in button_row: if "url" in button:
if "url" in button: elements.append({
elements.append({ "type": "button",
"type": "button", "text": {
"text": { "type": "plain_text",
"type": "plain_text", "text": button["text"],
"text": button["text"], "emoji": True
"emoji": True },
}, "url": button["url"],
"url": button["url"], "action_id": f"actionId-url-{len(elements)}"
"action_id": f"actionId-url-{len(elements)}" })
}) else:
else: elements.append({
elements.append({ "type": "button",
"type": "button", "text": {
"text": { "type": "plain_text",
"type": "plain_text", "text": button["text"],
"text": button["text"], "emoji": True
"emoji": True },
}, "value": button["callback_data"],
"value": button["callback_data"], "action_id": f"actionId-{button['callback_data']}"
"action_id": f"actionId-{button['callback_data']}" })
}) if elements:
if elements: blocks.append({
blocks.append({ "type": "actions",
"type": "actions", "elements": elements
"elements": elements })
}) else:
# 只为第一个媒体项添加按钮,避免重复 # 使用默认的每个媒体项单独按钮
buttons = None for media in medias:
else: if media.get_poster_image():
if media.vote_star:
text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \
f"\n类型:{media.type.value}" \
f"\n{media.vote_star}" \
f"\n{media.get_overview_string(50)}"
else:
text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \
f"\n类型:{media.type.value}" \
f"\n{media.get_overview_string(50)}"
blocks.append(
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": text
},
"accessory": {
"type": "image",
"image_url": f"{media.get_poster_image()}",
"alt_text": f"{media.title_year}"
}
}
)
# 使用默认选择按钮 # 使用默认选择按钮
blocks.append( blocks.append(
{ {
@@ -337,7 +365,7 @@ class Slack:
] ]
} }
) )
index += 1 index += 1
# 判断是编辑消息还是发送新消息 # 判断是编辑消息还是发送新消息
if original_message_id and original_chat_id: if original_message_id and original_chat_id:
+2 -2
View File
@@ -30,7 +30,7 @@ class CommingMessage(BaseModel):
# 回调数据 # 回调数据
callback_data: Optional[str] = None callback_data: Optional[str] = None
# 消息ID(用于回调时定位原消息) # 消息ID(用于回调时定位原消息)
message_id: Optional[int] = None message_id: Optional[Union[str, int]] = None
# 聊天ID(用于回调时定位聊天) # 聊天ID(用于回调时定位聊天)
chat_id: Optional[str] = None chat_id: Optional[str] = None
# 完整的回调查询信息(原始数据) # 完整的回调查询信息(原始数据)
@@ -80,7 +80,7 @@ class Notification(BaseModel):
# 按钮列表,格式:[[{"text": "按钮文本", "callback_data": "回调数据", "url": "链接"}]] # 按钮列表,格式:[[{"text": "按钮文本", "callback_data": "回调数据", "url": "链接"}]]
buttons: Optional[List[List[dict]]] = None buttons: Optional[List[List[dict]]] = None
# 原消息ID,用于编辑消息 # 原消息ID,用于编辑消息
original_message_id: Optional[int] = None original_message_id: Optional[Union[str, int]] = None
# 原消息的聊天ID,用于编辑消息 # 原消息的聊天ID,用于编辑消息
original_chat_id: Optional[str] = None original_chat_id: Optional[str] = None