【问题标题】:Discord.js bot update activity [duplicate]Discord.js 机器人更新活动 [重复]
【发布时间】:2021-02-17 22:33:22
【问题描述】:

我想在我的 BOT 上创建一个包含各种活动的更新状态。这是我到目前为止所做的代码:

const activities = [
        {
            type : "PLAYING",
            activity : "with the ball"
        },
        {
            type : "WATCHING",
            activity : "your soul"
        }
    ];

    for (var i = 0; i < activities.length; i++) {
        setInterval(() => client.user.setActivity(`${activities[i].activity}`, { type: `${activities[i].type}` }));
    };

当我尝试启动 BOT 时,终端显示

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

可能代码完全错误,但我不太擅长 javascript。有什么建议吗?

【问题讨论】:

  • 你还没有粘贴所有的代码
  • 如果您尝试在 for 循环中仅记录活动 [i].activity,您会得到什么?
  • 操作,现在应该可以了。无论如何,我只放了我正在处理的部分代码
  • var改成let,现在找个帖子解释一下为什么会这样
  • 如果我尝试记录我会得到“与球”和“你的灵魂”

标签: javascript discord discord.js status


【解决方案1】:

setInterval 将强制执行异步操作,但堆栈值仅在循环上下文中有效,因为它是一个指针。您可以先创建另一个变量,javascripts垃圾收集器会注意到“哦,我无法清理这个,我稍后需要它”,所以javascript在他的堆栈中仍然有这个值

for (var i = 0; i < activities.length; i++) {
    var putonstack = activities[i];
    setInterval(() => client.user.setActivity(`${putonstack.activity}`, { type: `${putonstack.type}` }));
};

您也可以通过这样的迭代来完全避免这种情况:

// for (var i = 0, value; value = activities[i]; i++)
for (var value of activities) {
    setInterval(() => client.user.setActivity(`${value.activity}`, { type: `${value.type}` }));
};

并解决您的要求:

const activities = [
      {
          type : "PLAYING",
          activity : "with the ball"
      },
      {
          type : "WATCHING",
          activity : "your soul"
      }
  ];
  
  const timeoutForNms = 10000; // 10 seocnds
  let currentActivity = 0;
  setInterval(() => {
  console.log('set activity to %s type to %s', activities[currentActivity].activity, activities[currentActivity].type);
  client.user.setActivity(`${activities[currentActivity].activity}`, { type: `${activities[currentActivity].type}` });
  currentActivity++;
  if (currentActivity === activities.length) {
      currentActivity = 0;
  }
  }, timeoutForNms);

【讨论】:

  • 它从“玩球”到“看你的灵魂”循环,但卡在那里,不会再变成“玩”
  • 是的,对不起,我也做了一个你想做的工作函数
猜你喜欢
  • 2021-12-14
  • 2021-11-10
  • 2021-05-07
  • 2017-10-31
  • 2021-11-10
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多