试图从我的公会中获得最不活跃的成员

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)

没有.lengthrandom2 设置为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 的请求

公会成员不再填充,不能 GetUserAsync 因为它只返回机器人而没有其他人

无法通过 Discordjs v13 获取所有公会成员

成员加入公会时如何添加角色

我如何循环遍历数据库中的每个公会成员(quick.db)

有没有办法让机器人知道公会成员何时登录不和谐服务器?