traq_ws_bot/lib.rs
1/*!
2[doc](https://docs.rs/traq-ws-bot/latest/traq_ws_bot/)
3
4# 使用法
5**Warning:** 現状の examples は動かないため修正が必要
6ref: [examples](../examples/)
7
8Go で作成する方法は [traP 内 wiki に記載あり](https://wiki.trap.jp/user/toki/memo/5%E7%A7%92%E3%81%A7%E4%BD%9C%E3%82%8BtraQ-bot)
9
10ここでは Rust の使用方法がわかる人向けに BOT の作成から動かすまでを説明します
11
121. [traQ BOT Console](https://bot-console.trap.jp/) の BOTs から BOT を作成する
13 注: この際動作モードを **WebSocket** にする必要があります
142. bot-console から BOT が受け取るイベントを設定する
15 詳しいイベントの種類は [BOT イベントリファレンス](https://bot-console.trap.jp/docs/bot/events)参照
16 echo-bot を動かすだけなら DIRECT_MESSAGE_CREATED にチェックをいれれば OK
173. 動かすだけなら、 [examples/echo-bot-openapi](../examples/echo-bot-openapi/) の内容を手元にコピーして、Cargo.toml の traq-ws-bot の依存関係を修正し、bot-console からアクセストークンを `.env` に `BOT_ACCESS_TOKEN=トークン` の形で記述すれば `cargo run` をすると動きます
18
19## BOT の構築方法
20BOT は `traq_ws_bot::bot::builder` を用いて作成されます。
21作成時には BOT アクセストークンが必要で、ここで設定した値は後述するハンドラー内から読み取ることはできず、イベントを取得するためのみに使われます。
22
23BOT は唯一つの Resource を持つことができ、`.insert_resource(リソース)` の形で設定することができます。複数回呼ばれた場合は最後ののみが採用されます。
24リソースは `Send + Sync + 'static` である必要がありますが、Immutable で十分ならば `Arc` でのラップなどで一般的な構造体を持つことができます。
25`.insert_resource` を行ったあとは、それより前に設定されていたハンドラーは resource の使用の有無に関わらず削除されるため、`builder` の直後のチェーンで呼ぶことを強く推奨します。
26
27BOT には無制限にハンドラーを追加することができます。リソースを使用しないハンドラーは `.on_event_name(ハンドラー)` のように、リソースを使用するハンドラーは `.on_event_name_with_resource(ハンドラー)` のように記述できます。
28ハンドラーは通常の関数か、環境をキャプチャしないクロージャを使用できます。
29`.on_event(Key, ハンドラー)` を用いることで、複数のイベント・すべてのイベント に対して一つのハンドラーを用いてまとめて設定することもできます。
30
31一般的な Tips として、message の投稿のイベントなら `message.user.bot` のように、BOT に起因するイベントかどうかを取得できるため、無限ループの対策のために BOT からのメッセージであれば返信をしないといった処理を handler 内で行ったほうがいいです。l
32
33## API の叩き方
34通常は reqwest などのてきとうな API クライアントを用いて [API Document](https://apis.trap.jp/) のリンクを叩くことで、叩けます。この場合は `traq_ws_bot::utils::create_client` を用いると少し楽にクライアントを生成できます。
35
36Open API による自動生成のコードを用いることもでき、`traq_ws_bot` の `openapi` features を有効にした上で、`traq_ws_bot::openapi::apis` 以下の関数を用いることが可能です。
37この場合は `traq_ws_bot::utils::create_configuration` を用いると少し楽に configuration を構築することもできます。
38
39## デプロイ方法
40WIP
41
42<https://github.com/SSlime-s/BOT_SSlime/blob/main/showcase.yaml> や <https://github.com/SSlime-s/BOT_SSlime/tree/main/.github> を参考に書く
43*/
44
45pub mod bot;
46pub use bot::builder;
47pub mod events;
48pub mod utils;
49
50#[cfg(feature = "openapi")]
51pub mod openapi;
52#[cfg(feature = "openapi")]
53#[macro_use]
54extern crate serde_derive;