假设我有 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 中使用最新版本的 Node 和 Discord.js 运行此程序。谢谢
最佳答案
我又尝试了一次,但是当完成完整的不和谐机器人设置后......
我的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
文件没有尾随、前导空格。另外,我将机器人登录代码移至 token 文件读取的回调中。
下面的输出示例...
我在不和谐上发送了 ping 来看看它是否有效,机器人用 pong 响应。
我希望这段代码对您有用,请告诉我...
关于node.js - Node js,使用 exec 启动 Discord.js 机器人,无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210575/