Discord BotでDiscord上から再起動(リロード)をしたいです。
試したこと
js
1if (message.content === "restart") { 2 if (message.author.id !== "自分のDiscordのID") return; 3 process.exit(0); 4}
問題
これだとスクリプトが停止されるが、もう一度起動されない。
環境
Node.js v12.x
discord.js v12
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
停止しかしてないので当然です。
じゃあどうすんのかという方針を色々示します。
真っ先に思いつくのは、
Node.jsで実行したスクリプトを終了してしまっても
ゾンビのように復活すればよくね?という発想ですね。
こういった1次元上から終了したプロセスを
無理やり再起動出来るようなソフトウェアは色々あります。
Web系でよく用いられる手法を2つ紹介します。
- pm2等のプロセスマネージャーを活用
- Node.jsの実行をDockerで包み、restart: alwaysの設定で動作
どちらもNode.js外でどうにかする作戦なので
それ専用の勉強が必要になるのでちょっと大変ですね。
「そもそも何故再起動したいという発想に至ったか」で考えると
新しく見えてくるものがありそうです。
何故再起動したいか?
それは「チャットボットの更新を反映したいから」ではありませんか?
例えば行動の指針となるベースの部分をYAMLで記述しておき
restartと同時にそのYAMLを読み直す事で同様の効果を得られそうです。
他にもNode.jsにはrequireを使って他のファイルを読み直せますが、
requireのキャッシュを消して無理やり再ロードというテクニックも存在します。
参考記事: requireのキャッシュを消す - Qiita
こういう方向で解決した場合、
命令はrestartではなく、reloadの方が正しいかもしれません。
投稿2021/06/11 03:06
総合スコア21203
0
このコードが実際に使えます
再起動したい部分に入れるコード
js
1process.exit();
botにログインする部分
js
1function setevent(spl){ 2 3 spl.stderr.on('data', (data) => { 4 console.error(`${data}`); 5 }); 6 spl.on('exit',exitCode => { 7 const [node, ...args] = process.argv 8 sp=child_process.spawn(node, ['index.js','1'], { detached: true,env: process.env }); 9 setevent(sp); 10 11}); 12 spl.on('error', (err) => { 13 console.error('Failed to start process.\n'+err); 14}); 15} 16 17if(process.argv[2]=='1'){ 18client.login(process.env.TOKEN); 19 20}else{ 21 const [node, ...args] = process.argv 22 sp=child_process.spawn(node, ['index.js','1'], { detached: true,env: process.env }); 23 setevent(sp); 24}
投稿2022/03/29 10:31
総合スコア16
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
js
1client.on("message", async message => { 2 if (message.content === "!restart") { 3 if (message.author.id != 自分だけが実行できるための自分のID) return; 4 message.channel.send("再起動を実行しました。"); 5 client.destroy(); 6 client.login("TOKEN"); 7 } 8});
こうです。(2回目)
投稿2021/07/23 13:42
総合スコア154
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。