今回はプログラミング言語のElixirでDiscordのBotを開発していこうと思います。
使用するライブラリは「discord_alchemy 」になります。
Elixirって何ぞや?って人もいると思いますが、まぁ「そういう言語があるんだなぁ」と思ってもらえれば......。後々Elixirに関する記事は書く予定なのでしばらくお待ちください。
開発についてですが、今回はVisual Studio Codeとコマンドラインを使用して開発していこうと思います。
今回開発するBotは挨拶を返す「あいさつBot」です。
内容としてはhelloコマンドを送信すると、「こんにちは、○○さん」と返してくるBotです。
開発環境の準備
Visual Studio Codeのインストールはこちらの記事をご覧ください。
[st-card-ex url="https://www.dice-programming-etc.com/2020/08/30/javascriptdiscord-botdiscord-js/" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
次に、Elixirの環境を整えましょう。Windowsではインストーラーを使うことで環境ができます。
こちらのサイトからWindows用のインストーラーをダウンロードしてください。
[st-card-ex url="https://elixir-lang.org/install.html" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
Erlang がインストールされていない場合、このセットアップ中に同時にインストールすることができます。
Elixirのバージョンは「1.10.4」をインストールしました。
次にVisual Studio Codeの拡張機能をインストールしましょう。
vscode-elixirをインストールしてください。
一つ下の「ElixirLS: Elixir support and debugger」はデバッガーなので必要な人はインストールしておいてください。
これで、環境の準備は完了です。ではBotを作っていきましょう。
Discord Bot作り
まずはプロジェクトを作りましょう。これはコマンドプロンプト(またはwindows PowerShell)を使用します。
コマンドラインを開いてプロジェクトを保存するフォルダまで移動してください。
cd 移動先
移動先はエクスプローラーのからでも調べられるので、リンクをコピーして移動してください。
移動したらこのコマンドを実行してください。
mix new プロジェクト名
プロジェクト名を「bot」とした場合はこんな感じですね。
mix new bot
これを入力するとこんな感じに表示されると思います。これでプロジェクトが作成されました。
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/bot.ex
* creating test
* creating test/test_helper.exs
* creating test/bot_test.exs
Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:
cd bot
mix test
Run "mix help" for more commands.
次にVisual Studio Codeでフォルダを開いてください。「ファイル>フォルダを開く」でプロジェクト名を「bot」とした場合は「bot」フォルダを開いてください。
次は使用するライブラリをインストールします。画像の22行目~27行目のところに追加していきます。
defp deps do
[
{:alchemy, "~> 0.6.4", hex: :discord_alchemy}
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
]
end
3行目を追加しました。これで必要なものが準備できました。次にこのコマンドを実行してください。
mix deps.get
では、本格的にやっていきます。
プログラムを書いていこう
ではまず、「lib」フォルダ内にあるプロジェクト名.exを開いてください。(画像2の場合は「bot.ex」)
defmodule Bot do
@moduledoc """
Documentation for `Bot`.
"""
@doc """
Hello world.
## Examples
iex> Bot.hello()
:world
"""
def hello do
:world
end
end
こんな感じだと思います。これを改良しましょう。
とりあえず、2行目~15行目まで消しちゃってください。使いません。
defmodule Bot do
end
はい、こんな感じですね。そうしたらこれがアプリケーションだと分かるようにしましょうか。
defmodule Bot.App do
end
はい。次にBotをスタートさせる関数を作ります。
defmodule Bot.App do
use Application
alias Alchemy.Client
def start(_type, _args) do
token_str = get_token()
run = Client.start(token_str)
use Discord.Commands
run
end
end
6行目の「get_token」はこれから作ります。8行目は後で作るモジュールになります。次に「get_token」を作っていきます。
defmodule Bot.App do
use Application
alias Alchemy.Client
def start(_type, _args) do
token_str = get_token()
run = Client.start(token_str)
use Discord.Commands
run
end
defp get_token do
Application.fetch_env!(:bot, :token)
end
end
13行目でconfigファイルからトークンを読み取っています。では次にconfigファイルを作成します。
configファイル
まず、configフォルダを作成してその中に「config.exs」を作成しましょう。
内容をこんな感じにして下さい。
import Config
config :bot,
:token, "トークン"
トークンについてはこちら。
[st-card-ex url="https://www.dice-programming-etc.com/java%e3%81%a7discord-bot%e9%96%8b%e7%99%ba%ef%bc%88javacord%ef%bc%89/#DiscordBot" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
コマンドを受け付けよう
次にコマンドを受け付けてイベントを起こすモジュールを作成します。bot.exと同じlibフォルダにcommand.exというファイルを作成しましょう。(名前は何でも良いです)
作成したら何も書いていないファイルだと思うので、一旦中身をこうしてください。
defmodule Discord.Commands do
end
1行目のモジュール名......、どこかで見ましたね。
そう、bot.exです。useで呼び出されてたやつをこれから作っていきます。
と言ってもbot.exほど書くことはありません。さっと書いてしまいますね。
defmodule Discord.Commands do
use Alchemy.Cogs
Cogs.def hello do
{:ok, name}= Cogs.member
Cogs.say "こんにちは、#{name.user.username}さん"
end
end
これで完成です。はい。
少し解説しますね。
2行目:use Alchemy.Cogs
これはコマンドを登録するためのモジュールです。
4行目:Cogs.def hello do
ここで「hello」というコマンドを登録しています。
discordでは「!hello」で呼び出せます。
5行目:{:ok, name}= Cogs.member
発言した人の情報をnameに格納しています。
6行目:Cogs.say
botが発言します。
6行目:name.user.username
nameに格納された情報からユーザー名を取得しています。
これでプログラムは終了です。
じゃあ起動!......と行きたいところですがあと一手足りません。
ちょっとだけmix.exsにつけたします。
def application do
[
extra_applications: [:logger],
mod: {Bot.App, []}
]
end
4行目を足してください。これで一通り完成です。
では起動してみましょう。
Bot起動
コマンドラインを使います。プロジェクトのフォルダ内に移動してください。
(botというプロジェクトであればフォルダ名はbotになります。)
そうしたらこのコマンドを打ってBotを起動しましょう。
mix run --no-halt
コンソール内に
[debug] Shard [0, 1] received READY
のような文が表示されていれば起動したはずです。本当に起動したか、Botを入れたサーバーで確認してみましょう。
ボットがオンラインになっていれば起動しています。ではコマンドを打って反応が返ってくるか見てみましょう。
こんな感じに挨拶がBotから返ってくれば成功です。
まとめ
お疲れ様でした。これで簡単なコマンドの実装でき、簡易的なBotが完成しました。
当サイトでは様々な言語でDiscord Botの開発方法を紹介しています。自分にあった言語で開発してみてください。