每 group/guild 在 Discord 上每隔 x 小时发送一次消息

Send message every x hrs on Discord in every group/guild

目前我正在开发一个事件机器人,该机器人在 Discord 中的几个小组中使用。 所以现在我有这个代码:

if (command === "init")
  {
    //var d = new Date();
    //var n = d.getHours();
    message.channel.send("BunnBot starting...");
    var interval = setInterval (function () {
  message.channel.send("123")
  //message.channel.send(n);
}, 30 * 1000);
  }

问题是,此命令仅适用于当前组,这意味着在任何其他组中我也必须使用 init 命令。

我该如何解决?如何让我的 Bot 向每个组发送消息?

编辑: 好的,我稍微更改了代码,现在我正在使用它: 好的,这是我的新代码,现在我遇到了错误消息,发送不是函数

client.on("ready", () => {
console.log('Logged in as BunnyBot');
setInterval (function () {
    client.guilds.forEach(() => { //for each guild the bot is in
        let defaultChannel = "";
        client.guilds.forEach((channel) => {
            if(channel.type == "text" && defaultChannel == "") {
           if(channel.permissionsFor(guild.me).has("SEND_MESSAGES")) {
               defaultChannel = channel;
           }
            }
        })
        message.defaultChannel.send("Message here"); //send it to whatever channel the bot has permissions to send on
        console.log("Sending Messages");
   })
}, 1 * 1000);
})

问题:现在我收到一条错误消息,发送不是函数。

暂时忽略 #general-channel 的情况,你可以完成所有的公会发帖,方法是:

编辑:

const Discord = require("discord.js");
const bot = new Discord.Client();
bot.on("ready", () => {
    bot.guilds.forEach((guild) => { //for each guild the bot is in
         let defaultChannel = "";
         guild.channels.forEach((channel) => {
               if(channel.type == "text" && defaultChannel == "") {
               if(channel.permissionsFor(guild.me).has("SEND_MESSAGES")) {
                   defaultChannel = channel;
               }
               }
         })
         setInterval (function () {
              defaultChannel.send("Message here") //send it to whatever channel the bot has permissions to send on
         }, 30 * 1000);
   })
})

此代码应该向您的机器人所在的所有公会发送您想要的消息以及您想要的时间间隔,尽管可能不是您想要的频道

node.js 版本 12.x 更改了一些东西,要修复您的代码,您需要编辑一些东西:

  bot.guilds.cache.forEach((guild) => { //for each guild the bot is in
    let defaultChannel = "";
    guild.channels.cache.forEach((channel) => {
          if(channel.type == "text" && defaultChannel == "") {
          if(channel.permissionsFor(guild.me).has("SEND_MESSAGES")) {
              defaultChannel = channel;
            }
          }
    })
    setInterval (function () {
         defaultChannel.send("Message here") //send it to whatever channel the bot has permissions to send on
    }, 5000);})

只是一个简单的解决方案,可能不是最好的解决方案,但它是一个解决方案。

while(0 == 0) {
    channel = client.channels.cache.get('channel-id');
    channel.send("message you want to sent")
    sleep.sleep(seconds);
}

您将需要名为 sleep 的 npm 包

npm 安装睡眠