0

这是一些上下文,我正盯着使用 slack BOLD SDK for python,虽然指南很棒......为块套件部分发布那些巨大的代码块是一团糟,所以我想创建一个新的类/函数并导入它..所以,而不是这个:

main.py
-------
@app.message("hello")
def message_hello(message, say):
    # say() sends a message to the channel where the event was triggered
    say(
        blocks=[
            {
                "type": "section",
                "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
                "accessory": {
                    "type": "button",
                    "text": {"type": "plain_text", "text": "Click Me"},
                    "action_id": "button_click"
                }
            }
        ],
        text=f"Hey there <@{message['user']}>!"
    )

我可以做这个:

msg.py:
--------
def hello():
       return blocks=[
            {
                "type": "section",
                "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
                "accessory": {
                    "type": "button",
                    "text": {"type": "plain_text", "text": "Click Me"},
                    "action_id": "button_click"
                }
            }
        ],
        text=f"Hey there <@{message['user']}>!"

main.py
--------
import from lib msg

@app.message("hello")
def message_hello(message, say):
    # say() sends a message to the channel where the event was triggered
    say(msg.hello())

自从我上次使用 Python 以来已经有一段时间了,我在返回部分遇到了问题msg.py

任何人都可以刷新我的记忆并帮助我吗?

谢谢!

4

2 回答 2

0

我通过传递一个正确的 JSON 对象来“修复它”:

def msg_click(message):
    return {
        "blocks": [
                     {
                         "type": "section",
                         "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!, please click the button :point_right:"},
                         "accessory": {
                             "type": "button",
                             "text": {"type": "plain_text", "text": "Click Me"},
                             "action_id": "button_click"
                         }
                     }
                 ],
        "text": f"Hey there <@{message['user']}>!"
    }

我只是使用了 block kit builder 中的 json 格式……虽然很乱但可以工作。

于 2021-08-12T21:17:42.293 回答
0

我不相信您要实现的目标实际上是有用的。

您只是将“巨大的代码混乱块”从一个函数移动到另一个函数,但现在您有两个函数而不是一个。没有另一个功能,任何一个功能都是没有意义的——因为它们非常依赖彼此,所以合并它们是有意义的,或者一开始就不将它们分开。

return函数语句中的“keyword argument-y”语法hello无效。hello将不得不返回某种集合,比如元组或列表,甚至是字典,因为你试图返回不止一个东西。这意味着,稍后在您的message_hello函数中,您必须解压缩返回的数据结构(没什么大不了的)。

您有两个 f 字符串希望访问名为message. 在评估这些文字时,函数范围内不存在此类变量,因此这是运行时错误。另一个不将原始代码拆分为两个单独函数的原因。

如果您真的想这样做,您可能最终不得不执行以下操作:

def hello():
    return [
        {
            "type": "section",
            "text": {"type": "mrkdwn", "text": "Hey there <@{}>!"},
            "accessory": {
                "type": "button",
                "text": {"type": "plain_text", "text": "Click Me"},
                "action_id": "button_click"
            }
        }
    ], "Hey there <@{}>!"

@app.message("hello")
def message_hello(message, say):
    from msg import hello
    kwargs = dict(zip(("blocks", "text"), hello()))
    kwargs["blocks"]["text"]["text"].format(message["user"])
    kwargs["text"].format(message["user"])
    say(**kwargs)

同样,您必须稍后在 中进行所有字符串格式化message_hello,这不是很好,因为现在此函数需要了解hello.

于 2021-08-12T14:21:35.320 回答