如何解决试图从我的公会中获得最不活跃的成员
我正在使用 javascript 和 discord.js v12 n 尝试制作 !inactive
cmd,它从我的服务器中获取最不活跃的成员,然后将它们静音。当我尝试 console.log(member)
时,它说“未定义”请帮忙。
代码:
module.exports = {
name: "inactive",description: "no",async execute(message,args,command,client,Discord) {
if (!message.member.roles.cache.find(r => r.name === "Isäntä")) return message.channel.send("No perms")
let userit = new Map()
let time = ['21600000','10800000','7200000','3600000','14400000','18000000']; //1-6h
let muterole = message.guild.roles.cache.find(r => r.name === 'Muted') //mute role
message.guild.members.cache.forEach(member => {
if(member.roles.highest != message.guild.roles.cache.get("706922406257754132")) return;
userit.set(member.id,member)
});
if(userit.size == 0) return message.channel.send("None of users met requirements")
const inactiveOnes = new Map()
userit.forEach(member => {
if (!member.lastMessage) return inactiveOnes.set(member.id,member)
if (member.lastMessage.createdTimestamp <= Date.now() - 1209600000) return;
inactiveOnes.set(member.id,member)
});
if(inactiveOnes.size == 0) return message.channel.send("None of users met requirements")
let random = Math.floor(Math.random() * 4)+1
let random_time = time[Math.floor(Math.random() * time.length)]
for(let i = 0; i < random; i++ ){
const keys = inactiveOnes.keys();
let random2 = Math.floor(Math.random() * keys)
const member = keys[random2];
console.log(member)
console.log(keys)
// member.roles.add(muterole.id)
message.channel.send(`${member} you have been muted for being inactive! (Time: ${random_time}ms)`)
setTimeout(() => {
// member.roles.remove(muterole.id)
message.channel.send(`${member} you have been unmuted!`)
},random_time)
}
}
}
解决方法
您错过了底部 for 循环中的 .length
。
const keys = inactiveOnes.keys();
let random2 = Math.floor(Math.random() * keys.length);
const member = keys[random2];
console.log(member) console.log(keys)
如果没有 .length
,random2
会设置为 NaN
,从而导致问题。
正如 theusaf 提到的,您在获取随机数时错过了 .length
。
const random2 = Math.floor(Math.random() * keys.length);
然而,即使您得到一个数字,member
仍将是 undefined
。这是因为 inactiveOnes.keys()
不返回数组,它返回一个 MapIterator
。如果您想使用数组功能,可以执行以下两种操作之一。
// 1:
const keys = inactiveOnes.keyArray();
// 2:
const keys = [...inactiveOnes.keys()];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。