Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

rustでdiscordのbotを作ってみたくて下調べ(3)

前回からだいぶ時間が空いたが、下調べの続き。

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 には上げないつもりである。