Discord.js v12 如何检查用户是否正在直播

3

我正在使用discord.js v12,希望有一个PresenceUpdate方法,当用户在直播时会显示。我在这里找到了这个,但显然它不起作用。有没有更新的版本?

    client.on('presenceUpdate', (oldMember, newMember) => {
    const channel = oldMember.guild.channels.find(x => x.name === "channel name");
    if (!channel) return;
        let oldStreamingStatus = oldMember.presence.game ? oldMember.presence.game.streaming : false;
        let newStreamingStatus = newMember.presence.game ? newMember.presence.game.streaming : false;

  if(oldStreamingStatus == newStreamingStatus){
    return;
  }

  if(newStreamingStatus){
    if (newMember.presence.game && newMember.presence.game.name === 'game name' || newMember.presence.game.details.match(/keywords in stream/gi)) {
        channel.send(`${newMember.user}, is live URL: ${newMember.presence.game.url}`);
    return; 
    }
  }
});

1
请在请求帮助时提供您尝试过的工作和结果(如果有错误,请也一并提供),以便他人更轻松地帮助您。 - xTrimy
没有错误,就是这样。 - PackOf20
2个回答

4

如何添加代码,使其仅检查特定用户?非常感谢。 - PackOf20
在代码开头添加一个if语句。if (newPresence.user.id == "你的ID") {代码} - Jakye
做完了,现在它可以工作了,但我有一个小问题。我添加了一些代码,如果特定用户正在流式传输,则将消息发送到频道。我将该代码放置在console.log所在的if语句中。基本上,它只会不断地发送消息,而不是只发送一次然后停止。 - PackOf20
@PackOf20 很抱歉让你等待了,我没有收到通知。你需要检查newPresence.guild.id是否等于TextChannel.guild.id,因为presenceUpdate会为每个GuildMember触发一次事件。(例如,如果你和机器人在3个公会中,presenceUpdate事件将被触发3次,每个公会一次)。 - Jakye

0
client.on("voiceStateUpdate", async(oldVoiceState, newVoiceState) => {
    if(newVoiceState.streaming){
        console.log("the user is streaming")
    }
});

这对我有用。PresenceUpdate在流式处理中无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接