Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 2.2.3.0 (2025-09-15)
* [#156](https://github.com/MercuryTechnologies/slack-web/pull/156)
Implement `message_deleted` event.

# 2.2.2.0 (2025-09-15)
* [#153](https://github.com/MercuryTechnologies/slack-web/pull/153)
Implement `channel_shared` and `channel_unshared` events.
Expand Down
27 changes: 25 additions & 2 deletions src/Web/Slack/Experimental/Events/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,20 @@ data MessageUpdateEvent = MessageUpdateEvent

$(deriveFromJSON snakeCaseOptions ''MessageUpdateEvent)

-- | A message was deleted from a channel or DM.
--
-- <https://docs.slack.dev/reference/events/message/message_deleted/>
--
-- @since 2.2.3.0
data MessageDeletedEvent = MessageDeletedEvent
{ channel :: ConversationId
, ts :: Text
, deletedTs :: Text
}
deriving stock (Show)

$(deriveFromJSON snakeCaseOptions ''MessageDeletedEvent)

-- | FIXME: this might be a Channel, but may also be missing some fields/have bonus
-- because Slack is cursed.
data CreatedChannel = CreatedChannel
Expand Down Expand Up @@ -286,6 +300,8 @@ $(deriveFromJSON snakeCaseOptions ''ChannelLeftEvent)
-- | A channel has been shared with an external workspace.
--
-- <https://docs.slack.dev/reference/events/channel_shared/>
--
-- @since 2.2.2.0
data ChannelSharedEvent = ChannelSharedEvent
{ connectedTeamId :: TeamId
, channel :: ConversationId
Expand All @@ -298,6 +314,8 @@ $(deriveFromJSON snakeCaseOptions ''ChannelSharedEvent)
-- | A channel has been unshared with an external workspace.
--
-- <https://docs.slack.dev/reference/events/channel_unshared/>
--
-- @since 2.2.2.0
data ChannelUnsharedEvent = ChannelUnsharedEvent
{ previouslyConnectedTeamId :: TeamId
, channel :: ConversationId
Expand Down Expand Up @@ -364,6 +382,8 @@ data Event
= EventMessage MessageEvent
| EventBotMessage BotMessageEvent
| EventMessageChanged
| -- | @since 2.2.3.0
EventMessageDeleted MessageDeletedEvent
| -- | Weird message event of subtype channel_join. Sent "sometimes", according
-- to a random Slack blog post from 2017:
-- <https://api.slack.com/changelog/2017-05-rethinking-channel-entrance-and-exit-events-and-messages>
Expand All @@ -372,8 +392,10 @@ data Event
EventChannelJoinMessage
| EventChannelCreated ChannelCreatedEvent
| EventChannelLeft ChannelLeftEvent
| EventChannelShared ChannelSharedEvent
| EventChannelUnshared ChannelUnsharedEvent
| -- | @since 2.2.2.0
EventChannelShared ChannelSharedEvent
| -- | @since 2.2.2.0
EventChannelUnshared ChannelUnsharedEvent
| -- | @since 2.1.0.0
EventAppHomeOpened AppHomeOpenedEvent
| EventUnknown Value
Expand All @@ -387,6 +409,7 @@ instance FromJSON Event where
("message", Nothing) -> EventMessage <$> parseJSON @MessageEvent (Object obj)
("message", Just "bot_message") -> EventBotMessage <$> parseJSON @BotMessageEvent (Object obj)
("message", Just "message_changed") -> pure EventMessageChanged
("message", Just "message_deleted") -> EventMessageDeleted <$> parseJSON @MessageDeletedEvent (Object obj)
("message", Just "channel_join") -> pure EventChannelJoinMessage
-- n.b. these are unified since it is *identical* to a Message event with
-- a bonus files field
Expand Down
1 change: 1 addition & 0 deletions tests/Web/Slack/Experimental/Events/TypesSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ spec = describe "Types for Slack events" do
(oneGoldenTestDecode @SlackWebhookEvent)
[ "messageExample"
, "messageChange"
, "message_deleted"
, "message_rich_text"
, "message_file_share"
, "message_file_share_slack_connect"
Expand Down
20 changes: 20 additions & 0 deletions tests/golden/SlackWebhookEvent/message_deleted.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
EventEventCallback
( EventCallback
{ eventId = EventId
{ unEventId = "Ev043QRVT9FE" }
, teamId = TeamId
{ unTeamId = "T043DB835ML" }
, eventTime = MkSystemTime
{ systemSeconds = 1663969383
, systemNanoseconds = 0
}
, event = EventMessageDeleted
( MessageDeletedEvent
{ channel = ConversationId
{ unConversationId = "C043YJGBY49" }
, ts = "1663969383.001500"
, deletedTs = "1663966382.046509"
}
)
}
)
37 changes: 37 additions & 0 deletions tests/golden/SlackWebhookEvent/message_deleted.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"token": "aaaa",
"team_id": "T043DB835ML",
"api_app_id": "A0442TUPHGR",
"event": {
"type": "message",
"subtype": "message_deleted",
"hidden": true,
"channel": "C043YJGBY49",
"previous_message": {
"client_msg_id": "de349a9f-62a4-4293-b64d-701a1f566e8a",
"type": "message",
"text": "This message will be deleted",
"user": "U043H11ES4V",
"ts": "1663966382.046509",
"team": "T043DB835ML"
},
"deleted_ts": "1663966382.046509",
"ts": "1663969383.001500",
"event_ts": "1663969383.001500",
"channel_type": "channel"
},
"type": "event_callback",
"event_id": "Ev043QRVT9FE",
"event_time": 1663969383,
"authorizations": [
{
"enterprise_id": null,
"team_id": "T043DB835ML",
"user_id": "U0442US8QGH",
"is_bot": true,
"is_enterprise_install": false
}
],
"is_ext_shared_channel": false,
"event_context": "aaaa"
}