当前缀设置为超过 1 个字符时,Discord Bot 不会回复

时间:2021-07-21 09:14:33

标签: mongodb mongoose discord discord.js

我目前正在使用机器人数据库,一切正常,但是当我将前缀设置为两个以上字符时,机器人不会回复。帮助?

这是我的“prefix.js”代码

    let newPrefix = args[0];

    if (await Prefix.findOne({
        guildID: message.guild.id
      })) {
      let guildPrefixes = await Prefix.findOne({
        guildID: message.guild.id
      });
      if (!guildPrefixes) {
        guildPrefixes = await new Prefix({
          _id: mongoose.Types.ObjectId(),
          guildID: message.guild.id,
          prefix: newPrefix,
        })
        await guildPrefixes.save();
        message.channel.send(`Successfully set the guild Prefix to ${newPrefix}!`);
      } else if (guildPrefixes) {
        await Prefix.findOneAndUpdate({
          guildID: message.guild.id,
          prefix: newPrefix,
        });
        return message.channel.send(`Successfully updated the guild Prefix to ${newPrefix}!`);
      }
    }
  }

这是我的消息事件

let guildPrefixes = await Prefix.findOne({
      guildID: message.guild.id
    });

    if (message.content.startsWith(guildPrefixes.prefix)) {
      const [cmdName, ...cmdArgs] = message.content
        .slice(client.prefix.length)
        .trim()
        .split(/\s+/);
      const command = client.commands.get(cmdName);
      if (command) {
        command.run(client, message, cmdArgs);
      }
    }

1 个答案:

答案 0 :(得分:0)

从您对我对该问题的评论的回复来看,在消息事件代码的第 7 行,您有一个静态前缀:

.slice(client.prefix.length)

我想它可能是这样的!或 ?,所以长度为 1。当您尝试将其设置为 !!,然后运行 ​​!!test 时,cmdName 将是 !test,因为您切掉了 1 个字符 (静态前缀),这不是命令。尝试将切片中的静态前缀更改为动态前缀:

.slice(guildPrefixes.prefix.length)

您的消息事件应如下所示:

let guildPrefixes = await Prefix.findOne({
  guildID: message.guild.id
});

if (message.content.startsWith(guildPrefixes.prefix)) {
  const [cmdName, ...cmdArgs] = message.content
    .slice(guildPrefixes.prefix.length)
    .trim()
    .split(/\s+/);
  const command = client.commands.get(cmdName);
  if (command) {
    command.run(client, message, cmdArgs);
  }
}

希望它有效