🐈

RustでSlack APIを使う

2021/02/13に公開

RustでSlackのAPIを使ってみた。Slack Appの登録の方法などは省略。
Slack APIを他の言語で使った経験があり雰囲気はわかっているものとしている。

cargoの設定

slack-apiのcrateを使う。

async clientを使うときにmainでtokio-1.0を使っているとslack-apiがtokio-0.2のためそのままだと動かない。
互換性のライブラリを入れる必要がある。さらにasyncを呼び出すときにcompat()をつける必要がある。

tokio-compat-02 = "0.2.0"

sync clientを使うときには少し変更が必要。

slack_api = {version="0.23.1", features = ["sync", "reqwest_blocking"]}

とオプションを追加する必要がある。

async clientの例

Slack APIを他の言語で使った経験があれば大体わかるだろう。

use std::env;
use dotenv::dotenv;
use slack_api::chat::PostMessageRequest;
use tokio_compat_02::FutureExt;
use futures::TryFutureExt;

#[tokio::main]
async fn main() {
    dotenv().unwrap();
    let token = env::var("SLACK_BOT_TOKEN").unwrap();
    let client = slack_api::default_client().unwrap();
    let response = slack_api::chat::post_message(&client, &token, &PostMessageRequest {
        channel: "#devtest",
        text: "Hello Rust",
        ..PostMessageRequest::default()
    }).compat().await.unwrap();

    let ts = response.ts.unwrap();


    let response = slack_api::chat::post_message(&client, &token, &PostMessageRequest {
        channel: "#devtest",
        text: "response",
        thread_ts: Some(ts),
        ..PostMessageRequest::default()
    }).compat().await.unwrap();

    println!("{:?}", response);
}
GitHubで編集を提案

Discussion