1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Discord.jsでプログラムがエラーを吐いても起動させ続ける

Last updated at Posted at 2024-03-10

前置きの前置き

何と

process.on('uncaughtException', err => console.log(err))

このコードをどこかに書いておけば大丈夫だそうです
(つまりこれはただのライブラリ紹介)

前置き

多分初投稿のumisoraです
PCの起動時に.batでbotも起動できるかなーとか思いながら調べていましたら
pm2というライブラリを見つけたので忘備録 + 紹介です...!

仕組み(ざっくりと)

どうやらエラーを吐いたプロセスをもう一度起動する仕組みのようです
もっと詳しく知りたい方は調べてみるといいかもしれません

結局どうやるの?

やり方はいたって簡単
まずはnpmでpm2をインストールします

npm install pm2 -g

そしたら皆さんいろんなランタイムを使ってるかもしれませんが起動コマンドを

pm2 start [botが起動するファイル名(拡張子省略不可)]

とします(一応cdかなんか使ってbotが起動するファイルのあるディレクトリで実行してください)
筆者の場合は

pm2 start index.js

となります
するとコンソールに

[PM2] Applying action restartProcessId on app [index](ids: [ 0 ])
[PM2] [index](0) ✓
[PM2] Process successfully started
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ index              │ fork     │ 0    │ online    │ 0%       │ 51.3mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

こんな感じで表示されます
statusがonlineになっていれば起動しています
botを停止する際は

pm2 stop [botが起動するファイル名(拡張子省略不可)]

と打ちます
するとコンソールに

[PM2] Applying action stopProcessId on app [index.js](ids: [ 0 ])
[PM2] [index](0) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ index              │ fork     │ 0    │ stopped   │ 0%       │ 0b       │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

こんな感じで停止したのがわかります(status欄にstoppedと書かれていれば停止しています)
試しにエラーを吐かせてみましょう(Discord.js v14で実験します)
botのmessageCreateイベント内に

js index.js
client.on(Events.MessageCreate, async (message) => {
    if (message.content == "err") message.channel.send("") //errというメッセージが送られたら空のメッセージを送る(つまりエラーを吐かせる)
}

こんなプログラムを追加してそのbotが参加しているサーバーでerrというメッセージを送信してみましょう
普通ならばCannot send empty messageなどと出るはずですが、コンソールを見ると何も表示されず、何もなかったかのように動き続けています(さっき追加した一文は消しておきましょう)
pm2でbotを運用する時のデメリットとしては
・エラーが出ないのでエラーが出た原因がわからない
・まずエラーが出たのかどうかもわからない
なのでエラーを確認したい場合はいつも通りnodeやyarnやbunなどで起動するのが好ましいでしょう

終わり

気が向いたらDiscord.jsの記事やNextの記事なども書く予定です...
読んでくださりありがとうございました...!

参考

前置きの前置き

ライブラリ紹介

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?