3 releases

0.1.2 Mar 1, 2023
0.1.1 Dec 3, 2022
0.1.0 Dec 2, 2022

#160 in WebSocket

23 downloads per month

MIT license

650KB
11K SLoC

traq-ws-bot

doc

使用法

Warning: 現状の examples は動かないため修正が必要
ref: examples

Go で作成する方法は traP 内 wiki に記載あり

ここでは Rust の使用方法がわかる人向けに BOT の作成から動かすまでを説明します

  1. traQ BOT Console の BOTs から BOT を作成する
    注: この際動作モードを WebSocket にする必要があります
  2. bot-console から BOT が受け取るイベントを設定する
    詳しいイベントの種類は BOT イベントリファレンス参照
    echo-bot を動かすだけなら DIRECT_MESSAGE_CREATED にチェックをいれれば OK
  3. 動かすだけなら、 examples/echo-bot-openapi の内容を手元にコピーして、Cargo.toml の traq-ws-bot の依存関係を修正し、bot-console からアクセストークンを .envBOT_ACCESS_TOKEN=トークン の形で記述すれば cargo run をすると動きます

BOT の構築方法

BOT は traq_ws_bot::bot::builder を用いて作成されます。
作成時には BOT アクセストークンが必要で、ここで設定した値は後述するハンドラー内から読み取ることはできず、イベントを取得するためのみに使われます。

BOT は唯一つの Resource を持つことができ、.insert_resource(リソース) の形で設定することができます。複数回呼ばれた場合は最後ののみが採用されます。
リソースは Send + Sync + 'static である必要がありますが、Immutable で十分ならば Arc でのラップなどで一般的な構造体を持つことができます。
.insert_resource を行ったあとは、それより前に設定されていたハンドラーは resource の使用の有無に関わらず削除されるため、builder の直後のチェーンで呼ぶことを強く推奨します。

BOT には無制限にハンドラーを追加することができます。リソースを使用しないハンドラーは .on_event_name(ハンドラー) のように、リソースを使用するハンドラーは .on_event_name_with_resource(ハンドラー) のように記述できます。
ハンドラーは通常の関数か、環境をキャプチャしないクロージャを使用できます。
.on_event(Key, ハンドラー) を用いることで、複数のイベント・すべてのイベント に対して一つのハンドラーを用いてまとめて設定することもできます。

一般的な Tips として、message の投稿のイベントなら message.user.bot のように、BOT に起因するイベントかどうかを取得できるため、無限ループの対策のために BOT からのメッセージであれば返信をしないといった処理を handler 内で行ったほうがいいです。l

API の叩き方

通常は reqwest などのてきとうな API クライアントを用いて API Document のリンクを叩くことで、叩けます。この場合は traq_ws_bot::utils::create_client を用いると少し楽にクライアントを生成できます。

Open API による自動生成のコードを用いることもでき、traq_ws_botopenapi features を有効にした上で、traq_ws_bot::openapi::apis 以下の関数を用いることが可能です。
この場合は traq_ws_bot::utils::create_configuration を用いると少し楽に configuration を構築することもできます。

デプロイ方法

WIP

https://github.com/SSlime-s/BOT_SSlime/blob/main/showcase.yamlhttps://github.com/SSlime-s/BOT_SSlime/tree/main/.github を参考に書く

Dependencies

~9–22MB
~307K SLoC