问题描述
我有一个斜杠命令,当调用它时,会打印一个团队列表(存储在列表中),旁边带有复选框。我在创建旁边带有团队名称的复选框时没有问题,但只有当团队名称被硬编码时。如何遍历列表并创建未知数量的复选框?
app.command("/message",(req,ctx) -> {
ctx.respond(res -> res
.responseType("in_channel") // or "in_channnel"
.blocks(asBlocks(
section(section -> section.text(markdownText("Select channels to receive message")).accessory(
checkBoxes(checkBoxes -> checkBoxes
.options(asOptions(
option(option -> option.value("0").text(markdownText("some-team")))
option(option -> option.value("1").text(markdownText("another-team")))
))
)
)),actions(actions -> actions
.elements(asElements(
button(b -> b.actionId("submit").text(plainText
(pt -> pt.emoji(true).text("Submit"))).style("primary").value("submit"))
))
)
))
);
return ctx.ack();
});
解决方法
假设您熟悉使用块套件/块套件构建器。
您可以将完整的块集创建为文本
,然后可以使用 blocksAsString(String)
方法对其进行分配。
https://slack.dev/java-slack-sdk/guides/composing-messages:
丰富消息布局的构建块
Block Kit 是 Slack 应用的 UI 框架,它提供了一个平衡 在建立消息体验时的控制力和灵活性 其他surfaces。
用Java编写大型JSON数据结构可能没那么容易 代码。所以,我们提供了像 blocksAsString(String) 这样的 setter 方法 接受整个块部分作为单个字符串值。这种方法是 应该与加载的外部文件数据或结果一起使用 模板引擎。
ChatPostMessageResponse response = slack.methods(token).chatPostMessage(req -> req
.channel("C1234567")
.blocksAsString("[{\"type\": \"divider\"}]")
);