diff --git a/CHANGELOG.md b/CHANGELOG.md index 339be5c..00db369 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ +# 2.2.2.0 (2025-09-15) +* [#153](https://github.com/MercuryTechnologies/slack-web/pull/153) + Implement `channel_shared` and `channel_unshared` events. + # 2.2.1.0 (2025-09-15) -* [#151](https://github.com/MercuryTechnologies/slack-web/151) +* [#151](https://github.com/MercuryTechnologies/slack-web/pull/151) Implement `conversations.member` API method. # 2.2.0.0 (2025-03-21) diff --git a/slack-web.cabal b/slack-web.cabal index cad602e..e32e344 100644 --- a/slack-web.cabal +++ b/slack-web.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: slack-web -version: 2.2.1.0 +version: 2.2.2.0 build-type: Simple diff --git a/src/Web/Slack/Experimental/Events/Types.hs b/src/Web/Slack/Experimental/Events/Types.hs index 4be88de..47794f8 100644 --- a/src/Web/Slack/Experimental/Events/Types.hs +++ b/src/Web/Slack/Experimental/Events/Types.hs @@ -283,6 +283,31 @@ data ChannelLeftEvent = ChannelLeftEvent $(deriveFromJSON snakeCaseOptions ''ChannelLeftEvent) +-- | A channel has been shared with an external workspace. +-- +-- +data ChannelSharedEvent = ChannelSharedEvent + { connectedTeamId :: TeamId + , channel :: ConversationId + , eventTs :: Text + } + deriving stock (Show) + +$(deriveFromJSON snakeCaseOptions ''ChannelSharedEvent) + +-- | A channel has been unshared with an external workspace. +-- +-- +data ChannelUnsharedEvent = ChannelUnsharedEvent + { previouslyConnectedTeamId :: TeamId + , channel :: ConversationId + , isExtShared :: Bool + , eventTs :: Text + } + deriving stock (Show) + +$(deriveFromJSON snakeCaseOptions ''ChannelUnsharedEvent) + -- | data UrlVerificationPayload = UrlVerificationPayload { challenge :: Text @@ -347,6 +372,8 @@ data Event EventChannelJoinMessage | EventChannelCreated ChannelCreatedEvent | EventChannelLeft ChannelLeftEvent + | EventChannelShared ChannelSharedEvent + | EventChannelUnshared ChannelUnsharedEvent | -- | @since 2.1.0.0 EventAppHomeOpened AppHomeOpenedEvent | EventUnknown Value @@ -366,6 +393,8 @@ instance FromJSON Event where ("message", Just "file_share") -> EventMessage <$> parseJSON @MessageEvent (Object obj) ("channel_created", Nothing) -> EventChannelCreated <$> parseJSON (Object obj) ("channel_left", Nothing) -> EventChannelLeft <$> parseJSON (Object obj) + ("channel_shared", Nothing) -> EventChannelShared <$> parseJSON (Object obj) + ("channel_unshared", Nothing) -> EventChannelUnshared <$> parseJSON (Object obj) ("app_home_opened", Nothing) -> EventAppHomeOpened <$> parseJSON (Object obj) _ -> pure $ EventUnknown (Object obj) diff --git a/tests/Web/Slack/Experimental/Events/TypesSpec.hs b/tests/Web/Slack/Experimental/Events/TypesSpec.hs index 45956ce..37e5dc1 100644 --- a/tests/Web/Slack/Experimental/Events/TypesSpec.hs +++ b/tests/Web/Slack/Experimental/Events/TypesSpec.hs @@ -22,6 +22,8 @@ spec = describe "Types for Slack events" do , "messageIm" , "slackbotIm" , "channel_left" + , "channel_shared" + , "channel_unshared" , "share_without_message" , "share_with_message" , "circleci" diff --git a/tests/golden/SlackWebhookEvent/channel_shared.golden b/tests/golden/SlackWebhookEvent/channel_shared.golden new file mode 100644 index 0000000..9cc04f0 --- /dev/null +++ b/tests/golden/SlackWebhookEvent/channel_shared.golden @@ -0,0 +1,21 @@ +EventEventCallback + ( EventCallback + { eventId = EventId + { unEventId = "Ev044RKJHB8W" } + , teamId = TeamId + { unTeamId = "T043DB835ML" } + , eventTime = MkSystemTime + { systemSeconds = 1664827321 + , systemNanoseconds = 0 + } + , event = EventChannelShared + ( ChannelSharedEvent + { connectedTeamId = TeamId + { unTeamId = "E163Q94DX" } + , channel = ConversationId + { unConversationId = "C123ABC456" } + , eventTs = "1561064063.001100" + } + ) + } + ) diff --git a/tests/golden/SlackWebhookEvent/channel_shared.json b/tests/golden/SlackWebhookEvent/channel_shared.json new file mode 100644 index 0000000..488b109 --- /dev/null +++ b/tests/golden/SlackWebhookEvent/channel_shared.json @@ -0,0 +1,24 @@ +{ + "token": "aaaa", + "team_id": "T043DB835ML", + "api_app_id": "A0442TUPHGR", + "event": { + "type": "channel_shared", + "connected_team_id": "E163Q94DX", + "channel": "C123ABC456", + "event_ts": "1561064063.001100" + }, + "type": "event_callback", + "event_id": "Ev044RKJHB8W", + "event_time": 1664827321, + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T043DB835ML", + "user_id": "U0442US8QGH", + "is_bot": false, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": true +} diff --git a/tests/golden/SlackWebhookEvent/channel_unshared.golden b/tests/golden/SlackWebhookEvent/channel_unshared.golden new file mode 100644 index 0000000..78ac14c --- /dev/null +++ b/tests/golden/SlackWebhookEvent/channel_unshared.golden @@ -0,0 +1,22 @@ +EventEventCallback + ( EventCallback + { eventId = EventId + { unEventId = "Ev044RKJHB8W" } + , teamId = TeamId + { unTeamId = "T043DB835ML" } + , eventTime = MkSystemTime + { systemSeconds = 1664827321 + , systemNanoseconds = 0 + } + , event = EventChannelUnshared + ( ChannelUnsharedEvent + { previouslyConnectedTeamId = TeamId + { unTeamId = "E163Q94DX" } + , channel = ConversationId + { unConversationId = "C123ABC456" } + , isExtShared = False + , eventTs = "1561064063.001100" + } + ) + } + ) diff --git a/tests/golden/SlackWebhookEvent/channel_unshared.json b/tests/golden/SlackWebhookEvent/channel_unshared.json new file mode 100644 index 0000000..c43e570 --- /dev/null +++ b/tests/golden/SlackWebhookEvent/channel_unshared.json @@ -0,0 +1,25 @@ +{ + "token": "aaaa", + "team_id": "T043DB835ML", + "api_app_id": "A0442TUPHGR", + "event": { + "type": "channel_unshared", + "previously_connected_team_id": "E163Q94DX", + "channel": "C123ABC456", + "is_ext_shared": false, + "event_ts": "1561064063.001100" + }, + "type": "event_callback", + "event_id": "Ev044RKJHB8W", + "event_time": 1664827321, + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T043DB835ML", + "user_id": "U0442US8QGH", + "is_bot": false, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": false +}