C#.NETでダイスbotを作った話


ふみゃ~う (挨拶)

同アドカレ7日目の Honey さんの記事に触発されてテトテコネクトをやり始めたところ、見事にドハマりしました。
難しめのやつをやり始めた辺りから羞恥心とかそういうの考えている余裕が無くなってとてもノリノリで遊べるようになります。*1

また、私自身のことを水色髪ロングの左目隠しの猫だと思っている部分があるのですが*2*3、まさにそういう見た目をしているリムちゃんを選んだときに、目の前にドッペルゲンガーがいる錯覚に少し陥りました。
それはそれとしてタイ トーさん判定タイミング調整機能の実装はまだですか

んまあそんなこたあ今回はどうだっていいんですよ。
というわけでアドカレの記事をかきます。
音ゲー関係ない枠で何を書こうか悩みましたが、C#.NET で Discord のダイス bot を作成したときのことを書きます。

どんなbotなの?

こんな bot です

dicebot-konnakanji1
全角文字にも対応

実は TRPG 用に作成した bot なんです。DX3 のダイスロールなんかもできます。
いいでしょ

dicebot-konnakanji2
複数の記法を組み合わせたりもできる

CoC のキャラ作成なんかもできます。
いいでしょ

dicebot-konnakanji3
APP 高めで SIZ 小さめを出すためにめちゃくちゃ厳選していた
なんかつよそう(こなみかん)

この bot 、なんと簡単な電卓の機能があります!(?)
いいでしょ (?)

dicebot-konnakanji4
べき乗とかにも対応しています

どうしてダイスbotをつくったの?

エ、なんでだっけ?*4 (あんまりおぼえていない)

多分、同アドカレ6日目の楓さんの記事にもあるように*5、TP100 内で TRPG をすることが多くなったのと、Discord の bot を作りたいなあとその時に漠然とおもっていたのがあり、それでダイス bot を作ろうと思い立ったような気がします。
もしかしたら違うかも。

まあ、作った当時は他のダイス bot もあったので、使われる機会はそんなに無いかなあと思いましたが、今では私が作成したもの以外は動かなくなってしまったので、結果的に私が作ったものが使われるようになりました。*6
作っててよかった。

p.s. 楓さん曰く、前に入れていた複数のダイス bot が軒並み死んでいたから作成していたようです。*7
なるほどね。

(大雑把な)Discordのbotの作り方

前提

C# が書ける必要があります。*8
まあ C# が書けなくてもだいじょーぶ!
Discord の botC# だけではなく、PythonJavaScript でも書くことができます!
多分 JavaScript 辺りで書いた方が色々と便利な気はします

では、なぜ C# を使用するのかというと、単純に私が比較的慣れている言語だからです(照)*9

用意するもの

  • Discord.Net Documentation
  • C# で Discord の bot がどうやったらできるのかが多分書かれています。
    ネット民の半分以上の方は英語が読める*10ので問題ないと思いますが、英語が読めない人は気合いで読みましょう。

  • Visual Studio (IDE)
  • これで開発した方が多分やりやすい。

  • プログラミングの知識
  • がんばれ*11

準備

くっそ適当に書きます

まず Visual Studio .NET Framework プロジェクト、または .NET Core プロジェクト を作ります。
ASP.NET とかではできるかはわかんないです。

次に作成したプロジェクトに、Nuget から Discord.NET をインストールします。
もしかしたら関連するものもインストールしないといけないかもしれません。

とまあこれで多分 Discord の bot が作成できるようになったと思います。

作り方

Discord.Net Documentation を見て頑張って。*12


まあ、一応日本語で書かれている記事もあるにはあるので、多分なんとかなると思います。*13

ひとつ注意点があるとすれば、C#.NET のコマンド機能を使うなら CommandHandler をどうやって動かすのかがわからないということですかね。*14*15
私もそれでちゃんと動かせていなかったんですが*16、Program クラス*17内の MainAsync メソッドの中に

handler = new CommandHandler(client, commands);
でオブジェクトを作って、その後に
await handler.InitialCommandsAsync();
とすれば動く、はず。*18
我ながらよくちゃんと動くように作れたなあ( *19

とまあ、こんな感じでいいっすか。
いいよ。ありがとう。
*20

電卓機能はなんで付けたの?

bot を作った理由でも言及しましたが、この bot を作る前には別のダイス bot がありました。
そのなかのひとつに、加減算ができるダイス bot なんかもあったりしました。

しかし、その bot も含めダイス bot が軒並み動作を停止してしまうという自体に陥ってしまいました。
その結果、電卓機能が使えなくなったのは少し寂しいなと思い、自作のダイス bot にも計算ができる機能を付けました。

乗除算なんかもできたらいいなあと思っていたので、それもできるようにしてはいますが(

今後このbotはどうするの?

現状この bot は知り合いのサーバーと化しているパソコンで動かしてもらっている状態です。
知り合いの事情によっては bot が止まることも当然あります。*21
今後色々機能とかを追加するにあたって、データファイルとかを生成するようにしようと思っているので、その状態で知り合いに動かしてしまうのは個人的には少し申し訳なさがあります。*22

なので、知り合いのパソコンに影響が無いように、また私自身の勉強のためにもレンタルサーバーを借りて動かそうかなあと思っています。*23
ドメインとかを借りたりとかしてサイトでキャラシートを作成・確認する用の web アプリなんかも作れたりしそうですし。*24

最後に書くことなんかある?

テトテコネクト楽しいので気になっているひとはぜひやりましょう*25



以下 footnote

*1:個人の感想です

*2:ちょっとなにいってるかよくわかんないですね

*3:ここでの猫は実際の猫とか猫耳生えているというそういうわけではなく概念

*4:Google Fonts より Yuji Mai

*5:ここウニ

*6:普通に TRPG 鯖以外でもダイス bot が入れられていたりしていたので、普段はそこでよく使われている

*7:一体何があったんだ

*8:記事のタイトルからしてそれはそう

*9:別の言語の方が慣れていたらそっちで書いていた

*10:エビデンスは一切無いです🦐

*11:がんばれ

*12:がんばれ

*13:C# でプログラミングがある程度できるということが前提ですが

*14:まず CommandHandler がちゃんと動かせていないということに気付くのも難しそう

*15:私が英語を読めていないだけなのはあるかもしれない

*16:なんかサイトとか色々な記事の通りにやったらエラーが2つくらい出た
片方がこれで、もう片方は記事の通りにすればもう出ることはないと思う

*17:Visual Studio Community で C# のプロジェクトを作ると最初に生成されるクラス

*18:他の部分に問題がなければ

*19:なんで動かないのか分からない状態になるとあきらめて放置しがちなので
諦めずに動くところまで持っていけたのは本当にえらい

*20:なんか間違えていたら教えて

*21:最近知り合いの環境が変わったので、止まることが多くなってきた

*22:バグとかで余計なファイルが大量に生成されたりとかも無いわけではありませんし

*23:聞いた話ですが前述の知り合いもレンタルサーバーを借りているようですが、自分で借りたほうが色々やりやすいので、このようにすることにしました

*24:Discord.NET でそこまで可能なのかは知らない

*25:Google Fonts より M PLUS 1p