私はUbuntuサーバー上でNode.JSで実行中の2つの違反ボット(app.jsとactivity.js)を持っています。私が直面している問題は、両方が動作しているときにactivity.jsだけがファイルを変更できることです。ファイルはusers.JSONです。 app.jsのコード:2つのNode.JSスクリプトが1つの.JSONファイルで読み書きできますが、最初のスクリプトはファイルを変更できません
const Discord = require("discord.js")
var moment = require("moment")
var data_users = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data_users)
...
for (var i in duos) {
if (arxeio[duos[i].username]) {
console.log(`before: ` + arxeio[duos[i].username])
arxeio[duos[i].username]+=15
console.log(`after: ` + arxeio[duos[i].username])
} else {
arxeio[duos[i].username]=15
}
}
fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
if (err) throw err
console.log('entered')
})
そしてActivity.jsためのコードは次のとおりです。
const Discord = require("discord.js");
var fs = require('fs');
var data = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data)
...
var kuklos = setInterval(function(done) {
client.guilds.get('323921290543235073').channels.forEach(function(kanali, kanaliID) {
if (kanali.type === 'voice' && !kanali.name.includes("AFK")) {
kanali.members.forEach(function(melos, melosID) {
let xristis = melos.user.username;
if (arxeio[xristis]) {
arxeio[xristis]++;
} else {
arxeio[xristis] = 1
}
fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
if (err) throw err
})
})
}
})
}, 60*1000);
、デュオは、メンバーの表です。 問題は、Activity.jsが実行されていないときに動作するため、App.jsのfs.writeFileであると結論付けました。 activity.jsが実行されているとき、「入力済み」は実際にapp.jsに記録されますが、ファイルは変更されません。また、+ =コマンドの上下の両方のコマンドは、変更されていますがusers.Jsonファイルには保存されていないことを示しています。どんな考えに責任があるのでしょうか? (私のskillz:Pを除く)
O_NONBLOCKモードでfs.close()またはfsを試しましたか? – uglypointer
私はそれを試み、あなたに知らせるでしょう!ありがとう! –