Skip to content

Releases: soxtoby/SlackNet

v0.12.1

02 Jan 01:02
Compare
Choose a tag to compare
  • Added experimental option in UseSlackNet to delay responses until after handlers have completed.

v0.12.0

20 Dec 09:46
Compare
Choose a tag to compare
  • ChatApi.PostEphemeral correctly returns PostEphemeralResponse instead of PostMessageResponse.
  • Introduced SlackNet.AzureFunctions package to properly support running in Azure Functions.

Azure Functions

Hosting a SlackNet application in Azure Functions is now properly supported with the new SlackNet.AzureFunctions package. Configuration is similar to previous Azure Functions integration with SlackNet.AspNetCore, but the APIs have been simplified, and the isolated worker model is now supported. Additionally, some issues around the function shutting down before a request has finished being handled have been resolved, albeit at the cost of dropping support for early responses (responses will be sent after you've finished handling the request, no matter how early you respond). See the readme and AzureFunctionsExample project for more information.

Breaking changes

SlackNet.AspNetCore

  • VerifyWith, UseSigningSecret, and UseEventUrlVerification, called inside UseSlackNet, have been marked as obsolete, and will be removed in a future release. These calls should now be made in AddSlackNet instead.
  • The callback in AddSlackNet now takes in an AspNetSlackServiceConfiguration instead of a ServiceCollectionSlackServiceConfiguration. The API is otherwise compatible.
  • Microsoft.AspNetCore.Http and Microsoft.AspNetCore.Http.Abstractions dependencies have been bumped to versions 2.1.22 and 2.1.1 respectively.
  • The methods on ISlackRequestHandler no longer take in a SlackEndpointConfiguration. The configuration is now injected into the implementation.
  • SlackResult no longer implements IActionResult.

Azure Functions

If you're currently using SlackNet.AspNetCore with Azure Functions, you'll need to switch to SlackNet.AzureFunctions, and make the following changes:

  • Make sure you're configuring SlackNet with the AddSlackNet extension from SlackNet.AzureFunctions.
  • Move your SlackEndpointConfiguration configuration into AddSlackNet, and remove its service collection registration.
  • Replace the ISlackRequestHandler and SlackEndpointConfiguration from your endpoints class with just ISlackFunctionRequestHandler, and update its usage to remove the second argument from each method call.
  • Change the return types of your function from Task<SlackResult> to Task<SlackFunctionResult>.

See the AzureFunctionsExample project for an example.

Thankyou to @matthawley for his help with this release 💪

v0.11.5

13 Nov 08:33
1ceb8ff
Compare
Choose a tag to compare
  • Fix for invalid parameter error when using an ExternalMultiSelectMenu.

Thankyou to @rzezak for this release 🐞🔨

v0.11.4

27 Oct 22:52
Compare
Choose a tag to compare
  • Added View property to BlockOptionsRequest.
  • Added includeAllMetadata parameter to IConversationsApi.History.

Potentially breaking change

  • If you were passing a cursor and/or CancellationToken to IConversationsApi.History as positional arguments, you'll need to either add false as the includeAllMetadata argument, or specify the cursor/cancellationToken parameter names.

Thankyou to @nimoskov for his help with this release ✨

v0.11.3

07 Oct 02:18
Compare
Choose a tag to compare
  • Added optional teamId parameter to IConversationsApi.Create.
  • Added support for message metadata.
  • Added MessageMetadataPosted, MessageMetadataUpdated, and MessageMetadataDeleted events.
  • Added BotId, AppId, and BotProfile properties to MessageEvent.
  • Added TeamId, Deleted, and Updated properties to BotInfo.
  • Added RichTextInput and fixed posting messages with RichTextBlocks.

Metadata

When posting a message to Slack, you can specify the metadata in one of two ways:

await slack.Chat.PostMessage(new Message
    {
        Channel = "#general",
        Text = "My message",

        // Use your own metadata object. It will be serialized with the standard Slack conventions,
        // and the event_type will be the name of the class in snake case.
        MetadataObject = new MyMetadata("my info"),

        // Specify the metadata JSON explicitly. This will take precedence over MetadataObject.
        MetadataJson = new MessageMetadata
            {
                EventType = "my_metadata",
                EventPayload = JToken.Parse("""{ "custom_info": "my info" }""") // Get your JToken from wherever you like  
            }
    });

Messages retrieved from Slack will have a Metadata property that contains the event type and JSON as a JToken. To deserialize the JSON using the standard Slack JSON conventions, use the ToObject method on MessageMetadata, not the ToObject method on JToken:

var myMetadata = message.Metadata.ToObject<MyMetadata>();

Potentially breaking changes

  • If you were passing a CancellationToken to IConversationsApi.Create as a positional argument, you'll need to either add null as the teamId argument, or specify the cancellationToken parameter name.
  • Added a SlackJsonSettings parameter to the ChatApi constructor. If you're constructing ChatApi manually, you can pass in Default.JsonSettings(), or your own customized settings.
  • Pushed the InitialValue property of TextInput down to its sub-classes, to account for RichTextInput's different type of value.

Thankyou to @jtsai-osa for his help with this release 👍

v0.11.2

18 Aug 15:26
Compare
Choose a tag to compare
  • Renamed SnoozeEndTime on SnoozeResponse and OwnDndResponse so it deserializes properly.
  • Added SnoozeIsIndefinite to SnoozeResponse and OwnDndResponse.

v0.11.1

10 Aug 19:29
Compare
Choose a tag to compare
  • Added missing IsExtSharedChannel property to EventCallback.
  • Incoming requests are logged when using SlackNet.AspNetCore.
  • Default ASP.NET logger logs with the specific SlackNet category (e.g. SlackNet.Error instead of just SlackNet).

When using the default logger with ASP.NET, individual SlackNet log categories can be enabled in appsettings.json with:

"Logging": {
  "LogLevel": {
    "SlackNet.Data": "Trace",
    "SlackNet.Serialization": "Trace",
    "SlackNet.Internal": "Debug",
    "SlackNet.Request": "Information",
    "SlackNet.Error": "Error"
  }
}

Setting a category to a higher level will filter out logs from that category.

v0.11.0

23 Jul 00:10
Compare
Choose a tag to compare
  • Added the UserHuddleChanged, UserProfileChanged, and UserStatusChanged events.
  • Added logging for serialization. Useful for debugging serialization issues, but otherwise I'd recommend filtering out LogEvents in the Serialization category.
  • Added Attachments property to MessageSearchResult.
  • Added Unsafe property to RichTextLink.
  • Added ThumbWidth, ThumbHeight, OriginalUrl, ServiceName, and ServiceIcon properties to Attachment.

Breaking Changes

  • Removed the stars API and associated classes. See this Slack announcement for more details.

Thankyou to @fstojanac for his help with this release 💪

v0.10.24

02 Jul 00:13
a88e3b7
Compare
Choose a tag to compare
  • Added cursor-based pagination to TeamApi.AccessLogs and FilesApi.List.
  • ChatApi.PostEphemeral can post to threads.

Thankyou to @arkolka for their help with this release 🎉

v0.10.23

28 May 00:44
Compare
Choose a tag to compare
  • Added FileIds to MessageUpdate to allow removing and re-adding files when updating a message.
  • SlackApiClient.WithAccessToken() maintains the value of DisableRetryOnRateLimit.