【问题标题】:Exclude mobile updates from "presenceUpdate" event?从“presenceUpdate”事件中排除移动更新?
【发布时间】:2020-01-07 16:24:27
【问题描述】:

在 discord.js 中使用“presenceUpdate”事件时,当状态从“nothing”变为“streaming”时成功触发。但是,似乎如果我在触发事件后打开移动客户端,它会再次发生,并具有完全相同的“oldUser”和“newUser”。我正在使用 VSCode 并在本地运行我的 node.js 实例,因此我可以使用断点进行调试。

client.on("presenceUpdate", (oldUser, newUser) => {
    //Exclude title changes and typing
    if(oldUser.presence.game != null && oldUser.presence.game.streaming) {
        return;
    }

    if(oldUser.displayName === "Test" && newUser.presence != null){
        if(newUser.presence.game != null && newUser.presence.game.streaming){
            client.channels.get("channelId").send("@everyone Test has started streaming!");               
        }
    }
});

如您所见,我已经尝试使用第一个 if 块过滤这个“双重触发器”。这不成功,因为看起来第一次触发,新老用户和第二次触发完全一样。我能说的唯一区别是“clientStatus”现在包含“mobile: online”作为属性。有什么方法可以从代码方面首先防止这种双重触发,还是我需要对我的 if 语句进行更好的过滤?

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    Presence.clientStatus;它会返回状态适用于什么类型的设备。

    使用此属性,您可以将旧用户的客户端与新用户的客户端进行比较,如果发生变化则返回。

    if (oldUser.presence.clientStatus !== newUser.presence.clientStatus) return;
    

    【讨论】:

    • 我相信这是拼图的一部分。但是,在添加了这个之后对其进行了测试,我仍然得到了双输出。我开始认为它实际上不一定与移动版本有关,而是 discord.js 的错误。我会继续挖掘。
    • 为清楚起见,这是 discord.js 版本 11.5.1。 github.com/discordjs/discord.js/issues/2481我找到了这个,这解释了我遇到的确切问题,但它似乎又回来了?
    • @Clavaat 该事件仍会针对客户端状态更改发出,因为它是 Presence 的一个属性,但此解决方案应该只是停止侦听器。
    • "...有 2 个 [D]iscord 实例正在进行,因此它击中了该事件发射器两次。"如果您的存在来自移动桌面客户端或网络客户端,这可能会导致您的问题。对我来说这似乎是一个错误。
    • 我确保在尝试触发事件时没有连接到移动客户端,即使添加了条件,它仍然会重复发布。
    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2019-08-12
    • 2016-08-06
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多