mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-08 17:08:35 +08:00
修复:slack消息交互
This commit is contained in:
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user