このページのコードはDiscord.js V13用です。
最新版のV14では動きません。
[2022/12/28 追記]
由崎律 様より、V14用に修正されたコードを頂きました。
ありがとうございます!
こんにちは。鮎月です。
ReplitでDiscord.js v13のBotを作る方法をサクッと紹介します。
また、ここではコマンドのファイル分けなど、普通ではあまり見かけないようなことも扱います。
必ずドキュメントや公式ガイドをお供にお読みください。
なお、この記事では「スラッシュコマンド」を使用します。嫌な方は別の方の記事を参考にしてください。
この記事では、700サーバー以上に導入されているBot「唯香 -ゆいか-」の開発者である私が開発中に思った後悔などを活かした事も書いてあります。
なので初心者向け…とは言いにくいものになります。
しかしながら、Node.jsやJavaScriptを勉強した方は(コードの汚さ以外は)飲み込めると思いますので、頑張ってください!
一応テンプレ(このページの最後にリンクを貼っておきます)のフォークでも動くはずです…。
アカウント作成
この記事を参考に、アカウントの作成を済ませてください。
環境構築
先ほどの記事を参考にReplの作成を済ませたら、必要なパッケージのインストールを行います。 必要なのはこの5つ。
- discord.js
- @discordjs/builders
- @discordjs/rest
- discord-api-types
- express
5番目はUptimeRobot用です。
このように検索窓に入れてインストール出来ます。
「(パッケージ名) was successfully installed to package.json」が表示されれば成功です。
コードを書いていく
index.js
情報量が前回よりやや多いぞ。覚悟!(!?)
Discordのログイントークンをこのファイルに書いてはいけません。
Replitの仕様上、誰でも見れてしまうのでセキュリティなんて概念がないからです。
APIキーなども同様です。
なので、Tokenなどの大切な情報はReplitの環境変数として設定します。
(.envファイルは非推奨になりました)
環境変数
左側メニューの「Secrets」より、keyに DISCORD_TOKEN
、value にトークンを入力します。

トークンの取得方法は知っての通りですね。
Discord Developer Portalから行います。
終わったらAdd new secret
をクリック。これでOKです。
config.js
設定系ファイルです。
適宜追加したり変えたりしてください。
コマンドハンドリング
今回は、コマンドのコードファイルを分けていきます。
この方がメンテナンスしやすいのは火を見るよりも明らかですよね。
Add folder
より commands
という名前のフォルダを作ります。
なんと今回はその中でのフォルダ分けも行います。
general
というフォルダを中に作り、そこにAdd file
より ping.js
ファイルを作ります。
最終的にこんな感じ。

