Slack.NetStandard 3.3.0

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

// Install Slack.NetStandard as a Cake Tool
#tool nuget:?package=Slack.NetStandard&version=3.3.0
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 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

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
3.5.0-beta1 494 11/25/2021
3.4.0 580 11/25/2021
3.4.0-beta1 694 10/10/2021
3.3.0 5,007 10/6/2021
3.2.0 1,471 9/3/2021
3.2.0-beta1 88 8/17/2021
3.1.0 637 8/17/2021
3.0.0 2,313 7/19/2021
2.17.0-beta4 161 6/8/2021
2.17.0-beta3 195 5/30/2021
2.17.0-beta2 153 5/22/2021
2.17.0-beta1 87 5/8/2021
2.16.3 13,207 6/8/2021
2.16.2 433 5/30/2021
2.16.1 164 5/22/2021
2.16.0 476 5/8/2021
2.16.0-beta3 102 5/2/2021
2.16.0-beta2 78 4/28/2021
2.16.0-beta1 167 4/7/2021
2.15.2 158 5/2/2021
2.15.1 823 4/28/2021
2.15.0 395 4/7/2021
2.15.0-beta5 72 4/7/2021
2.15.0-beta3 2,210 3/21/2021
2.15.0-beta2 172 3/18/2021
2.15.0-beta1 84 3/17/2021
2.14.4 98 4/7/2021
2.14.2 1,524 3/21/2021
2.14.1 114 3/18/2021
2.14.0 134 3/17/2021
2.14.0-beta3 78 3/4/2021
2.14.0-beta2 72 3/2/2021
2.14.0-beta1 90 3/2/2021
2.13.2 264 3/4/2021
2.13.1 5,539 3/2/2021
2.13.0 346 3/2/2021
2.13.0-beta1 98 2/24/2021
2.12.0 229 2/24/2021
2.12.0-beta1 78 2/22/2021
2.11.0 1,441 2/22/2021
2.10.1 145 2/11/2021
2.10.0 772 1/28/2021
2.10.0-beta2 87 1/16/2021
2.10.0-beta1 82 1/15/2021
2.9.2 111 1/27/2021
2.9.1 146 1/16/2021
2.9.0 157 1/15/2021
2.9.0-beta8 124 1/11/2021
2.9.0-beta7 150 12/10/2020
2.9.0-beta6 131 11/30/2020
2.9.0-beta5 151 11/28/2020
2.9.0-beta4 163 11/26/2020
2.9.0-beta3 175 10/20/2020
2.9.0-beta2 124 10/20/2020
2.9.0-beta 144 10/20/2020
2.8.7 1,781 1/11/2021
2.8.6 1,689 12/10/2020
2.8.5 1,541 11/30/2020
2.8.4 233 11/28/2020
2.8.3 196 11/26/2020
2.8.2 1,122 10/20/2020
2.8.1 145 10/20/2020
2.8.0 164 10/20/2020
2.8.0-beta 223 10/17/2020
2.7.0 245 10/17/2020
2.7.0-beta2 135 10/17/2020
2.7.0-beta 178 10/14/2020
2.6.1 155 10/17/2020
2.6.0 195 10/14/2020
2.6.0-beta 246 10/8/2020
2.5.1 311 10/8/2020
2.5.0 258 10/8/2020
2.4.0 214 10/5/2020
2.3.0 788 9/17/2020
2.2.1 12,799 9/1/2020
2.2.0 177 8/28/2020
2.1.0 7,669 6/16/2020
2.0.0 367 5/29/2020
1.7.1 197 5/28/2020
1.7.0 277 5/21/2020
1.6.0 198 5/21/2020
1.5.5 229 5/17/2020
1.5.4 185 5/14/2020
1.5.3 224 5/11/2020
1.5.2 246 5/6/2020
1.5.1 251 5/4/2020
1.5.0 198 5/4/2020
1.4.2 212 5/4/2020
1.4.1 212 5/4/2020
1.4.0 235 5/4/2020
1.3.2 230 5/4/2020
1.3.1 267 4/30/2020
1.3.0 199 4/29/2020
1.2.1 204 4/29/2020
1.2.0 199 4/29/2020
1.1.0 193 4/28/2020
1.0.2 196 4/28/2020
1.0.1 214 4/27/2020
1.0.0 281 4/21/2020
0.5.0 239 4/13/2020
0.4.1-alpha8 235 4/12/2020
0.4.1-alpha7 223 4/12/2020
0.4.1-alpha6 233 4/12/2020
0.4.1-alpha4 246 4/12/2020
0.4.1-alpha3 252 4/12/2020
0.4.1-alpha2 190 4/12/2020
0.4.1-alpha1 202 4/11/2020
0.4.0-pre 350 4/5/2020
0.3.2 283 1/3/2020
0.3.1 257 1/3/2020
0.3.0 295 1/2/2020
0.2.2 280 12/23/2019
0.2.1 238 12/23/2019
0.2.1-pre 250 12/19/2019
0.2.0 244 12/20/2019
0.2.0-pre 248 12/18/2019
0.1.1-pre 224 12/17/2019
0.1.0 244 12/19/2019
0.1.0-pre 236 12/17/2019

Team billing info call