Пытаюсь отобразить две кнопки: «Нет, спасибо!» и «Да, пожалуйста!» следуя этому уроку. Однако в эфемерном сообщении я получаю только поле «Текст» вместо заголовка и двух кнопок:
func handleIsArticleGood() (interface{}, error) {
attachment := slack.Attachment{
Text: "Would you like to see the most recent scores?",
CallbackID: "ask_us",
Color: "#666666",
Actions: []slack.AttachmentAction{
slack.AttachmentAction{
Name: "action",
Text: "No thanks!",
Type: slack.ActionType("button"),
Value: "no",
},
slack.AttachmentAction{
Name: "action",
Text: "Yes, please!",
Type: slack.ActionType("button"),
Value: "yes",
},
},
}
return attachment, nil
}
Я вижу действия в ответе, но не кнопки:
socketmode: 2024/02/29 12:00:27 socket_mode_managed_conn.go:348: Sending Socket Mode response with envelope ID "$envID": &{d02eddad-fe96-4a46-8aa0-ccd6a7e4bd09 {#666666 ask_us 0 Would you like to see the most recent scores? [] [{action No thanks! button no 0 [] [] [] <nil> } {action Yes, please! button yes 0 [] [] [] <nil> }] [] {[]} }}
Мой линтер также выдает следующее предупреждение (также на скриншоте выше):
"redundant type from array, slice or map composite literal"
Кстати, я попробовал установить значение Type
для «кнопки» в виде строки и установить его как slack.ActionType
, поскольку, судя по документации, это ожидаемое значение.
Итак, кажется, что по какой-то причине это невозможно с использованием приведенной выше реализации. Вместо этого я использовал пример из репозитория Slack-go. Кажется, эта функция обрабатывает отображение правильных кнопок (хотя я, похоже, не получаю обратно значение) -
func handleIsArticleGood(command slack.SlashCommand, client *slack.Client) error {
attachment := slack.Attachment{
Pretext: "pretext",
Fallback: "We don't currently support your client",
CallbackID: "accept_or_reject",
Color: "#3AA3E3",
Actions: []slack.AttachmentAction{
slack.AttachmentAction{
Name: "accept",
Text: "Accept",
Type: "button",
Value: "accept",
},
slack.AttachmentAction{
Name: "reject",
Text: "Reject",
Type: "button",
Value: "reject",
Style: "danger",
},
},
}
_, _, err := client.PostMessage(command.ChannelID, slack.MsgOptionAttachments(attachment))
if err != nil {
return fmt.Errorf("failed to post message: %w", err)
}
return nil
}