我想使用漫游器在网站上显示不和谐公会的在线/总人数。
要在网站上显示数据,我想我可以使用jQuery从json文件中提取JSON数据,所以我的朋友创建了一个托管在该网站上的JSON数据库。僵尸程序应在json文件中每3秒在字段"online" "total"
中写入在线成员和总数成员。
问题在于JSON数据不会每3秒更新一次。我尝试查阅discord.js文档,但没有帮助。请注意,我不懂javascript,因此我很难找到一种编写代码的解决方案。
这是漫游器的代码:index.js code 这是config.json和db.json
我认为问题出在setInterval
,因为db.json应该每3秒更新一次,并在http://example.com/db.json处向我显示更新的结果。
此外,db.json中的数据仅在机器人启动时更新。
源代码:
const Discord = require("discord.js");
const config = require("/config.json");
const client = new Discord.Client();
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json')
const db = low(adapter)
const database = require("./db.json")
client.on("ready", () => {
console.log(`
CONNECTED!
[${client.user.tag}]
`)
let onM = client.guilds.get(config.g).members.filter(member => member.user.presence.status !== "offline").size
let totM = client.guilds.get(config.g).memberCount
db.get("members")
.find({id: "1", online: getOnline(), total: getTotal()})
.assign({id: "1", online: onM, total: totM})
.write()
setInterval(() => {
db.get("members")
.find({id: "1", online: getOnline(), total: getTotal()})
.assign({id: "1", online: onM, total: totM})
.write()
}, 3000)
function getOnline() {
return database.members.find(z => z.id === "1").online
};
function getTotal() {
return database.members.find(z => z.id === "1").total
}
})
client.login(config.token)
config.json
{
"token":"BotTOKEN",
"g":"GuildID"
}
db.json
{
"members": [
{
"id": "1",
"online": 51,
"total": 216
}
]
}
答案 0 :(得分:1)
出现此问题的原因是因为require('./db.json')
提取json对象,将其分配一次,然后它再也不会改变。代码运行时,它会更新文件一次(更改在线/总金额),然后您的.find()
将不再起作用,因为database.members.find(z => z.id === "1").total
正在查找旧数据。为什么不每次都写出json:
const Discord = require("discord.js");
const config = require("/config.json");
const client = new Discord.Client();
const fs = require('fs');
client.on("ready", () => {
console.log(`
CONNECTED!
[${client.user.tag}]
`)
const updateUsers = () => {
let onM = client.guilds.get(config.g).members.filter(member => member.user.presence.status !== "offline").size
let totM = client.guilds.get(config.g).memberCount
const json = {
id: "1",
online: onM,
total: totM
};
const toWrite = JSON.stringify(json, null, 2);
fs.writeFileSync('./db.json', toWrite);
};
setInterval(updateUsers, 3000);
updateUsers();
});
client.login(config.token)