首页 > 解决方案 > discord.js v12 检查用户是否开始流式传输

问题描述

这按预期工作,直到它崩溃。每次用户开始流式传输时,它都会发布他们的流式链接。问题是,在 5 分钟后,机器人崩溃了,我得到了下面的错误。

let oldStreamingStatus = oldMember.activities.find(activity =>  activity.type  === 'STREAMING') ? true : false;
                                   ^
TypeError: Cannot read property 'activities' of undefined

我的代码如下。

client.on('presenceUpdate', (oldMember, newMember) => {

let oldStreamingStatus = oldMember.activities.find(activity => activity.type === 'STREAMING') ? true : false;
let newStreamingStatus = newMember.activities.find(activity => activity.type === 'STREAMING') ? true : false;

if (oldStreamingStatus == newStreamingStatus) {
    return;
}

if (newStreamingStatus) {
    if (newMember.member.roles.cache.some(r => ["Raider","Trial"].includes(r.name))) {
        const activity = newMember.activities.find(activity => activity.type === 'STREAMING')
        // console.log(newMember.activities)
        client.channels.cache.get("731911793257087006").send(`Hey! ${activity.url} is streaming!`);
        return;
    } else
        return;
    }});

我在下面尝试了这段代码。但是,如果有人改变了他们的活动,或者他们目前正在流媒体,然后开始收听 Spotify,它会发布另一条消息。

  client.on("presenceUpdate", (oldPresence, newPresence) => {

  if (!newPresence.activities) return false;

  newPresence.activities.forEach(activity => {
    if (activity.type == "STREAMING") {
        console.log(`${newPresence.user.tag} is streaming at ${activity.url}.`);
       };
        });
   });

似乎我需要 10 声望才能以正确的方式发布图片。我为此道歉。

标签: javascriptdiscorddiscord.js

解决方案


如果我们遵循 discord.js 文档,我们可以看到“oldMember”是可选的:

在此处输入图像描述

异常消息说:

无法读取未定义的属性“活动”

添加额外的检查:

client.on('presenceUpdate', (oldMember, newMember) => {
    if(!oldMember){
        //skip actions or get streaming status based only on newMember activities...
    }

在其余代码之前。


推荐阅读