Serenityを使ってDiscordをRustから遊ぶ
はじまり
ちょっと作りたいものがあったのでDiscordのAPIを調べてました。
ぶっちゃけた話、Pythonでdiscord.pyを使った方が楽なんだと思うんですけど、Pythonをみたら発狂して転げ回る病気にかかったということにしているので今回はRustで。
RustでDiscordAPIを叩くライブラリを探してみるとSorenityというライブラリが見つかりました。
日本語で説明しているページが見当たらなかったので、しばらくあちこちにらめっこしながら、とりあえずサンプルが動いたのでそこまで書いておきます。
下準備
まずはDiscord向けのbotを作る準備をしないといけません。Discord向けのアプリを作るためにまずデベロッパーポータルへ行きましょう。
Discordにログインした状態でアクセスすると、下のようなページが出ると思います。
右上の"New Application"をクリックし、作成するアプリケーションの名前を入力して作成します。
日本語でも大丈夫みたいですね。
作成すると下のようなページが出るはずです。
そうしたら上図の赤丸のBOTをクリックします。
右のADDBOTをクリックすると、
"ADD A BOT TO THIS APP? "
"Adding a bot user gives your app visible life in Discord. However, this action is irrevocable! Choose wisely."
と、「bot追加したらもう戻れねえぜ!賢い選択を。」的なことを聞かれるので"Yes, do it !"を力強くクリックしましょう。
余談ですが、"Choose wisely"は『インディー・ジョーンズ/最後の聖戦』を元ネタとするミームみたいですね
それはさておき、クリックすると、
上図のようなページに移動します。
"A wild bot has appeared!"
「あ!やせいの BOTが とびだしてきた!」ですかね。
Discordは本当にゲーム関連の洒落が多くて素敵ですね。
それもさておき、上図の赤丸部分がプログラムで使用することになるトークンです。後で使います。覚えておいてください。
訪れるたびに毎回少しずつ変化しますが、いつ作ったものを使っても問題ないです。
次に、左カラムのOAuth2をクリックします。
移動先のページをスクロールすると、下図のようなチェックボックスが大量に出てくるかと思います。
ここではbotにチェックを入れます。するとさらに下に下図のようなチェックボックス群が出てきます。
このチェックボックスでbotに与える権限を設定できます。これはbotを招待する際に権限オフにもできます。
とりあえず試すために管理者にチェックを入れます。
その後2つ上の図の赤丸でリンクをコピーし、それにアクセスすると下図のような画面が出ます。
そこから追加するサーバーを選んで認証を押してやると
BOTがサーバーに参加します。
が、当然このままでは何もできません。
プログラムで動かしてやる必要があります。
SerenityでDiscord BOTを動かす
とりあえずSerenityをcloneしてきましょう。
git clone https://github.com/serenity-rs/serenity.git
そうしたらexampleディレクトリ内の01_basic_ping_botに移動しましょう。
cd serenity/examples/01_basic_ping_bot/
それでもってcargo run・・・といきたいところですが、このままだと「トークンの環境変数がないぞ」と怒られて動きません。
トークンをプログラム内か環境変数に書いてやる必要があります。
コードをいじらないで動かす場合は、
export DISCORD_TOKEN=<ここにトークン>
とでもしておけばいいと思います。
コードをいじって動かす場合は45,46行目の
let token = env::var("DISCORD_TOKEN") .expect("Expected a token in the environment");
を
let token = "ここにトークン"
としておきましょう。
そうしたらcargo runします。
無事起動し、サーバーに接続できると、コンソールに
<BOTの名前> is connected!
が出ますので、そうしたらDiscord上で"!ping"と書き込んでやると・・・動きましたね。