I have been asked to create a Discord bot that displays a list of guild member usernames and the date they last posted in Discord, it should also display a seperate list of members who have not posted anything at all. In order to achieve this the information is pulled from the Discord API and saved in a JSON file. If a new member joins then the message date is set to 00/00/0000 so I can then use an if statement to pull these members into a seperate list.
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)
Everything works fine in my test server but when I add the bot to the live server the date for any new members is set as the date they join instead of 00/00/0000.
I have ran various tests, added the same bots to my test server incase they were causing some kind of issue and I can't figure out why it works on one server but not the other.