繁体   English   中英

discord.js v13 类型错误:无法读取未定义的属性(读取“存在”)

[英]discord.js v13 TypeError: Cannot read properties of undefined (reading 'presence')

我想和我的朋友开玩笑命令禁止正在玩 Roblox 的人或者他是否具有 Roblox 游戏状态。 如果有解决方案,我已经搜索了 inte.net 和堆栈溢出中的所有内容,但我找不到一个有效的解决方案。 这是我的代码:

module.exports = async (client) => {
    const guild = client.guilds.cache.get('877016354581004389');
    if(guild){
        setInterval(async () => {
            if(!guild.me.permissions.has('ADMINISTRATOR')) return;
            const channel = guild.channels.cache.get('877016354581004392');
            if(!channel) return console.log('ANNOUNCEMENT CHANNEL NOT FOUND...')
            let bannedAmount = 0;
            await guild.members.fetch().then(members => {
                members.forEach(member => {
                    for(const allMember of Object.keys(member)){
                        if(allMember.user.presence.activities){
                            const activity = allMember.user.presence.activities[0]
                            if(activity.name.toLowerCase() == "roblox"){
                                channel.send(`${allMember} got banned because he's playing ROBLOX!!`)
                                allMember.ban({ reason: `he played roblox lol`});
                                bannedAmount = bannedAmount + 1
                                break;
                            }
                        }
                    }
                })
            });

            let members;
            if(bannedAmount > 1) members = 'members';
            let kid;
            if(bannedAmount > 1) kid = 'kids';

            if(bannedAmount <= 0 || null){
                console.log(`No member banned for playing Roblox...`);
            } else if(bannedAmount > 0) {
                channel.send(`${bannedAmount} ${kid || 'kid'} got banned in this server for playing Roblox. Don't do it kids!`)
                console.log(`${bannedAmount} ${members || 'member'} got banned for playing Roblox...`)
            }
        }, 20000);
    }
}

我不讨厌玩 Roblox 的家伙,他们只是在闲逛,哈哈

PS:我已经在 discord 开发网站和 index.js 文件中启用了意图,并且还使用了<member>.presence.activities但看起来只有用户具有存在属性。

那么,问题是GuildMember#presence返回或Presence class OR undefined ,因为它是一个可选属性。 您在代码中所做的是获取可能不存在的用户的存在属性,这就是为什么allMember.user.presence返回 undefined 和allMember.user.presence.activities[0]的原因。 另请记住,您使用成员的用户,但在 GuildMembers 而不是用户上存在 go。

调试:

  • 只需使用allMember而不是allMember.user ,这样您就可以使用GuildMember而不是User的存在,此后具有存在的 Member 也将返回存在数据。
  • 添加一个 if 语句来控制成员是否存在,这样您就不会再次遇到相同的错误。
  • 我不知道你是否对此有异议,但是如果一个成员有多个存在并且阵列中的第一个存在不是 Roblox,但是例如阵列中的第二个存在是 Roblox,则该成员不会被禁止.

我希望这对你有帮助,如果你有任何问题,请联系我 Discord ~ Iliannnn#0001

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM