试图从我的公会中获得最不活跃的成员
Posted
技术标签:
【中文标题】试图从我的公会中获得最不活跃的成员【英文标题】:Trying to get the most inactive members from my guild 【发布时间】:2021-08-20 21:15:07 【问题描述】:我正在使用 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_timems)`)
setTimeout(() =>
// member.roles.remove(muterole.id)
message.channel.send(`$member you have been unmuted!`)
, random_time)
【问题讨论】:
【参考方案1】:您错过了底部 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
,导致问题。
【讨论】:
【参考方案2】:正如 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()];
【讨论】:
谢谢Lioness100,不过,我不需要任何帮助,它已经修复了。以上是关于试图从我的公会中获得最不活跃的成员的主要内容,如果未能解决你的问题,请参考以下文章
使用 c++ 的代码块我试图从我的类中打印出一个访问器函数。错误表明对成员 get_address 的请求