Slack.NetStandard 5.1.2

.NET Standard 2.0
There is a newer prerelease version of this package available.
See the version list below for details.
Install-Package Slack.NetStandard -Version 5.1.2
dotnet add package Slack.NetStandard --version 5.1.2
<PackageReference Include="Slack.NetStandard" Version="5.1.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Slack.NetStandard --version 5.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Slack.NetStandard, 5.1.2"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Slack.NetStandard as a Cake Addin
#addin nuget:?package=Slack.NetStandard&version=5.1.2

// Install Slack.NetStandard as a Cake Tool
#tool nuget:?package=Slack.NetStandard&version=5.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Slack.NetStandard

.NET Core NuGet package that helps with Slack interactions Available at https://www.nuget.org/packages/Slack.NetStandard

Create OAuth URL

using Slack.NetStandard.Auth;

var builder = new OAuthV2Builder("clientId")
{
    State = "stateGoesHere", 
    BotScope = "channels:read"
};
var redirectUri = builder.BuildUri();

Get OAuth Access Token from Code

using Slack.NetStandard.Auth;

var token = await OAuthV2Builder.Exchange(code,clientId,clientSecret);

Verify Incoming Request is from Slack

using Slack.NetStandard;

var verifier = new RequestVerifier(signingSecret);
var verified = verifier.Verify(request.Headers[RequestVerifier.SignatureHeaderName], long.Parse(request.Headers[RequestVerifier.TimestampHeaderName]), request.Body);

Receive/Respond to a slash command payload

var command = new SlashCommand(payloadText);

var message = new InteractionMessage();
message.Blocks.Add(new Section{Text = new PlainText("Only title is required")});
message.Blocks.Add(new Divider());
message.Send(command.ResponseUrl);

await command.Respond(message);

// or - if it's not from a slash command, any response url can use
await command.Response(responseUrl);

Building & sending a modal

var view = new View
{
    Type = "modal",
    Title = "Create New Story",
    Close = "Cancel",
    Submit = "Submit",
    Blocks = new List<IMessageBlock>
    {
       new Section{Text = new PlainText("Only title is required")}
    }
};

var client = new SlackWebApiClient(accessToken);
var response = await client.View.Open(triggerId,view);

Sending a new message to a channel

var request = new PostMessageRequest {Channel = "C123456"};
request.Blocks.Add(new Section{Text = new PlainText("Hi There!")});

var client = new SlackWebApiClient("token");
await client.Chat.Post(request);

Parse Events API Body

using Slack.NetStandard.EventsApi;
using Slack.NetStandard.EventsApi.CallbackEvents;

var eventObject = JsonConvert.DeserializeObject<Event>(input.Body);

if (eventObject is EventCallback callback)
{
    switch(callback.Event)
    {
        case AppHomeOpened appHome:
            break;
        case GroupClose groupClose:
            break;

    }
}

Parse incoming text for entities (channels, users, links etc.)

var entities = TextParser.FindEntities("<@W123456|Steven>");
if(entities.First() is UserMention mention)
{
    var userId = mention.UserId //W123456
    var label = mention.Label //Steven
}

Socket Mode - getting to your payload

if(msg.Contains("envelope_id")) //If there's no envelope ID it's a Hello or Disconnect object
{
   var env = JsonConvert.DeserializeObject<Envelope>(msg);
   switch(env.Payload) {
     case SlashCommand command:
       //logic here
       break;
     case EventCallback evt: 
       //logic here
       break;
     case InteractionPayload payload:
       //logic here
       break;
   }
   var ack = new Acknowledge{EnvelopeId=env.EnvelopeId} //All messages must be acknowledged within a few seconds
   Send(ack);
}

For a .NET 3.1 client that helps with a lot of the Socket Mode plumbing, the SocketSample app is now available at Slack.NetStandard.AsyncEnumerable

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Slack.NetStandard:

Package Downloads
Slack.NetStandard.Endpoint

Small library used to build single Slack endpoints - allowing simpler wiring of Slack apps by examining the full request and deserializing appropriately

Slack.NetStandard.AsyncEnumerable

