Slack.NetStandard 2.9.1

.NET Core package that helps with Slack interactions

There is a newer version of this package available.
See the version list below for details.
Install-Package Slack.NetStandard -Version 2.9.1
dotnet add package Slack.NetStandard --version 2.9.1
<PackageReference Include="Slack.NetStandard" Version="2.9.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Slack.NetStandard --version 2.9.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Slack.NetStandard, 2.9.1"
For F# scripts that support #r syntax, copy this into the source code to reference the package.

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 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
}

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 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
}

Release Notes

Support for Socket Mode - hello, disconnect, Envelopes and Acknowlegements

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 History

Version Downloads Last updated
2.14.0-beta3 17 3/4/2021
2.14.0-beta2 24 3/2/2021
2.14.0-beta1 28 3/2/2021
2.13.2 24 3/4/2021
2.13.1 31 3/2/2021
2.13.0 20 3/2/2021
2.13.0-beta1 48 2/24/2021
2.12.0 107 2/24/2021
2.12.0-beta1 23 2/22/2021
2.11.0 40 2/22/2021
2.10.1 85 2/11/2021
2.10.0 154 1/28/2021
2.10.0-beta2 29 1/16/2021
2.10.0-beta1 28 1/15/2021
2.9.2 43 1/27/2021
2.9.1 52 1/16/2021
2.9.0 49 1/15/2021
2.9.0-beta8 62 1/11/2021
2.9.0-beta7 74 12/10/2020
2.9.0-beta6 67 11/30/2020
2.9.0-beta5 80 11/28/2020
2.9.0-beta4 89 11/26/2020
2.9.0-beta3 109 10/20/2020
2.9.0-beta2 58 10/20/2020
2.9.0-beta 78 10/20/2020
2.8.7 362 1/11/2021
2.8.6 313 12/10/2020
2.8.5 254 11/30/2020
2.8.4 174 11/28/2020
2.8.3 124 11/26/2020
2.8.2 581 10/20/2020
2.8.1 63 10/20/2020
2.8.0 75 10/20/2020
2.8.0-beta 154 10/17/2020
2.7.0 160 10/17/2020
2.7.0-beta2 65 10/17/2020
2.7.0-beta 112 10/14/2020
2.6.1 66 10/17/2020
2.6.0 117 10/14/2020
2.6.0-beta 180 10/8/2020
2.5.1 202 10/8/2020
2.5.0 182 10/8/2020
2.4.0 125 10/5/2020
2.3.0 385 9/17/2020
2.2.1 12,064 9/1/2020
2.2.0 95 8/28/2020
2.1.0 6,410 6/16/2020
2.0.0 276 5/29/2020
1.7.1 122 5/28/2020
1.7.0 194 5/21/2020
1.6.0 121 5/21/2020
1.5.5 151 5/17/2020
1.5.4 112 5/14/2020
1.5.3 145 5/11/2020
1.5.2 177 5/6/2020
1.5.1 175 5/4/2020
1.5.0 133 5/4/2020
1.4.2 131 5/4/2020
1.4.1 136 5/4/2020
1.4.0 156 5/4/2020
1.3.2 153 5/4/2020
1.3.1 185 4/30/2020
1.3.0 124 4/29/2020
1.2.1 124 4/29/2020
1.2.0 128 4/29/2020
1.1.0 121 4/28/2020
1.0.2 119 4/28/2020
1.0.1 136 4/27/2020
1.0.0 195 4/21/2020
0.5.0 160 4/13/2020
0.4.1-alpha8 167 4/12/2020
0.4.1-alpha7 166 4/12/2020
0.4.1-alpha6 168 4/12/2020
0.4.1-alpha4 183 4/12/2020
0.4.1-alpha3 188 4/12/2020
0.4.1-alpha2 133 4/12/2020
0.4.1-alpha1 140 4/11/2020
0.4.0-pre 292 4/5/2020
0.3.2 202 1/3/2020
0.3.1 177 1/3/2020
0.3.0 215 1/2/2020
0.2.2 205 12/23/2019
0.2.1 163 12/23/2019
0.2.1-pre 182 12/19/2019
0.2.0 168 12/20/2019
0.2.0-pre 185 12/18/2019
0.1.1-pre 155 12/17/2019
0.1.0 165 12/19/2019
0.1.0-pre 165 12/17/2019
Show less