如何使用间隔在服务器中的所有人

时间:2019-12-11 11:32:02

标签: node.js discord discord.js

我想给建议服务器中的随机人每10分钟间隔dm。当我的机器人将所有内容都收录完后,他会发送一条消息,说明已完成。

这是我的代码,但是不起作用。

if (message.guild && message.content.startsWith('dmall'))


    var ServerID = bot.guilds.get("653024542759059456");

  var interval = setInterval(function () {

    let text = message.content.slice('dmall '.length);
    message.guild.members.forEach(member => {
      if (member.id != bot.user.id && !member.user.bot) member.send(text);

      //stop the interval
      clearInterval(interval);
      //here you can handle the all done logic
      console.log("I'm done, mate!");


    }, 60000);
  });

1 个答案:

答案 0 :(得分:1)

首先,您忘记了});方法的结束forEach

我已解决该问题:

setInterval(() => {
  var guildList = bot.guilds.array();
  guildList.forEach(member => {
    member.send("test");
  });
}, 600000);

但是上面的代码将“ test”发送到行会数组中的每个成员。我不确定您是否要选择一个随机数组并将其仅发送给他,如果是这种情况,可能会起作用:

setInterval(() => {
  var guildList = bot.guilds.array();
  let member = guildList[Math.floor(Math.random() * guildList.length)];
  member.send("test");
}, 600000);

那只是从guildList数组中只选择一个随机元素,然后向他发送一条消息。我不确定这是否能解决您的问题,因为我没有整个背景。

更新: 这是一种全局处理guildList,弹出随机用户并在所有成员都发送完消息后发送消息以完成操作的方法。

const guildList = bot.guilds.array();

let interval = setInterval(() => {
    //pick a random member and remove it from the list  
    let member = guildList.splice(Math.floor(Math.random() * guildList.length), 1);
    member.send("test");
    //stop the interval
    if(guildList.length == 0){ 
        clearInterval(interval);
        //here you can handle the all done logic
        console.log("I'm done, mate!");
    }
}, 600000);