修复: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

View File

@@ -126,7 +126,7 @@ class MessageChain(ChainBase):
def handle_message(self, channel: MessageChannel, source: 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:
"""
识别消息内容,执行操作
@@ -502,7 +502,7 @@ class MessageChain(ChainBase):
def _handle_callback(self, text: str, channel: MessageChannel, source: 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:
"""
处理按钮回调
@@ -554,7 +554,7 @@ class MessageChain(ChainBase):
logger.info(f"未知的回调数据:{callback_data}")
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]):
"""
处理翻页回调
@@ -669,7 +669,7 @@ class MessageChain(ChainBase):
def __post_medias_message(self, channel: MessageChannel, source: str,
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):
"""
发送媒体列表消息
@@ -758,7 +758,7 @@ class MessageChain(ChainBase):
def __post_torrents_message(self, channel: MessageChannel, source: str,
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):
"""
发送种子列表消息

View File

@@ -52,7 +52,7 @@ class Slack:
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))
@slack_app.action(re.compile(r"actionId-\d+"))
@slack_app.action(re.compile(r"actionId-.*"))
def slack_action(ack, body):
ack()
with requests.post(self._ds_url, json=body, timeout=60) as local_res:
@@ -258,67 +258,95 @@ class Slack:
"type": "divider"
})
index = 1
for media in medias:
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}"
# 如果有自定义按钮,先添加所有媒体项,然后添加统一的按钮
if buttons:
# 添加媒体列表(不带单独的选择按钮)
for media in medias:
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}"
}
}
}
)
# 如果有自定义按钮,使用自定义按钮,否则使用默认选择按钮
if buttons:
# 使用自定义按钮通常来自MessageChain的智能生成
for button_row in buttons:
elements = []
for button in button_row:
if "url" in button:
elements.append({
"type": "button",
"text": {
"type": "plain_text",
"text": button["text"],
"emoji": True
},
"url": button["url"],
"action_id": f"actionId-url-{len(elements)}"
})
else:
elements.append({
"type": "button",
"text": {
"type": "plain_text",
"text": button["text"],
"emoji": True
},
"value": button["callback_data"],
"action_id": f"actionId-{button['callback_data']}"
})
if elements:
blocks.append({
"type": "actions",
"elements": elements
})
# 只为第一个媒体项添加按钮,避免重复
buttons = None
else:
)
index += 1
# 添加统一的自定义按钮(在所有媒体项之后)
for button_row in buttons:
elements = []
for button in button_row:
if "url" in button:
elements.append({
"type": "button",
"text": {
"type": "plain_text",
"text": button["text"],
"emoji": True
},
"url": button["url"],
"action_id": f"actionId-url-{len(elements)}"
})
else:
elements.append({
"type": "button",
"text": {
"type": "plain_text",
"text": button["text"],
"emoji": True
},
"value": button["callback_data"],
"action_id": f"actionId-{button['callback_data']}"
})
if elements:
blocks.append({
"type": "actions",
"elements": elements
})
else:
# 使用默认的每个媒体项单独按钮
for media in medias:
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(
{
@@ -337,7 +365,7 @@ class Slack:
]
}
)
index += 1
index += 1
# 判断是编辑消息还是发送新消息
if original_message_id and original_chat_id:

View File

@@ -30,7 +30,7 @@ class CommingMessage(BaseModel):
# 回调数据
callback_data: Optional[str] = None
# 消息ID用于回调时定位原消息
message_id: Optional[int] = None
message_id: Optional[Union[str, int]] = None
# 聊天ID用于回调时定位聊天
chat_id: Optional[str] = None
# 完整的回调查询信息(原始数据)
@@ -80,7 +80,7 @@ class Notification(BaseModel):
# 按钮列表,格式:[[{"text": "按钮文本", "callback_data": "回调数据", "url": "链接"}]]
buttons: Optional[List[List[dict]]] = None
# 原消息ID用于编辑消息
original_message_id: Optional[int] = None
original_message_id: Optional[Union[str, int]] = None
# 原消息的聊天ID用于编辑消息
original_chat_id: Optional[str] = None