65.9K
CodeProject 正在变化。 阅读更多。
Home

写入 Slack 频道 - .NET Core 版

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2018年12月28日

CPOL

8分钟阅读

viewsIcon

19869

downloadIcon

260

写入 Slack 频道 - .NET Core 版

注意:本教程是 CodeProject Slack API 挑战赛的一部分。如果您还没有完成 入门文章并创建您的 Slack 应用,请立即进行,因为本教程是在第一篇的基础上进行的。

在本文中,我们将创建一个简单的 .NET Core 应用程序,该应用程序可以写入 Slack 频道。如果您尚未完成 本系列的第一篇教程(在该教程中您将了解 Slack 的 API 并创建您的第一个工作区和应用程序),请先完成它。

为了保持简单,我们将使用 Slack 的 Web API。因此,我们写入 Slack 频道所需做的就是发出 HTTP POST 请求。由于此功能已内置于 Node 的标准库中,因此创建我们的应用程序将快速简便。

入门

如果您还没有安装,则需要 .NET Core 2.0 或更高版本。您可以在 https://dotnet.microsoft.com/download 上找到 Windows、MacOS 和 Linux 的安装说明。我们将介绍如何使用终端或 Visual Studio 来创建您的应用程序,因此无论您的偏好如何,我们都会为您提供支持。

要开始,我们需要将我们的应用程序安装到我们的 Slack 工作区中,这将为我们提供一个访问令牌,我们可以使用它将消息发布到工作区中的频道。首先,通过导航到 Slack API 应用页面,然后在出现的列表中单击您的应用程序,来找到您的应用程序的管理页面。

当您的应用程序的管理页面加载时,单击左侧菜单中的“OAuth 和权限”。此页面加载后,向下滚动到“范围”。在您能够生成访问令牌之前,您需要至少添加一个范围。这是有道理的,因为没有授权的范围,您的应用程序将不允许执行任何操作,而一个授予您执行任何操作的能力的访问令牌将毫无用处!

单击下拉框以查看您可以添加的范围列表。您要查找的范围是“以 Super Amazing Test App 的身份发送消息”,尽管您会看到您为自己的应用程序起的任何超级惊人的名字,而不是 Super Amazing Test App。它应该看起来像这样

scopes

添加此范围后,您就可以将应用程序安装到您的工作区中。滚动回“OAuth & Permissions”页面的顶部,您将看到一个可点击的友好的绿色按钮

app install button

单击它,您将被带到一个屏幕,要求您授予应用程序对您工作区的访问权限。授权后,您的 OAuth & Permission 页面现在将包含一个访问令牌

access token

在这里,您将看到您自己的访问令牌,而不是一个黑框。将其保存在一个浏览器标签页中,因为您将在几分钟后需要此访问令牌。

现在我们有了所需的信息,可以继续编写使我们的应用程序正常工作的代码。

项目设置

这是有趣的部分!项目设置将根据您是在 Windows 上的 Visual Studio 中工作,还是在任何操作系统上的终端中工作而略有不同。在下一节中,请按照适用于您的说明进行操作,然后跳转到“所有人”部分。

请注意,命名可能有点令人困惑。在本文的其余部分中,当我们讨论“Visual Studio”时,我们将讨论 Windows 版的 Visual Studio。如果您使用过 Visual Studio Code,请记住它与 Visual Studio 是一个完全不同的应用程序。

Visual Studio

首先,打开 Visual Studio 2017 的新实例。打开“文件”菜单,然后选择“新建 -> 项目”。

当新项目窗口打开时,在左侧菜单中选择 .NET Core,然后选择控制台应用程序

VS2017 new project

我将我的应用程序命名为“Slack App”,但如果您创意十足,想要为您的应用程序想一个更酷的名字,请随时这样做。

单击“确定”,Visual Studio 将愉快地创建您的控制台应用程序。

我们还需要添加一个 NuGet 包。在项目树视图中,右键单击“依赖项”,然后选择“管理 NuGet 程序包”。将您的程序包源设置为 nuget.org,然后搜索 Newtonsoft.Json。安装此程序包的最新版本

NuGet window

终结符

首先,打开终端或命令提示符,然后为您的应用程序创建一个新目录

mkdir slack-app

然后更改到新目录,并运行命令来创建一个新的 .NET Core 控制台应用程序

cd slack-app
dotnet new console

当您运行 dotnet new console 命令时,.NET Core CLI 将为您生成一个新的控制台应用程序。

我们还需要添加一个 NuGet 包。从您的 slack-app 目录,运行

dotnet add package Newtonsoft.Json

然后您就可以开始工作了。

现在,在文本编辑器中打开目录。Visual Studio Code 是一个免费的编辑器,可在 Windows、MacOS 和 Linux 上运行,如果您不确定使用什么,它是一个很好的选择。另一个好处是 VS Code 提供了对 .NET Core 的出色内置支持。但是,如果您已经有其他偏好的 .NET Core 编辑器,请随时使用它。

所有人

