回答編集履歴
1
インデントが変だったので修正
answer
CHANGED
@@ -50,27 +50,27 @@
|
|
50
50
|
|
51
51
|
client.on("messageCreate", message => {
|
52
52
|
if (message.author.id === "1234") {
|
53
|
-
|
53
|
+
if (message.content.startsWith("js\n")) {
|
54
|
-
|
54
|
+
let body =message.content.substring(3);
|
55
|
-
|
55
|
+
let log = "";
|
56
56
|
|
57
|
-
|
57
|
+
fs.writeFileSync("sample.js", body)
|
58
|
-
|
58
|
+
const ls = spawn("node sample.js");
|
59
|
-
|
59
|
+
ls.on("data", m => log = log + m); // 文字列は小出しに来るので都度log引数に吸い出す
|
60
|
-
|
60
|
+
ls.on("close", code => {
|
61
|
-
|
61
|
+
if (code == 0) {
|
62
|
-
|
62
|
+
log = log || "出力なし";
|
63
|
-
|
63
|
+
message.reply("```\n" + log + "```\n実行時間:" + (Date.now() - before) / 1000 + "秒"); // console.logの表示内容はJavaScriptのコードというわけではないのでjsは削った
|
64
|
-
|
64
|
+
return;
|
65
|
-
|
65
|
+
}
|
66
|
-
|
66
|
+
message.reply("実行時間が5秒を超えたため強制終了しました");
|
67
|
-
|
67
|
+
});
|
68
|
-
|
68
|
+
setTimeout(() => {
|
69
|
-
|
69
|
+
// exitCodeがnullならば、まだ実行中と見なしてプロセスを終了させる
|
70
|
-
|
70
|
+
if (ls.exitCode == null) ls.kill("SIGINT");
|
71
|
-
|
71
|
+
}, 5000);
|
72
|
-
|
72
|
+
}
|
73
|
-
|
73
|
+
}
|
74
74
|
}
|
75
75
|
```
|
76
76
|
|