【问题标题】:Detect if a bot account goes offline/online检测机器人帐户是否离线/在线
【发布时间】:2020-07-13 18:21:03
【问题描述】:

我正在使用presenceUpdate 事件,但是它触发了两次,我被告知它正在发射我与机器人共享的服务器数量。目前我的代码输出online 两次。我不确定如何让它只输出一次。

if (newPresence.userID === botid) {
  if (newPresence.status === 'online') {
    console.log(newPresence.status); // Should output 'online' currently outputs 'online online'

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    我注意到这个问题仍未解决,所以我会为您解决。 所以上面的答案是正确的,但是,它们都没有说明机器人为此需要的意图。

    你看,presenceUpdate 不会发出,除非你启用了存在权限网关意图。对于少于 100 个服务器中的机器人,可以通过翻转开关在开发人员门户上进行切换。否则,您需要为不和谐打开一张票以启用存在意图。

    启用 Intent 后,试试这个:

    client.on(`presenceUpdate`,(member)=>{
        console.log(`${member.user.username} has updated their presence.`)
    })
    

    然后尝试将您的状态更改为 dnd。如果你启用它,你应该看到 [your tag] has updated their presence.。否则你可能做错了什么。

    【讨论】:

      【解决方案2】:

      我只是通过比较状态来做到的。

        if (oldPresence.status === newPresence.status) return;
      

      【讨论】:

        【解决方案3】:

        根据discord.js' docspresenceUpdateEmitted whenever a guild member's presence (e.g. status, activity) is changed.

        所以它与你与机器人有多少共享服务器无关。

        您可以尝试使用Presence#status 每 5 分钟检查一次客户端的 ping,您可以编写如下函数:

        function checkStatus() {
            if (client.users.fetch(botID).presence.status === "online" ) {
           return true;
        } else {
           return false;
        }
        }
        

        然后你可以运行这个:

        client.setInterval(() => checkPing(), 300000);
        

        300000 是以毫秒为单位的 5 分钟,因此它会每 5 分钟运行一次函数。

        你可以阅读更多关于client.setInterval()

        【讨论】:

        • 我相信由于它也在寻找活动变化,所以它会发布一次状态和活动的结果,这里是console.log(newPresence)pastebin.com/zzZLFkWv
        • 您可以在 activity 中看到更改,比较您的 pastebin 链接中的第 65 行和第 132 行。
        • 我知道这些变化,我想要的是状态,即online。但是,目前由于活动变化,它在线打印两次。 64 号线和 131 号线
        • 我很困惑,你为什么给我检查 ping 的代码,我想检测我的另一个机器人是否离线。
        • 试试我刚刚编辑的解决方案,我想它对你有用。您还可以更改该功能以在您知道它处于离线状态后执行任何操作,例如将嵌入发送到频道。
        猜你喜欢
        • 2017-05-03
        • 2021-04-04
        • 1970-01-01
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多