前回からだいぶ時間が空いたが、下調べの続き。
discord-rs というのを最初に見つけて古いと嘆いていたのだが、現在使われているクレートは serenity の方だったようだ。これを検索で見つけるのは至難の業。 discord で検索すると、他の関係ないクレートがガンガン引っかかってしまうので(恐らく、いろいろなクレートでサポート用の discord チャネルがあるため)。
serenity は非常に重厚なクレートで、 discord.py に設計思想が近い。 #[command]
マクロを使うことで、簡単に bot コマンドを作ることができる。これは framework
feature で提供される機能。
このクレートは tungstenite を使っているが、 tokio ベースではない。つまり、 Future
トレイトを使った非同期処理にはなっていない。 reqwest
も同期的に使っており、 API にリクエストを送るとブロックする。 issueは上がっている が対応の目処は立っていないようだ。
ところで、 tokio-tungstenite は新しいバージョンが無事にリリースされ、 async
await
を使って処理を書けるようになっている。 discord-rs を参考に bot を実装してみているが、今のところうまく動かすことができている。 APIの量が多くて これらの JSON を定義するのに手間取っているが、もう少し機能が充実したら discord-rs の代替の軽量なクレートとしてリリースできたらいいなと思いながら実装を進めている。諸事情( rust の練習も兼ねているので実験用のゴミが多い、など)でまだしばらくは github には上げないつもりである。