尝试让Bot根据JSON文件在特定频道中发布

时间:2020-10-17 12:28:15

标签: node.js json discord discord.js

该机器人会将数据保存到JSON文件中,但我不知道如何回调该数据,因此该机器人会记住将消息发布到的正确通道。

bot.on("message" , (message) =>{
if (message.content.startsWith ("!config enable")) {
  editedmessage = message.content.slice (15);

bot.msgs = {
   channelName: editedmessage
}

fs.writeFile ("./storage/clanConfig.json", JSON.stringify (bot.msgs, null, 4), (err) => {
  if (err) throw err;})
  message.channel.send ("channel saved");
}

let channel = (channelName);
let counter = 0;

if(++counter === 10){
      bot.channels.cache.get(channelName).send(`10 messages were sent`)
        counter = 0;
    }
}); 

1 个答案:

答案 0 :(得分:0)

我会进行这些更改。

  • counter移动到事件处理程序之外。
    无论如何,您都不想将所有消息的计数器都设置为0。
  • 使用message.content.split(/\s+/)[2]从消息中获取频道名称。
    这对多余的空格("!config enable bla bla")宽容,并且只接受“启用”之后的第一个单词。
  • 添加一个确定新频道名称是否有效的函数。
    不要盲目接受用户输入,请务必进行有效性检查。
  • 使用writeFileSync将配置写入磁盘。
    使用这么小的文件,不会有任何明显的延迟,并且可以确保没有竞争条件(否则.send()可能会在配置文件完成写入之前发生)。
  • 在需要时直接使用配置变量bot.msgs.channelName,而不是维护单独的channelName变量。

代码:

bot.msgs = {
  channelName: "last channel from config file, otherwise default value"
};

var counter = 0;

bot.on("message", message => {
  if (message.content.startsWith("!config enable")) {
    let newChannel = message.content.split(/\s+/)[2];

    if (isValid(newChannel)) {
      bot.msgs.channelName = newChannel;
      fs.writeFileSync("./storage/clanConfig.json", JSON.stringify(bot.msgs, null, 4)
      message.channel.send("channel saved");
      counter = 0;
    }
  } 

  if (++counter === 10) {
    bot.channels.cache.get(bot.msgs.channelName).send(`10 messages were sent to {bot.msgs.channelName}.`)
    counter = 0;
  }
});