【发布时间】:2021-08-02 22:37:51
【问题描述】:
我被要求创建一个 Discord 机器人,显示公会成员用户名列表和他们最后一次在 Discord 中发布的日期,它还应该显示一个单独的成员列表,这些成员根本没有发布任何内容。为了实现这一点,从 Discord API 中提取信息并保存在 JSON 文件中。如果有新成员加入,则消息日期设置为 00/00/0000,因此我可以使用 if 语句将这些成员拉入单独的列表。
bot.on("ready", async () => {
console.log(`${bot.user.username} is online!`);
const guild = bot.guilds.cache.get('SERVER ID NUMBER');
guild.members.fetch().then(member => {
member.forEach(member => {
let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));
if(!member.user.bot) {
if(!memberArray[member.user.id]) {
memberArray[member.user.id] = {name: member.user.username, date: "00/00/0000"}
}
}
fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
if (err) console.log(err)
})
})
})
});
bot.on("guildMemberAdd", (member) => {
let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));
if(!member.user.bot) {
if(!memberArray[member.user.id]) {
memberArray[member.user.id] = {name: member.user.username, date: "00/00/0000"}
}
}
fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
if (err) console.log(err)
})
});
bot.on("guildMemberRemove", (member) => {
let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));
if(member.user.bot) {
return;
} else {
delete memberArray[member.user.id]
}
fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
if (err) console.log(err)
})
});
bot.on("message", async message => {
if (message.author.bot) return;
const guild = bot.guilds.cache.get('SERVER ID NUMBER')
guild.members.fetch().then(member => {
let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));
member.forEach(member => {
if(member.user.bot) {
return;
}
var d = new Date(message.author.lastMessage.createdTimestamp);
day = d.getDate();
month = d.getMonth() + 1;
date = ("0" + d.getDate()).slice(-2) + "/"
+ ("0" + (d.getMonth() + 1)).slice(-2) + "/"
+ d.getFullYear();
if (message.author.username == memberArray[member.user.id].name) {
memberArray[member.user.id].date = date;
}
})
fs.writeFile("./messages.json", JSON.stringify(memberArray),(err) => {
if (err) console.log(err)
})
})
let prefix = botconfig.prefix;
let messageArray = message.content.split(" ");
let cmd = messageArray[0].toLowerCase();
let args = messageArray.slice(1);
let commandfile = bot.commands.get(cmd.slice(prefix.length));
if (commandfile) commandfile.run(bot, message, args, tools);
});
bot.login(botconfig.token)
在我的测试服务器中一切正常,但是当我将机器人添加到实时服务器时,任何新成员的日期都设置为他们加入的日期,而不是 00/00/0000。
我已经运行了各种测试,将相同的机器人添加到我的测试服务器中,以防它们引起某种问题,我无法弄清楚为什么它在一台服务器上运行而在另一台服务器上运行。
如果有人对它可能是什么或我可以尝试的任何其他测试有任何想法,我将非常感激。
【问题讨论】:
-
这段代码运行良好。然而,由于我们没有剩下的代码,我们不能排除另一个函数的间接影响。您是否尝试一一隔离函数以检查是否没有其他任何东西影响您的文件或变量?您是否在每个步骤中检查了文件的内容以查看日期是否更改以及何时更改?
-
@JackRed 经过更多测试后,我意识到如果我使用我的测试服务器 ID 号,它可以正常工作,但是,一旦我将其更改为其他服务器 ID 号,它就会开始添加错误的日期跨度>
-
` const guild = bot.guilds.cache.get('SERVER ID NUMBER');`
标签: node.js discord discord.js