首页 > 解决方案 > 使用 Discord.js 每 1 分钟发送一次随机消息

问题描述

我正在尝试setInterval()每分钟发送一次随机消息,但它不起作用。这是我的代码:

var facts = ["1", "2", "3", "4", "5", "6"];
var fact = Math.floor(Math.random() * facts.length);
client.on("ready", () => {
    let channel = client.channels.get("id");
    setInterval(function() {
        channel.send(facts[fact])
    }, 60000)
})

标签: javascriptnode.jsdiscorddiscord.js

解决方案


不确定不和谐部分 - 我将假设该部分工作正常。

通过在 setInterval 函数之外生成随机事实,您将始终获得相同的随机事实。这应该可以解决这个问题:

var facts = ['1', '2', '3', '4', '5', '6']
client.on('ready', () => {
  let channel = client.channels.get('id')
  setInterval(function() {
    var fact = Math.floor(Math.random() * facts.length)
    channel.send(facts[fact])
  }, 60000)
})

一些解释:

在此示例中,您将看到每秒产生一个随机事实。除了随机生成器是在 setInterval 函数之外声明的,你会看到同样的事实。

var facts = ['1', '2', '3', '4', '5', '6']
var fact = Math.floor(Math.random() * facts.length)
setInterval(function() {
  console.log(facts[fact]) // Every second, this will return _the same_ fact.
}, 1000) // Changed to 1s for testing

但是,如果您var fact在 setInterval 函数中移动声明,则会每秒生成一个随机事实:

var facts = ['1', '2', '3', '4', '5', '6']
setInterval(function() {
  var fact = Math.floor(Math.random() * facts.length)
  console.log(facts[fact]) // Every second, this will return a _new random_ fact
}, 1000) // Changed to 1s for testing


推荐阅读