Additional support for Slack.NetStandard apps running Socket Mode

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.2.0-beta3 40 7/28/2022
5.2.0-beta2 49 7/14/2022
5.1.2 1,086 7/28/2022
5.1.1 493 7/14/2022
5.1.0-beta1 59 7/13/2022
5.0.0 83 7/13/2022
4.1.0-beta1 46 7/1/2022
4.0.0 1,273 7/1/2022
3.14.0-beta6 42 7/1/2022
3.14.0-beta5 48 6/10/2022
3.14.0-beta4 50 6/7/2022
3.14.0-beta3 51 6/3/2022
3.14.0-beta2 52 6/1/2022
3.14.0-beta1 50 6/1/2022
3.13.5 102 7/1/2022
3.13.4 1,097 6/10/2022
3.13.3 535 6/7/2022
3.13.2 212 6/3/2022
3.13.1 214 6/1/2022
3.13.0 85 6/1/2022
3.13.0-beta2 48 5/27/2022
3.13.0-beta1 53 5/13/2022
3.12.1 248 5/27/2022
3.12.0 1,386 5/13/2022
3.12.0-beta2 64 4/13/2022
3.12.0-beta1 46 4/5/2022
3.11.0 4,069 4/5/2022
3.11.0-beta1 56 2/23/2022
3.10.0 5,264 2/23/2022
3.10.0-beta2 51 2/17/2022
3.10.0-beta1 58 2/9/2022
3.9.1 437 2/17/2022
3.9.0 297 2/9/2022
3.9.0-beta1 67 2/1/2022
3.8.0 344 2/1/2022
3.8.0-beta3 79 1/15/2022
3.8.0-beta2 67 1/13/2022
3.8.0-beta1 61 1/12/2022
3.7.1 4,030 1/13/2022
3.7.0 108 1/12/2022
3.7.0-beta1 82 12/20/2021
3.6.0 344 12/20/2021
3.6.0-beta1 83 12/14/2021
3.5.0 485 12/14/2021
3.5.0-beta1 3,144 11/25/2021
3.4.0 4,005 11/25/2021
3.4.0-beta1 738 10/10/2021
3.3.0 73,363 10/6/2021
3.2.0 4,034 9/3/2021
3.2.0-beta1 144 8/17/2021
3.1.0 857 8/17/2021
3.0.0 2,606 7/19/2021
2.17.0-beta4 218 6/8/2021
2.17.0-beta3 251 5/30/2021
2.17.0-beta2 188 5/22/2021
2.17.0-beta1 121 5/8/2021
2.16.3 16,096 6/8/2021
2.16.2 536 5/30/2021
2.16.1 232 5/22/2021
2.16.0 554 5/8/2021
2.16.0-beta3 136 5/2/2021
2.16.0-beta2 116 4/28/2021
2.16.0-beta1 218 4/7/2021
2.15.2 229 5/2/2021
2.15.1 1,294 4/28/2021
2.15.0 2,424 4/7/2021
2.15.0-beta5 106 4/7/2021
2.15.0-beta3 3,174 3/21/2021
2.15.0-beta2 206 3/18/2021
2.15.0-beta1 120 3/17/2021
2.14.4 160 4/7/2021
2.14.2 1,817 3/21/2021
2.14.1 170 3/18/2021
2.14.0 198 3/17/2021
2.14.0-beta3 114 3/4/2021
2.14.0-beta2 108 3/2/2021
2.14.0-beta1 125 3/2/2021
2.13.2 329 3/4/2021
2.13.1 6,291 3/2/2021
2.13.0 690 3/2/2021
2.13.0-beta1 136 2/24/2021
2.12.0 338 2/24/2021
2.12.0-beta1 115 2/22/2021
2.11.0 2,965 2/22/2021
2.10.1 206 2/11/2021
2.10.0 1,152 1/28/2021
2.10.0-beta2 123 1/16/2021
2.10.0-beta1 115 1/15/2021
2.9.2 178 1/27/2021
2.9.1 218 1/16/2021
2.9.0 248 1/15/2021
2.9.0-beta8 163 1/11/2021
2.9.0-beta7 200 12/10/2020
2.9.0-beta6 205 11/30/2020
2.9.0-beta5 205 11/28/2020
2.9.0-beta4 201 11/26/2020
2.9.0-beta3 244 10/20/2020
2.9.0-beta2 189 10/20/2020
2.9.0-beta 226 10/20/2020
2.8.7 3,292 1/11/2021
2.8.6 1,976 12/10/2020
2.8.5 4,257 11/30/2020
2.8.4 313 11/28/2020
2.8.3 279 11/26/2020
2.8.2 1,314 10/20/2020
2.8.1 245 10/20/2020
2.8.0 280 10/20/2020
2.8.0-beta 264 10/17/2020
2.7.0 311 10/17/2020
2.7.0-beta2 174 10/17/2020
2.7.0-beta 220 10/14/2020
2.6.1 218 10/17/2020
2.6.0 271 10/14/2020
2.6.0-beta 289 10/8/2020
2.5.1 372 10/8/2020
2.5.0 340 10/8/2020
2.4.0 313 10/5/2020
2.3.0 994 9/17/2020
2.2.1 14,233 9/1/2020
2.2.0 251 8/28/2020
2.1.0 9,220 6/16/2020
2.0.0 432 5/29/2020
1.7.1 282 5/28/2020
1.7.0 361 5/21/2020
1.6.0 281 5/21/2020
1.5.5 314 5/17/2020
1.5.4 268 5/14/2020
1.5.3 301 5/11/2020
1.5.2 318 5/6/2020
1.5.1 322 5/4/2020
1.5.0 274 5/4/2020
1.4.2 281 5/4/2020
1.4.1 279 5/4/2020
1.4.0 307 5/4/2020
1.3.2 299 5/4/2020
1.3.1 375 4/30/2020
1.3.0 299 4/29/2020
1.2.1 301 4/29/2020
1.2.0 293 4/29/2020
1.1.0 274 4/28/2020
1.0.2 264 4/28/2020
1.0.1 276 4/27/2020
1.0.0 344 4/21/2020
0.5.0 314 4/13/2020
0.4.1-alpha8 276 4/12/2020
0.4.1-alpha7 266 4/12/2020
0.4.1-alpha6 273 4/12/2020
0.4.1-alpha4 283 4/12/2020
0.4.1-alpha3 293 4/12/2020
0.4.1-alpha2 227 4/12/2020
0.4.1-alpha1 243 4/11/2020
0.4.0-pre 383 4/5/2020
0.3.2 361 1/3/2020
0.3.1 337 1/3/2020
0.3.0 372 1/2/2020
0.2.2 357 12/23/2019
0.2.1 312 12/23/2019
0.2.1-pre 294 12/19/2019
0.2.0 318 12/20/2019
0.2.0-pre 290 12/18/2019
0.1.1-pre 277 12/17/2019
0.1.0 316 12/19/2019
0.1.0-pre 282 12/17/2019

correct PayloadAction property types