ping.js はこのように書いてください。
詳しく知りたい方はこちらでどうぞ。
イベントハンドリング
イベントハンドリングも行いますよ。
ちなみにここではジャンル分けはしません。コマンドほど増えないと思いますし(面倒なだけ
例としてこの3つを作成します。

それぞれこんな感じに書きましょう。
ready.js
guild_create.js
guild_delete.js
例を紹介します。
messageCreateイベント
execute(message, client)
messageUpdateイベント
execute(oldMessage, newMessage, client)
これで分かりますよね。
詳しく知りたい方はこちらでどうぞ。
functions.js
関数をまとめて書くファイルです。
add_command.js
スラッシュコマンドを登録するためのファイルです。
起動前にこれを実行しないとコマンドが使えません!
詳しく知りたい方はこちらでどうぞ。
起動&動作確認
スラッシュコマンドの登録
右側のShellタブより、node add_command.js
を実行しましょう。

こうなればOKです。
以下のようなエラーが出た場合は、スラッシュコマンドを登録できるサーバーが無いことを示します。
https://discord.com/oauth2/authorize?client_id=Bot_ID&scope=bot+applications.commands
という形式でもう一度Botを入れ直しましょう。
/home/runner/djs-v13-template/node_modules/@discordjs/rest/dist/index.js:708
throw new DiscordAPIError(data, "code" in data ? data.code : data.error, res.status, method, url, requestData);
^
DiscordAPIError[50001]: Missing Access
Botを起動
いよいよ起動していきます。
画面上部のRunボタンを押して起動しましょう。
config.js で指定したチャンネルにメッセージが送信されればOKです。

ちゃんとコマンドも使えてますね!

UptimeRobotの設定
このままでも動きますが、Replitでは何もしないと30分でプロセスが終了してしまいますので、UptimeRobotを使いましょう。
アカウント作成をしてない方はサクッと済ませておいてください。
ログインしたら、「Add New Monitor」をクリックします。
それぞれ、次のように設定します。
- Monitor Type: HTTP(s)
- Friendly Name: (適当に名前を付けてください)
- URL: https://[Replの名前].[Repl.itのユーザー名].repl.co
- Monitoring Interval 5~30の間(20くらいがおすすめ)
URLに関しては、エディター画面右上のこの部分です。

アラート通知先は適当にチェックを入れておきましょう。ここで設定した場所にダウンアラートが届きます。
最終的にはこんな感じ。

おわりに
以上で一通りの解説は終わりです。お疲れ様でした!
ここまでガチで1から解説してるサイトは公式ガイドくらいだと思います(多分)
また、今回のコードはこちらにまとめてあります。
ぜひ、Bot開発頑張ってくださいね!
それでは。
本記事のコメント機能を無効化させていただきました。
質問があるなら人に聞く前に検索してください。
目的の情報がないのなら英語で検索するなどして対応してください。
TwitterやDiscordでも質問は受け付けません。一切無視します。
誰かに聞きたいならStack OverflowなりTeraTailなりを使ってください。
特に前者のサイトは世界中のエンジニアを救い技術を支えているサイトと言っても過言ではありません。
質問する際も「エラーが出て動きません」ではなく、やろうとしたことやエラーを詳細に書くべきです。というかエラーはコピペして検索すればだいたい引っかかります。
最後に1つ。
このサンプルコードは、確かにコピペだけで動くようにしました。
しかし、私はただ「作りやすいBotのテンプレート」を提供しただけであり、それ以上のことはしません。
タイトルにもありますが、これは「本気で作りたい人向け」です。
初心者には向きませんから他の記事を探してください。
それでも頑張りたいなら、まずは検索を練習してください。
こちらのサイトが非常に役立つでしょう。
URlが出てこないんですけど
こんにちは。
コメントありがとうございます。
URLが出てこないとの事ですが、具体的にはどのURLでしょうか?
ReplitでのURL([Replの名前].[Replitのユーザー名].repl.co)でしたら、index.jsファイルにサーバーを開く処理が書かれていないかもしれません。ご確認ください。
処理は書いてありましたが実行してもURlが出てきていません
Botを起動した状態で、 [Replの名前].[Replitのユーザー名].repl.co にブラウザから直接アクセスしても何もありませんか?
これでも無理なら正直分からないので、Google検索等で対応していただければと思います。
Repl Unavailable
This Repl is really popular! Try again soon.
こんなのが出てきました
コメントありがとうございます。
申し訳ないですが私には分からないので、Google等で検索していただければと思います…。
node add_command.js を実行すると、エラーが発生します。
エラー⇓
/home/runner/Bot01/node_modules/@discordjs/rest/dist/index.js:827
throw new Error(“Expected token to be set for this request, but none was present”);
^
Error: Expected token to be set for this request, but none was present
こんにちは。コメントありがとうございます。
BotのTokenが設定されていない可能性が高いです。
参考: https://stackoverflow.com/questions/72985379/discord-js-expected-token-to-be-present
この投稿の「環境変数」のセクションを参考に、設定してみてください!
また、config.jsのclientIdの値もセットされているか、併せてご確認ください。
手順通りやったのにrunを押すとエラーが発生しました。config.jsに書いたidが悪いのでしょうか。