Discord自鯖用のBotを作っている話。
みなさま、こんにちは。こんばんは。
今回は通話アプリ(?)Discordの自作Botを作った話です。
現在進行形で制作中なので、作っている、が正しいでしょうか。
今回は、どんな言語で作ったのか、どんなものを作ったのか、そして今後どうしていきたいか呟いていきたいと思います。
作りたいもの
まずはこれがないと、作るものも作れません!イメージって大事だよね。
今回は、自鯖用に
「VCチャンネルをコマンドで増やして」、
「誰もいなくなったらVCチャンネルを破棄」するBotを作ろうと思いました。
Discord鯖運営で最もめんどくさいのが、チャンネルの増やし方だと思っています。
今回は「人が増えたらコマンドでVCチャンネル増やして、いなくなったら自動的に消してくれるBotがあったら便利!!」ということで、作りたいものはこれに設定。
どの言語で作る?
いきなり難しい話ですが、これも重要……!
言語というのは、今回は「プログラミング言語」のことです。Java、C言語系。今はRubyとかPythonもありますよね。
今回は、Discord.jsというDiscordのBotを作るときに大変お世話になるソースコードを利用したいのでJavascript。ホームページの動作などに使われる言語でやろうと思い立ちました。
どのソフトで作る?
使うソフトはVisual Studio Code。こちらは持ってるので、導入いらず。
ちなみにこのソフト選び、意外と難しいです。
私はWeb系の勉強もしているので、ソフトがそろっていたのでいいのですが、一から探すとなるとさぁ大変……。山のようにソフトが出てくるからです。
Windowsでしたら、一番のおすすめはVisual Studio Code。異論は認めますw
さあ、作り始めよう!……どこから?
作り始めるのですが、まずは環境の構築から。
Discord.jsを使うと決めているので、その前提にあたるNode.js(端的に言えば、ネットワーク関連の記述を楽にしてくれるもの)は導入必須。
これらを、諸先輩方の記事や動画を参考に構築。
ここらへんで、1日が経過していました。
構築完了!何から手を付けよう?
ざっくり説明すると、いきなり中身を書くことはしません。
欲しい機能を実装する前に、起動部分をまず作ります。
今回のBotで言えば、Botがサーバーでオンラインになるための部分です。
ここら辺は、探せばいっぱい出てくるので割愛。今回のこのnoteの目的は、ここを説明することではないから!!
本格実装。の前に、やりたいことのおさらい。
今回作りたいBotは、
「VCチャンネルをコマンドで増やして」、
「誰もいなくなったらVCチャンネルを破棄」するものでした。
破棄するのにも、まずはVCチャンネルがなくてはいけないので、先に「VCチャンネルをコマンドで増やす」処理を作っていきます。
ここでついでに、もうひとひねり。
「VCチャンネルの名前。連番の上で、足りない番号が出ないようにしよう」
どういうことかと言いますと。
VC1→VC2→VC3 と作ります。
その中で、VC2が活動を終え全員退出後、消えたとする。
次に作られるのは、VC2?VC4?
ってなったときに、「VC2」を作ります!その次は「VC4」です!
とやりたかったわけです(伝わったかな?)。
実装!!!
そこで思いついたのが「配列」を使うやり方。
並べ替え機能や、特定の配列の要素を削除する機能があるので、これを積極的に使うことに。
その、実装部分がこちら。
//追加後のVCの数を算出
var no = roommanage.length + 1;
for (var i = 0; i < roommanage.length; i++) {
//空きの番号があれば、割り込んで作る
if (i + 1 < Number(roommanage[i])) {
no = i + 1;
break;
}
}
//VCチャンネル作成
message.guild.channels.create({
name: "VC" + no.toString(),
type: Discord.ChannelType.GuildVoice,
});
//配列に追加・並べ替え
roommanage.push(no.toString());
roommanage.sort();
roommanageっていうのが、VCチャンネル管理用の配列です。
そして、これだけではVCチャンネルが正常に作れたかわからないので……
message.channel.send("VC"+no.toString()+"を作りました");
メッセージを受け取ったチャンネルに返す形で、「作りました」報告をすることに。
そしてこれらを、メッセージの中身を照合する形で好きな文字列をコマンド化してあげれば完成!
VCチャンネル作成のところのTypeっていうのを、変えてあげればテキストチャンネルだって作れます。
ちなみにこれで成功したので、次の処理を書いていきます。
次はVC退出後、全員いなくなったらチャンネルを消す処理も書いていきましょう。
難しかったですが、
「VCチャンネルを移動・退出するとき」、「元の部屋の人数が0だったら」、消すという処理にしました。
ついでに、roommanageからも番号を消去!
これで記述完成!
これで完成??
と思いきや、まだまだ残るデバッグ作業……!
果たしていつ完成するのやら……。
それはともかく。
考え方の助力になったら幸いです!!
ご覧いただきありがとうございました!!
この記事が気に入ったらサポートをしてみませんか?