Node js,使用 exec 启动 Discord.js bot,不正确 运行
Node js, starting Discord.js bot using exec, doesn’t properly run
假设我有 2 个文件,a.js 和 b.js,其中 a.js 是一个简单的 node.js 脚本,它调用 b.js 这是一个Discord.js 机器人。
a.js
const { exec } = require(‘child_process’);
exec(‘node b.js’, (err,stdout,stderr) => {
console.log(‘err: ‘ + err + ‘\n stdout: ‘ + stdout + ‘\n stderr:‘ + stderr);
});
b.js
const Discord = require(‘discord.js’);
const fs = require(‘fs’);
var bot = new Discord.Client();
var token;
fs.readFile(‘token.txt’,(err,data) => {
if(err){console.log(err); process.exit(0);}
token = data;
});
bot.on(‘ready’,()=>{console.log(‘ready’);});
bot.on(‘message’, message => {
if(message.content == ‘ping’){
message.channel.send(‘pong’);
}
});
bot.login(token);
当我运行a.js时,唯一的输出是
err:
stdout:
stderr:
a.js 然后终止,看起来好像 b.js 永远不会 运行。
我想知道为什么会发生这种情况以及为什么。
此外,如果有人想知道我为什么要这样做,我将它作为一个更大的脚本的一部分,并将问题归结为这个。主要部分是 b.js 必须是来自 exec 的 运行。我在 Windows 10 中 运行 使用最新版本的节点和 Discord.js 对此进行了调整。谢谢
我用 b.js 在 运行ning a.js 试了一下,除了我把 b.js 简单地改成了 console.log
a.js
const { exec } = require('child_process');
exec('node b.js', (err,stdout,stderr) => {
console.log('err: ' + err + '\n stdout: ' + stdout + '\n stderr:' + stderr);
});
b.js
console.log("B was called");
然后当我 运行 节点 a.js 我得到;
node .\a.js
err: null
stdout: B was called
stderr:
我猜测存在路径问题,A 无法找到 B 相对于它被调用的位置?
我又做了一次尝试,但是当完成完整的 discord 机器人设置时...
我的a.js
看起来像这样...
const { spawn } = require('child_process');
const child = spawn('node',['b.js']);
process.stdin.pipe(child.stdin);
child.stdout.on('data', (data) => {
console.log(`child stdout:\n${data}`);
});
child.stderr.on('data', (data) => {
console.log(`child stderr:\n${data}`);
});
我的 b.js
看起来像这样...
const Discord = require('discord.js');
const fs = require('fs');
var bot = new Discord.Client();
var token;
fs.readFile('token.txt', {encoding: 'utf8'}, (err,token) => {
if(err){console.log(err); process.exit(0);}
bot.on('ready',()=>{
console.log('ready');
});
bot.on('message', message => {
if(message.content == 'ping'){
message.channel.send('pong');
}
});
bot.login(token);
});
在 b.js
上,我必须 utf8
读取文件,并确保我的 token.txt
文件没有尾随和前导白色 space。另外,我将机器人登录代码移到了读取的令牌文件的回调中。
下面的输出示例...
我在 discord 上发送了 ping 看它是否有效,bot 回应了 pong。
截图如下。
我希望这段代码对你有用,让我知道...
假设我有 2 个文件,a.js 和 b.js,其中 a.js 是一个简单的 node.js 脚本,它调用 b.js 这是一个Discord.js 机器人。
a.js
const { exec } = require(‘child_process’);
exec(‘node b.js’, (err,stdout,stderr) => {
console.log(‘err: ‘ + err + ‘\n stdout: ‘ + stdout + ‘\n stderr:‘ + stderr);
});
b.js
const Discord = require(‘discord.js’);
const fs = require(‘fs’);
var bot = new Discord.Client();
var token;
fs.readFile(‘token.txt’,(err,data) => {
if(err){console.log(err); process.exit(0);}
token = data;
});
bot.on(‘ready’,()=>{console.log(‘ready’);});
bot.on(‘message’, message => {
if(message.content == ‘ping’){
message.channel.send(‘pong’);
}
});
bot.login(token);
当我运行a.js时,唯一的输出是
err:
stdout:
stderr:
a.js 然后终止,看起来好像 b.js 永远不会 运行。 我想知道为什么会发生这种情况以及为什么。 此外,如果有人想知道我为什么要这样做,我将它作为一个更大的脚本的一部分,并将问题归结为这个。主要部分是 b.js 必须是来自 exec 的 运行。我在 Windows 10 中 运行 使用最新版本的节点和 Discord.js 对此进行了调整。谢谢
我用 b.js 在 运行ning a.js 试了一下,除了我把 b.js 简单地改成了 console.log
a.js
const { exec } = require('child_process');
exec('node b.js', (err,stdout,stderr) => {
console.log('err: ' + err + '\n stdout: ' + stdout + '\n stderr:' + stderr);
});
b.js
console.log("B was called");
然后当我 运行 节点 a.js 我得到;
node .\a.js
err: null
stdout: B was called
stderr:
我猜测存在路径问题,A 无法找到 B 相对于它被调用的位置?
我又做了一次尝试,但是当完成完整的 discord 机器人设置时...
我的a.js
看起来像这样...
const { spawn } = require('child_process');
const child = spawn('node',['b.js']);
process.stdin.pipe(child.stdin);
child.stdout.on('data', (data) => {
console.log(`child stdout:\n${data}`);
});
child.stderr.on('data', (data) => {
console.log(`child stderr:\n${data}`);
});
我的 b.js
看起来像这样...
const Discord = require('discord.js');
const fs = require('fs');
var bot = new Discord.Client();
var token;
fs.readFile('token.txt', {encoding: 'utf8'}, (err,token) => {
if(err){console.log(err); process.exit(0);}
bot.on('ready',()=>{
console.log('ready');
});
bot.on('message', message => {
if(message.content == 'ping'){
message.channel.send('pong');
}
});
bot.login(token);
});
在 b.js
上,我必须 utf8
读取文件,并确保我的 token.txt
文件没有尾随和前导白色 space。另外,我将机器人登录代码移到了读取的令牌文件的回调中。
下面的输出示例...
我在 discord 上发送了 ping 看它是否有效,bot 回应了 pong。
截图如下。
我希望这段代码对你有用,让我知道...