ケヴィンのなんかいろいろ

ハースストーンとかその他色々なことについて話すブログです

MENU

【C#】DiscordのBotを作った

だいぶ前ですがDiscordのBotを作ってみました。といっても大体コピペプログラミング。

何をしましたか

自鯖*1で動かすDiscordのBotを作りました。

ソースはこれ

github.com

DiscordのBotの話はPythonが多いみたいなんですが、僕はやっぱりC#。この手に限る。

環境

  • C# 7.3
  • .NET Core 2.2
  • CentOS7

さくらのVPS上で動いてるので、.NET Flameworkじゃなくて.NET Coreで作りました。単純なコンソールアプリケーションだったらCoreで書いちゃったほうが良さそうだ。

作り方

これを見ながらプロジェクト開いてNuGetをインストールするところまでやります。

qiita.com

Discord.NETのドキュメントにあるガイドを見て、Setup項のすぐ下にあるサンプルソースをコピペします。

discord.foxbot.me

トークンを書き換えます。22行目を書き換えてね。

サンプルソースがなんか間違ってるので直します。

まずはInstallCommands()AddModulesAsync()の引数が足りないので足します。

//修正前
public async Task InstallCommands()
{
    // Hook the MessageReceived Event into our Command Handler
    client.MessageReceived += HandleCommand;
    // Discover all of the commands in this assembly and load them.
    await commands.AddModulesAsync(Assembly.GetEntryAssembly());
}

//修正後
public async Task InstallCommands()
{
    // Hook the MessageReceived Event into our Command Handler
    client.MessageReceived += HandleCommand;
    // Discover all of the commands in this assembly and load them.
    await commands.AddModulesAsync(Assembly.GetEntryAssembly(), services);
}

あとなんかHandleCommand()内にスペルミスがあるので直します。serviceをservicesにするだけ。

//修正前
// rather an object stating if the command executed successfully)
var result = await commands.ExecuteAsync(context, argPos, service);

//修正後
// rather an object stating if the command executed successfully)
var result = await commands.ExecuteAsync(context, argPos, services);

次にExample Module項のすぐ下のサンプルソースをコピペして、別のファイルにコピペします。

してビルドしたら完成です。やったね!

あとはサンプルを見ながら独自のコマンドを付けたりなんだりしよう。

今ある機能

サンプルそのままじゃ流石にあれなので機能を付けてます。絵文字でスロットを回す機能が付いてます。絵文字でスロット回してます。Command.cs内のSlotクラスを見てもらえればたぶん分かる。

ちなみに絵文字リストを手で作ってるんじゃなくて、今サーバに入ってる絵文字を取得してきて~とかやってます。これまではhttp通信するのにしこしこHttpClient作ってうんぬんとかしてたんですけど、RestClient使えば良かったですね。めっちゃ簡単。

おわりに

Slotがちゃんと動いたときに鯖のみんながそれでめっちゃ遊んでくれたのめっちゃ嬉しかったです。なんか面白い機能追加したいね。

機能解説はする予定は無いけど需要があったらします。需要を生んでくれ。

終わり!

*1:自鯖のリンクは僕のTwitterのBioにあるので興味がある方はどうぞ