【发布时间】:2022-06-20 16:13:51
【问题描述】:
我不知道如何让我的不和谐机器人能够在加入日期后的特定时间后分配角色。有人建议我使用 node-cron,但我不知道如何正确实现它,因为机器人似乎忽略了代码。有什么想法吗?
【问题讨论】:
标签: discord discord.js
我不知道如何让我的不和谐机器人能够在加入日期后的特定时间后分配角色。有人建议我使用 node-cron,但我不知道如何正确实现它,因为机器人似乎忽略了代码。有什么想法吗?
【问题讨论】:
标签: discord discord.js
你可以使用setTimeout,例如你可以这样使用:
client.on("guildMemberAdd", member => {
setTimeout(() => {
// Add role to member
}, 1000 * 60 /* Time in ms here */);
});
更多关于setTimeout的信息
【讨论】:
最好的方法是保存加入日期,如果join date - current date >= necessary time,则在另一个循环的 cron 中修改。
我推荐这种方式,因为如果你使用setTimeout或类似的方法,当你的机器人关闭时,这个动作会丢失,永远不会执行。
为此,您需要将这些数据存储在外部(在数据库中,甚至在文本文件中)。
【讨论】:
这完全取决于他们需要在公会中待多长时间,如果说几分钟左右,那么上述两个答案都可以工作(如果他们展示了如何工作可能会有所帮助)否则 cron 工作效果很好,不要进入任何事件监听器。因此,您可以将其添加到主 bot.js 文件中。
密钥 - 对于其他方法,您可以使用此 site 来构建您的密钥
every min = '*/1 * * * *'
every hour = '0 */1 * * *'
every day @ midnight = '0 0 * * *'
const cron = require('node-cron');
// as example runs every min
cron.schedule('*/1 * * * *', function () {
const guild = client.guilds.cache.get(guildID);
guild.memmbers.cache.fetch().forEach(member => {
if (member.roles.cache.has(roleID)) {
return;
} else {
// 2 months as an example is 5259600000
if (member.joinedTimestamp - new Date().getTime() >= 5259600000) {
member.roles.add(roleID)
}
}
})
});
【讨论】:
我使用了类似的代码来获取用户。但得到以下错误。你能解释一下我错过了什么吗?
const guild = client.guilds.cache.get('<ID>');
guild.memmbers.cache.fetch().forEach(member => {
console.log(member)
});
guild.memmbers.cache.fetch().forEach(member => {
^
TypeError: Cannot read properties of undefined (reading 'memmbers')
【讨论】: