如何使用 discord.js 记录自定义状态更新?

时间:2021-02-16 20:15:36

标签: discord.js

我一直在研究列入黑名单的单词选项,并在公会成员设置包含列入黑名单的单词的自定义状态时进行日志记录。但是,我遇到了一个问题,我有时会获得与新状态相同的旧状态(仅适用于某些公会,其他公会都可以)。我的代码在这里:

client.on("presenceUpdate", (oldPresence, newPresence) => {
    const newCustomStatus = newPresence.activities[0].state
    const oldCustomStatus = oldPresence.activities[0].state
    console.log('old status: ' + oldCustomStatus)
    console.log('new status: ' + newCustomStatus)
})

oldCustomStatus 在某些公会中有时与 newCustomStatus 相同,这使得无法记录旧状态。它只发生在成员和机器人共享的公会中的一半左右。 我想在机器人启动时缓存所有状态,并且只切换一次事件,这样我就可以读取新旧状态,因为总是至少有一个公会具有正确的信息。但是,我无法对列入黑名单的单词运行每个公会检查,因为我不知道从用户对象读取公会 ID 的方法。
有什么办法可以修复破碎的新旧状态?或者获取用户和机器人共享的公会 ID 列表的方法?
谢谢

1 个答案:

答案 0 :(得分:0)

我还通过记录公会 ID 发现它触发了不止一次。这似乎解决了一半的问题,因为下一次火灾将新状态作为旧状态和新状态。不知道为什么它会触发不止一次。
记录器的一个简单解决方案是使用 if 语句并比较新旧状态,只有在它们不同时才记录它们:

client.on("presenceUpdate", (oldPresence, newPresence) => {
    const newCustomStatus = newPresence.activities[0].state
    const oldCustomStatus = oldPresence.activities[0].state
    if(newCustomStatus != oldCustomStatus) {
        console.log('old status: ' + oldCustomStatus)
        console.log('new status: ' + newCustomStatus)
    }
})

不知道为什么它会触发不止一次,这个解决方案对我来说是 100% 的。