Skip to main content

【C#】Discord .NETでbotを作る

Works でも公開している通り、学内Discord鯖のBot制作を担当しました。その時に用いたDiscord .NETのお話です。

この記事での目標はDiscord上のサーバーで「おはよう」という入力に対して「Hello!」と返信するBotの作成を行います。入出力ができれば大体の状況で応用が効くので…

Discord .NETについてはGitHubの公式リファレンスを読めば済む話ですが、ちゃんと日本語で説明を書きます。

参考:Discord.NETを用いたbot開発LT

そもそもなんでBot制作にPython使わないの?


「Discord Bot開発」で検索すると大体がPythonを用いた記事です。

しかしそれでもC#で書くのはなぜか、それは僕がC#好きだからです。いいでしょ。

真面目な理由を話すと

  • C#を使い慣れている人にとって好都合である(新言語を学ぶコストを削減できる)
  • 言語総合クエリ(LINQ)などが強力
  • .NET関連技術の恩恵を最大限に受けることができる
  • NuGetが便利、ライブラリが充実している

などが挙げられます。

まずはDiscord側の設定をする


DiscordのBotDeveloperサイトへアクセスし、使用するBotの設定を行います。

アクセス後表示される画面の右上「New Application」から作成したいBotの名前を入力してBotを作成します。

こんなフォームがでてくるので入力してやる

入力終了後、Botの設定画面が表示されます。

まず、設定画面左のメニューから「Bot」を選択します。

ボットの名前の設定を行い、「TOKEN」の部分からBotのトークンを取得します。

ここで取得したBotトークンは絶対に公開してはいけません。悪用されます。
こんな感じで設定し、トークンを取得してあげましょう。

次に「OAuth2」の項目に移動し、「bot」にチェックを入れて生成されたリンクへ飛びます。

 

認証設定画面が表示されるので、追加したいServerを選択してあげましょう。ServerにBotが自動的に追加されます。

ServerにBotを登録してやる

これにてDiscord側の設定は終了です。

実際にコーディングしてみよう


それでは早速コーディングに入っていきましょう。

環境はVisual Studio 2019で進めます。

新規プロジェクトの作成


まずは新規プロジェクトを作成します。

Visual Studio 2019での新規プロジェクト作成画面。コンソールアプリを選択する。

 

プロジェクト名などを決定します。今回は”TestHoge”で進めます。

“作成”ボタンを押下するとプロジェクトの作成が自動で行われ、プロジェクトファイルが生成され開かれます。

プロジェクトが生成された。

Discord .NETの導入


Visual Studio を使っている方は 「NuGetパッケージの管理」から簡単に導入することが出来ます。

メニューの[プロジェクト]→[NuGetパッケージの管理]からNuGetマネージャを開ける。

NuGetパッケージ管理画面が現れたら、検索ボックスに「Discord .NET」と入力。

[Discord]での検索画面結果。左側の[インストール]を押して入れよう。

そのまま案内に従うことで導入することが出来ます。

GUIで導入ができるなんて便利!

また、Visual Studioを使わずにDiscord .NETのライブラリがほしい方はGitHubのページから導入しましょう。

https://github.com/discord-net/Discord.Net

コーディング


やっとコーディングらしいコーディングです。

“_client” にBot情報を格納しながら起動するサンプルプログラムを以下に示します。

大本のコードは公式リファレンスによっています。

 

サンプルコードの説明–

では、コンソールにログを吐き出すための実装がなされています。

では、_clientにBot情報を格納する処理を行うための実装をしています。

コメントアウトにも書きましたが、”hoge”となっている部分に先程取得したDiscordTokenを設定してあげましょう。

このコードにより、Botはログイベントを受け取ることが可能となります。

目的を達成させる


この記事の目的は

Discord上のサーバーで「おはよう」という入力に対して「Hello!」と返信するBotの作成

です。早速実装すると、コードはこのようになります。

実行結果

実行するとDiscord.NETが起動し、接続する。
「おはよう」と入力するとちゃんと「Hello!」と返答される。

コードの説明


usingの変更、MainAsyncの変更

先程のコードから新たに

などが追加されています。

また、変数

が、追加され、MainAsyncの処理にも変更があります。

async Task CommandRecieved(SocketMessage messageParam)

では、何らかのメッセージを受け取ったときの処理が実装されています。

と宣言することによって、変数messageにユーザーの発言情報が格納されます。

そしてmessageから情報を抜き取ることで、発言情報がnullでないか、それがユーザーによる発言なのかを判別します。

そして発言がユーザーによるものだということを確認し次第、string型のcontextを取得し、照合し、発言させます。

これでチュートリアルは終了


以上で目標達成、チュートリアル終了となります。

今回は深くまでは触れていませんが、C#でのDiscord Bot開発が チョットワカル 状態になったことでしょう。(期待しています)

更に難しい動作をさせたい場合(例えばユーザーメンション,○○をプレイ中表示変更)は公式リファレンスを読むことをおすすめします。

また、僕が気が向いたら解説記事を書くかもしれません。その時はどうぞよろしくお願いします。

Atria

大学生個人開発者| AtCoder(茶) / C# / VBA /その他趣味いっぱい