【问题标题】:Trying To Get Bot To Post In Specific Channel Based Off A JSON File试图让机器人在基于 JSON 文件的特定频道中发布
【发布时间】:2021-01-31 18:13:46
【问题描述】:

机器人会将数据保存到 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;
    }
}); 

【问题讨论】:

    标签: node.js json discord discord.js


    【解决方案1】:

    我会做出这些改变。

    • 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;
      }
    });
    

    【讨论】:

    • bot.channels.cache.get(bot.msgs.channelName).send(10 消息已发送到 {bot.msgs.channelName}。) ` 似乎引发了错误。
    • TypeError: bot.msgs.channelName.send 不是函数
    • 尝试将频道添加到数据库时也会出现此错误ReferenceError: isValid is not defined
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2018-05-07
    • 2020-10-04
    • 2023-01-17
    相关资源
    最近更新 更多