2017-11-09 3 views
1

Also sagen wir, ich habe 2 Dateien, a.js und b.js, wobei a.js ist ein einfaches node.js Skript, das b aufruft. js ist ein Discord.js-Bot.Knoten js, diskord.js Bot mit exec starten, läuft nicht richtig

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); 

Als ich a.js laufen, ist der einzige Ausgang ist

err: 
stdout: 
stderr: 

a.js dann beendet und es scheint, als ob b.js nie ausgeführt wurde. Ich habe mich gefragt, warum das passiert und warum. Zusätzlich, wenn jemand sich fragt, warum ich das mache, habe ich das als Teil eines größeren Drehbuchs und ich habe das Problem auf diese Weise reduziert. Und der Hauptteil ist, dass b.js von exec ausgeführt werden muss. Ich verwende dies in Windows 10 mit der neuesten Version von Knoten und Discord.js. Danke

Antwort

0

Ich hatte ein anderer an diesem gehen, aber wenn sie durch die volle Setup Disharmonie bot ...

meine a.js so aussieht ...

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}`); 
}); 

Mein b.js sieht wie folgt aus ...

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); 
}); 

auf b.js, musste ich utf8 die Datei zu lesen, und sicherstellen, dass meine token.txt Datei hatte keine schleppender, führender Leerraum. Außerdem habe ich den Bot-Login-Code in den Callback der gelesenen Token-Datei verschoben.

Ausgabe Beispiel unten ...

enter image description here

Ich habe über Ping auf Zwietracht zu sehen, ob es funktioniert, und die Bot reagierte mit pong.

Screenshot unten. enter image description here

Ich hoffe dieser Code funktioniert für Sie, lassen Sie mich wissen ...

0

hatte ich gehen am a.js mit b.js läuft, außer ich b.js geändert einfach

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

console.log("B was called"); 

Dann, wenn ich Knoten a.js laufen lasse, bekomme ich;

node .\a.js 
err: null 
stdout: B was called 

stderr: 

Ich vermute, es gibt einen Pfad Problem, bei dem A nicht von B in Bezug auf, wo es wird genannt finden kann?

+0

Das ist nicht das Problem, das ich habe, denn wenn ich das tue, was Sie getan haben, funktioniert es gut – BElgy

+0

Keine Sorge, ich habe eine andere Antwort unten gepostet, hoffe es hilft :) –