Documentation ¶
Overview ¶
Package chat is a lightweight wrapper over the "chat" methods in Slack's Web API: https://api.slack.com/methods?filter=chat.
Index ¶
- Constants
- type API
- func (a API) Delete(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) GetPermalink(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) PostEphemeral(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) PostMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) SendApprovalMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) SendTextMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- func (a API) Update(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
- type BotProfile
- type DeleteRequest
- type DeleteResponse
- type Edited
- type GetPermalinkResponse
- type Message
- type PostEphemeralRequest
- type PostEphemeralResponse
- type PostMessageRequest
- type PostMessageResponse
- type Reaction
- type SendApprovalMessageRequest
- type Text
- type UpdateRequest
- type UpdateResponse
Constants ¶
const ( DefaultApprovalGreenButton = "Approve" DefaultApprovalRedButton = "Deny" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type API ¶
type API struct {
Vars sdkservices.Vars
}
func (API) Delete ¶
func (a API) Delete(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
Delete an existing message sent by the caller.
Based on: https://api.slack.com/methods/chat.delete
Required Slack app scopes:
- https://api.slack.com/scopes/chat:write
- https://api.slack.com/scopes/chat:write.public (for posting in public channels even when our Slack app isn't a member)
func (API) GetPermalink ¶ added in v0.5.7
func (a API) GetPermalink(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
GetPermalink generates a permalink URL for a specific extant message.
Based on: https://api.slack.com/methods/chat.getPermalink
Required Slack app scopes: none.
func (API) PostEphemeral ¶
func (a API) PostEphemeral(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
PostEphemeral sends an ephemeral message to a user in a group/channel (visible only to the assigned user). For text formatting tips, see https://api.slack.com/reference/surfaces/formatting. This message may also contain a rich layout and/or interactive blocks: https://api.slack.com/messaging/composing/layouts.
It returns the channel ID and the message's timestamp, but this timestamp may not be used for subsequent updates.
https://api.slack.com/methods/chat.postEphemeral#markdown: ephemeral message delivery is not guaranteed — the user must be currently active in Slack and a member of the specified channel. By nature, ephemeral messages do not persist across reloads, desktop and mobile apps, or sessions. Once the session is closed, ephemeral messages will disappear and cannot be recovered.
Based on: https://api.slack.com/methods/chat.postEphemeral
Required Slack app scopes:
- https://api.slack.com/scopes/chat:write
- https://api.slack.com/scopes/chat:write.public (for posting in public channels even when our Slack app isn't a member)
func (API) PostMessage ¶
func (a API) PostMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
PostMessage sends a message to a user/group/channel. For text formatting tips, see https://api.slack.com/reference/surfaces/formatting. This message may also contain a rich layout and/or interactive blocks: https://api.slack.com/messaging/composing/layouts.
It returns the channel ID, the message's timestamp (for subsequent updates or in-thread replies), and a copy of the rendered message.
Based on: https://api.slack.com/methods/chat.postMessage
Required Slack app scopes:
- https://api.slack.com/scopes/chat:write
- https://api.slack.com/scopes/chat:write.public (for posting in public channels even when our Slack app isn't a member)
func (API) SendApprovalMessage ¶
func (a API) SendApprovalMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
SendApprovalMessage sends an interactive message to a user/group/channel, with a short header, a longer message, and 2 buttons. For message formatting tips, see https://api.slack.com/reference/surfaces/formatting.
It returns the channel ID, the message's timestamp (for subsequent updates or in-thread replies), and a copy of the rendered message. The user's button choice will be relayed as an asynchronous interaction event.
This is a convenience wrapper over [PostMessage].
func (API) SendTextMessage ¶
func (a API) SendTextMessage(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
SendTextMessage sends a message to a user/group/channel. For text formatting tips, see https://api.slack.com/reference/surfaces/formatting.
It returns the channel ID, the message's timestamp (for subsequent updates or in-thread replies), and a copy of the rendered message.
This is a convenience wrapper over [PostMessage].
func (API) Update ¶
func (a API) Update(ctx context.Context, args []sdktypes.Value, kwargs map[string]sdktypes.Value) (sdktypes.Value, error)
Update an existing message sent by the caller. For text formatting tips, see https://api.slack.com/reference/surfaces/formatting. This message may also contain a rich layout and/or interactive blocks: https://api.slack.com/messaging/composing/layouts.
It returns the channel ID, the message's timestamp (for subsequent updates or in-thread replies), and a copy of the rendered message.
Based on: https://api.slack.com/methods/chat.update
Required Slack app scopes:
- https://api.slack.com/scopes/chat:write
- https://api.slack.com/scopes/chat:write.public (for posting in public channels even when our Slack app isn't a member)
type BotProfile ¶
type DeleteRequest ¶
type DeleteRequest struct { // Channel containing the message to be deleted. Required. // https://api.slack.com/methods/chat.postMessage#channels Channel string `json:"channel"` // TS is a timestamp of the message to be deleted. Required. TS string `json:"ts"` }
type DeleteResponse ¶
type DeleteResponse struct { api.SlackResponse Channel string `json:"channel,omitempty"` TS string `json:"ts,omitempty"` }
type GetPermalinkResponse ¶ added in v0.5.7
type GetPermalinkResponse struct { api.SlackResponse Permalink string `json:"permalink,omitempty"` Channel string `json:"channel,omitempty"` }
type Message ¶
type Message struct { Type string `json:"type,omitempty"` Subtype string `json:"subtype,omitempty"` // https://api.slack.com/events/message#hidden_subtypes Hidden bool `json:"hidden,omitempty"` Text string `json:"text,omitempty"` Blocks []map[string]any `json:"blocks,omitempty"` Edited *Edited `json:"edited,omitempty"` User string `json:"user,omitempty"` AppID string `json:"app_id,omitempty"` BotID string `json:"bot_id,omitempty"` BotProfile *BotProfile `json:"bot_profile,omitempty"` ParentUserID string `json:"parent_user_id,omitempty"` Team string `json:"team,omitempty"` Channel string `json:"channel,omitempty"` ChannelType string `json:"channel_type,omitempty"` TS string `json:"ts,omitempty"` EventTS string `json:"event_ts,omitempty"` Permalink string `json:"permalink,omitempty"` // https://api.slack.com/types/conversation // https://api.slack.com/methods/conversations.replies#examples ReplyCount int `json:"reply_count,omitempty"` ReplyUsersCount int `json:"reply_users_count,omitempty"` LatestReply string `json:"latest_reply,omitempty"` ReplyUsers []string `json:"reply_users,omitempty"` LastRead string `json:"last_read,omitempty"` UnreadCount int `json:"unread_count,omitempty"` // A count of messages that the calling user has yet to read that // matter to them (excludes things like join/leave messages). UnreadCountDisplay int `json:"unread_count_display,omitempty"` IsLocked bool `json:"is_locked,omitempty"` Subscribed bool `json:"subscribed,omitempty"` // https://api.slack.com/events/message#stars IsStarred bool `json:"is_starred,omitempty"` PinnedTo []string `json:"pinned_to,omitempty"` Reactions []Reaction `json:"reactions,omitempty"` // https://api.slack.com/events/message/channel_join Inviter string `json:"inviter,omitempty"` // https://api.slack.com/events/message/channel_name Name string `json:"name,omitempty"` OldName string `json:"old_name,omitempty"` // https://api.slack.com/events/message/channel_purpose Purpose string `json:"purpose,omitempty"` // https://api.slack.com/events/message/channel_topic Topic string `json:"topic,omitempty"` // https://api.slack.com/events/message/message_changed Message *Message `json:"message,omitempty"` PreviousMessage *Message `json:"previous_message,omitempty"` // https://api.slack.com/events/message/message_deleted DeletedTS string `json:"deleted_ts,omitempty"` // https://api.slack.com/events/message/message_replied ThreadTS string `json:"thread_ts,omitempty"` // https://api.slack.com/events/message/thread_broadcast Root *Message `json:"root,omitempty"` ClientMsgID string `json:"client_msg_id,omitempty"` }
https://api.slack.com/types/conversation https://api.slack.com/methods/conversations.history#examples https://api.slack.com/methods/conversations.replies#examples https://github.com/slackapi/slack-api-specs/blob/master/web-api ("objs_message") https://api.slack.com/events/message
type PostEphemeralRequest ¶
type PostEphemeralRequest struct { // https://api.slack.com/methods/chat.postEphemeral#target-channels-and-users Channel string `json:"channel"` // User ID of the user who will receive the ephemeral message. The user // should be in the channel specified by the channel argument. Required. User string `json:"user"` // https://api.slack.com/reference/surfaces/formatting // https://api.slack.com/methods/chat.postEphemeral#markdown Text string `json:"text,omitempty"` // https://api.slack.com/reference/block-kit // https://api.slack.com/messaging/composing/layouts // https://api.slack.com/messaging/interactivity // https://app.slack.com/block-kit-builder/ Blocks []map[string]any `json:"blocks,omitempty"` // ThreadTS provides another message's [TS] value to make this message // a reply. Avoid using a reply's [TS] value; use its parent instead. // See https://api.slack.com/methods/chat.postMessage#threads. ThreadTS string `json:"thread_ts,omitempty"` }
type PostEphemeralResponse ¶
type PostEphemeralResponse struct { api.SlackResponse Channel string `json:"channel,omitempty"` MessageTS string `json:"message_ts,omitempty"` }
type PostMessageRequest ¶
type PostMessageRequest struct { // See https://api.slack.com/methods/chat.postMessage#channels. // Slack user ID ("U"), user DM ID ("D"), multi-person/group DM ID ("G"), // channel ID ("C"), channel name (with or without the "#" prefix). Note // that all targets except "U", "D" and public channels require our Slack // app to be added in advance. Required. Channel string `json:"channel"` // https://api.slack.com/reference/surfaces/formatting // https://api.slack.com/methods/chat.postMessage#blocks_and_attachments Text string `json:"text,omitempty"` // https://api.slack.com/reference/block-kit // https://api.slack.com/messaging/composing/layouts // https://api.slack.com/messaging/interactivity // https://app.slack.com/block-kit-builder/ Blocks []map[string]any `json:"blocks,omitempty"` // ThreadTS provides another message's [TS] value to make this message // a reply. Avoid using a reply's [TS] value; use its parent instead. // See https://api.slack.com/methods/chat.postMessage#threads. ThreadTS string `json:"thread_ts,omitempty"` // ReplyBroadcast is used in conjunction with [ThreadTS] and indicates // whether the reply should be made visible to everyone in the channel // or conversation. Default = false. ReplyBroadcast bool `json:"reply_broadcast,omitempty"` // Name to display alongside the message, instead of the bot's name. Username string `json:"username,omitempty"` // URL to an image to use as the user's icon for this message, instead of the bot's. IconURL string `json:"icon_url,omitempty"` }
type PostMessageResponse ¶
type PostMessageResponse struct { api.SlackResponse Channel string `json:"channel,omitempty"` TS string `json:"ts,omitempty"` Message *Message `json:"message,omitempty"` }
type Reaction ¶
type SendApprovalMessageRequest ¶
type SendApprovalMessageRequest struct { // Slack user ID ("U"), user DM ID ("D"), multi-person/group DM ID ("G"), // channel ID ("C"), channel name (with or without the "#" prefix). All // targets except "U", "D" and public channels require our Slack app to // be added in advance. Target string `json:"target"` // Header text: up to 150 characters, no markdown, but may include emoji. Header string `json:"header,omitempty"` // Message text: up to 3000 characters, may include markdown and emoji. // See https://api.slack.com/reference/surfaces/formatting. Message string `json:"message,omitempty"` // Green button text (e.g. "Yes", "Approve", "Proceed"). No markdown, may // include emoji. May truncate with ~30 characters, maximum length is 75 // characters. Default = "Approve". GreenButton string `json:"green_button,omitempty"` // Red button text (e.g. "No", "Deny", "Reject", "Abort"). No markdown, may // include emoji. May truncate with ~30 characters, maximum length is 75 // characters. Default = "Deny". RedButton string `json:"red_button,omitempty"` // ThreadTS provides another message's [TS] value to make this message // a reply. Avoid using a reply's [TS] value; use its parent instead. // See https://api.slack.com/methods/chat.postMessage#threads. ThreadTS string `json:"thread_ts,omitempty"` // ReplyBroadcast is used in conjunction with [ThreadTS] and indicates // whether the reply should be made visible to everyone in the channel // or conversation. Defaults to false. ReplyBroadcast bool `json:"reply_broadcast,omitempty"` }
type Text ¶
type Text struct { // Type must be "mrkdwn" or "plain_text". Type string `json:"type,omitempty"` // Text from a minimum of 1 to a maximum of 3000 characters. // See https://api.slack.com/reference/surfaces/formatting. Text string `json:"text,omitempty"` // This field is only usable when [Type] is "plain_text". Emoji bool `json:"emoji,omitempty"` // When set to false (as is default) URLs will be auto-converted into // links, conversation names will be link-ified, and certain mentions will // be automatically parsed. Using a value of true will skip any preprocessing // of this nature, although you can still include manual parsing strings. // This field is only usable when Type is "mrkdwn". See // https://api.slack.com/reference/surfaces/formatting. Verbatim bool `json:"verbatim,omitempty"` }
https://api.slack.com/reference/block-kit/composition-objects#text
type UpdateRequest ¶
type UpdateRequest struct { // See https://api.slack.com/methods/chat.postMessage#channels. // Slack user ID ("U"), user DM ID ("D"), multi-person/group DM ID ("G"), // channel ID ("C"), channel name (with or without the "#" prefix). Note // that all targets except "U", "D" and public channels require our Slack // app to be added in advance. Required Channel string `json:"channel"` // Timestamp of the message to be updated. Required. TS string `json:"ts"` // https://api.slack.com/reference/surfaces/formatting // https://api.slack.com/methods/chat.postMessage#blocks_and_attachments Text string `json:"text,omitempty"` // https://api.slack.com/reference/block-kit // https://api.slack.com/messaging/composing/layouts // https://api.slack.com/messaging/interactivity // https://app.slack.com/block-kit-builder/ Blocks []map[string]any `json:"blocks,omitempty"` // ReplyBroadcast is used in conjunction with [TS] and indicates whether // the reply should be made visible to everyone in the channel or // conversation. Defaults to false. ReplyBroadcast bool `json:"reply_broadcast,omitempty"` }