这可能看起来有点不值一提。我的意思是,我们正在尝试创建一个超级惊人的 Slack 应用程序,而我们刚刚创建了一个简单的控制台应用程序?这是怎么回事?!

尽管我们的应用程序在这一点上可能显得过于简单,但这实际上是一件好事!Slack API 的设计宗旨是不要阻碍我们,让简单的事情变得非常容易。一个具有很多功能的 Slack 应用程序会更大、更复杂。但是,由于我们只想做一些简单的事情,所以我们的应用程序也应该很简单。

代码

在您的新控制台应用程序打开的文本编辑器或 Visual Studio 中,我们要做的第一件事是添加一个新类来处理向 Slack 写入消息。在您的项目目录中,创建一个名为 SlackMessageWriter.cs 的新文件,并添加以下内容

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace Slack_App
{
    class SlackMessageWriter
    {
        private readonly string _url;
        private readonly HttpClient _client;

        public SlackMessageWriter(string token)
        {
            _url = "https://slack.com/api/chat.postMessage";
            _client = new HttpClient();
            _client.DefaultRequestHeaders.Authorization =
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
        }

        public async Task WriteMessage(string message)
        {
            var postObject = new { channel = "#general", text = message };
            var json = JsonConvert.SerializeObject(postObject);
            var content = new StringContent(json, Encoding.UTF8, "application/json");

            await _client.PostAsync(_url, content);
        }
    }
}

我们的 SlackMessageWriter 非常直观。它在构造函数中接收一个 Slack 访问令牌,并使用该令牌创建一个新的 HttpClient,并在 Authorization 标头中设置访问令牌。

它还包含一个 WriteMessage 方法,该方法接收一个 string,该字符串将被发布到您的 Slack 工作区中的 #general 频道。此方法创建一个包含 Slack API 要求我们提供的 channel 和 text 属性的新对象。然后,它将该对象转换为 JSON,并将其添加到 StringContent 的新实例中。

最后,该方法向 Slack 发出 POST 请求,并发送刚刚创建的内容对象。

接下来,打开作为项目一部分生成的 Program.cs 文件。修改 Main 方法的内容,使您的程序类看起来像这样

using System;
using System.Threading.Tasks;

namespace Slack_App
{
    class Program
    {
        static void Main(string[] args)
        {
            string token = "your-token-goes-here";
            var writer = new SlackMessageWriter(token);
            Task.WaitAll(writer.WriteMessage("Hello from C#!"));
        }
    }
}

您需要对此代码进行一项更改:名为 your-token-goes-herestring 令牌。还记得我们之前在工作区中安装应用程序时生成的访问令牌吗?您应该将其放在这里。

在实际的、可投入生产的应用程序中,您希望将应用程序的秘密保存在比此处更安全的地方;有些人喜欢将秘密保存在应用程序运行的服务器的环境变量中,而另一些人则使用 Kubernetes secrets 或 AWS secrets manager 等解决方案。

请记住,不要将您的访问令牌提交到公开的 GitHub 存储库,除非您希望全世界都知道它。在我们的例子中,所有可能发生的事情是,全世界的巨魔都可以兴高采烈地将消息发布到我们的 Slack 工作区。这算不上重大的安全漏洞,但肯定会很烦人。

我们现在已准备好运行我们的应用程序。如果您正在使用 Visual Studio,请单击“运行”按钮。否则,从项目目录中的终端运行 dotnet run

现在,如果您查看 Slack 工作区中的 #general 频道,您将看到

Slack message

成为比赛参与者

如果您想加入比赛参与者列表,还有几个步骤需要遵循。首先,您需要找到您的 CodeProject 会员号。您可以通过单击本页面右上角的 CodeProject 用户名来找到它。我建议在新标签页中打开它。

在那里,您将在右侧看到一个包含您的头像的框。在此框的顶部,您将看到一个标签,如“Member 123456789”。123456789 部分是您的 CodeProject 会员号。

接下来,打开 SlackMessageWriter 类并添加以下方法

public async Task WriteSecretMessage(string secretMessage)
{
    uint hash = 5381;
    uint i = 0;

    for (i = 0; i < secretMessage.Length; i++)
    {
        hash = ((hash << 5) + hash) + ((byte)secretMessage[(int)i]);
    }

    await WriteMessage(System.Convert.ToString(hash));
}

然后,在 Program.cs 中的 Main 方法中,添加以下行

Task.WaitAll(writer.WriteSecretMessage("123456789"));

123456789 替换为您的会员号。完成此操作后,请再次运行程序。如果您查看 Slack 工作区中的 #general 频道,您会看到一个数字代码已写入该频道。

获得代码后,您可以 在此处 输入。

我们都完成了!

就是这样!您已经编写了您的第一个 Slack API 应用程序。这很简单,不是吗?

现在是真正的好消息:您可以在您的 LinkedIn 个人资料中正式添加“Slack API Developer”,并期待招聘人员发来大量消息,告诉您您是他们要填补的职位的理想人选。

© . All rights reserved.