RustでSlack APIを使う

公開:2021/02/13
更新:2021/02/13
1 min読了の目安(約1300字TECH技術記事

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