From 237fe69d822aabbb24a84ddeac647f4cb15bcb0f Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 15 Jun 2023 17:30:31 +0800 Subject: [PATCH] fix slack --- app/command.py | 1 + app/modules/slack/__init__.py | 20 +++++++++ app/modules/slack/slack.py | 78 +++++++++++++++++++---------------- 3 files changed, 64 insertions(+), 35 deletions(-) diff --git a/app/command.py b/app/command.py index 1cdc2d6b..d5544fa5 100644 --- a/app/command.py +++ b/app/command.py @@ -182,6 +182,7 @@ class Command(metaclass=Singleton): command['func'](data_str) else: command['func']() + logger.info(f"{command.get('description')} 执行完成") except Exception as err: logger.error(f"执行命令 {cmd} 出错:{str(err)}") traceback.print_exc() diff --git a/app/modules/slack/__init__.py b/app/modules/slack/__init__.py index 93214391..9a395f14 100644 --- a/app/modules/slack/__init__.py +++ b/app/modules/slack/__init__.py @@ -56,6 +56,22 @@ class SlackModule(_ModuleBase): 'event_ts': '1670143568.444289', 'channel_type': 'im' } + # 命令 + { + "token": "", + "team_id": "", + "team_domain": "", + "channel_id": "", + "channel_name": "directmessage", + "user_id": "", + "user_name": "", + "command": "/subscribes", + "text": "", + "api_app_id": "", + "is_enterprise_install": "false", + "response_url": "", + "trigger_id": "" + } # 快捷方式 { "type": "shortcut", @@ -151,6 +167,10 @@ class SlackModule(_ModuleBase): userid = msg_json.get("user", {}).get("id") text = msg_json.get("callback_id") username = msg_json.get("user", {}).get("username") + elif msg_json.get("command"): + userid = msg_json.get("user_id") + text = msg_json.get("command") + username = msg_json.get("user_name") else: return None logger.info(f"收到Slack消息:userid={userid}, username={username}, text={text}") diff --git a/app/modules/slack/slack.py b/app/modules/slack/slack.py index 59e1ce2b..dd56829c 100644 --- a/app/modules/slack/slack.py +++ b/app/modules/slack/slack.py @@ -62,6 +62,12 @@ class Slack: local_res = requests.post(self._ds_url, json=body, timeout=10) logger.debug("message: %s processed, response is: %s" % (body, local_res.text)) + @slack_app.command(re.compile(r"/*")) + def slack_command(ack, body): + ack() + local_res = requests.post(self._ds_url, json=body, timeout=10) + logger.debug("message: %s processed, response is: %s" % (body, local_res.text)) + # 启动服务 try: self._service = SocketModeHandler( @@ -101,44 +107,46 @@ class Slack: else: # 消息广播 channel = self.__find_public_channel() - # 拼装消息内容 - block = { - "type": "section", - "text": { - "type": "mrkdwn", - "text": f"*{title}*\n{text or ''}" - } - } - # 消息图片 - if image: - block['accessory'] = { - "type": "image", - "image_url": f"{image}", - "alt_text": f"{title}" - } - blocks = [block] - # 链接 - if image and url: - blocks.append({ - "type": "actions", - "elements": [ - { - "type": "button", - "text": { - "type": "plain_text", - "text": "查看详情", - "emoji": True - }, - "value": "click_me_url", - "url": f"{url}", - "action_id": "actionId-url" - } - ] - }) + # 消息文本 + message_text = "" + # 结构体 + blocks = [] + if not image: + message_text = f"*{title}*\n{text or ''}" + else: + # 消息图片 + if image: + # 拼装消息内容 + blocks.append({"type": "section", "text": { + "type": "mrkdwn", + "text": f"*{title}*\n{text or ''}" + }, 'accessory': { + "type": "image", + "image_url": f"{image}", + "alt_text": f"{title}" + }}) + # 链接 + if url: + blocks.append({ + "type": "actions", + "elements": [ + { + "type": "button", + "text": { + "type": "plain_text", + "text": "查看详情", + "emoji": True + }, + "value": "click_me_url", + "url": f"{url}", + "action_id": "actionId-url" + } + ] + }) # 发送 result = self._client.chat_postMessage( channel=channel, - text=f"*{title}*\n{text or ''}", + text=message_text, blocks=blocks ) return True, result