Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stoiveyp/slack.netstandard
.NET Core package that helps with Slack interactions
https://github.com/stoiveyp/slack.netstandard
dotnet hacktoberfest slack
Last synced: 6 days ago
JSON representation
.NET Core package that helps with Slack interactions
- Host: GitHub
- URL: https://github.com/stoiveyp/slack.netstandard
- Owner: stoiveyp
- License: mit
- Created: 2019-03-07T08:42:39.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2025-02-05T08:15:51.000Z (8 days ago)
- Last Synced: 2025-02-05T08:36:49.215Z (8 days ago)
- Topics: dotnet, hacktoberfest, slack
- Language: C#
- Homepage:
- Size: 604 KB
- Stars: 42
- Watchers: 3
- Forks: 18
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Slack.NetStandard
[![Latest NuGet version](https://img.shields.io/nuget/v/Slack.NetStandard.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/Slack.NetStandard).NET Core NuGet package that helps with Slack interactions
Available at https://www.nuget.org/packages/Slack.NetStandard## Create OAuth URL
```csharp
using Slack.NetStandard.Auth;var builder = new OAuthV2Builder("clientId")
{
State = "stateGoesHere",
BotScope = "channels:read"
};
var redirectUri = builder.BuildUri();
```## Get OAuth Access Token from Code
```csharp
using Slack.NetStandard.Auth;var token = await OAuthV2Builder.Exchange(code,clientId,clientSecret);
```## Verify Incoming Request is from Slack
```csharp
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
```csharp
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
```csharp
var view = new View
{
Type = "modal",
Title = "Create New Story",
Close = "Cancel",
Submit = "Submit",
Blocks = new List
{
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
```csharp
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
```csharp
using Slack.NetStandard.EventsApi;
using Slack.NetStandard.EventsApi.CallbackEvents;var eventObject = JsonConvert.DeserializeObject(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.)
```csharp
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
```csharp
if(msg.Contains("envelope_id")) //If there's no envelope ID it's a Hello or Disconnect object
{
var env = JsonConvert.DeserializeObject(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](https://www.nuget.org/packages/Slack.NetStandard.AsyncEnumerable)