使用exec启动Discord.js bot的节点js无法正常运行

时间:2017-11-09 20:02:19

标签: node.js discord.js

所以假设我有2个文件,a.js和b.js,其中a.js是一个简单的node.js脚本,它调用b.js这是一个Discord.js bot。

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运行。我使用最新版本的节点和Discord.js在Windows 10中运行它。谢谢

2 个答案:

答案 0 :(得分:0)

我开始使用b.js运行a.js,除了我将b.js更改为console.log

a.js

!!x

b.js

const { exec } = require('child_process');
exec('node b.js', (err,stdout,stderr) => {
console.log('err: ' + err + '\n stdout: ' + stdout + '\n stderr:' + stderr);
});

然后,当我运行节点a.js时,我得到;

console.log("B was called");

我猜这是一个路径问题,A找不到B相对于它的调用位置?

答案 1 :(得分:0)

我还有另外一次,但通过完整的不和谐机器人设置...

我的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文件没有尾随的前导空格。此外,我将机器人登录代码移动到读取的令牌文件的回调中。

下面的输出示例......

enter image description here

我通过不和谐发送ping,看它是否有效,机器人用pong回复。

下面的截图。 enter image description here

我希望这段代码适合你,让我知道......