参数不再被识别 – Discord.js v14

huangapple go评论137阅读模式
英文:

Args not being recognized anymore - Discord.js v14

问题

我最近发现当运行一个命令时,我的参数不再被识别了。
如果我不放 args,我的控制台记录为 undefined,但当我放 args 时它不记录任何东西。

我的命令处理程序:

const { readdirSync } = require("fs");

module.exports = (client, Discord) => {
  const commandFolders = readdirSync(`./Commands/`);
  for (const folder of commandFolders) {
    const commands = readdirSync(`./Commands/${folder}`).filter((files) =>
      files.endsWith(".js")
    );
    for (const file of commands) {
      const command = require(`../Commands/${folder}/${file}`);
      client.commands.set(command.name, command);
    }
  }
};
const {
  Client,
  Message,
  MessageEmbed,
  Collection,
  PermissionFlagsBits,
} = require("discord.js");
const { PREFIX } = require("../../config.json");
const User = require("../../Models/User");

module.exports = {
  name: "messageCreate",
  /**
   * @param {Client} client
   * @param {Message} message
   */
  async execute(message, client, Discord) {
    if (!message.content.startsWith(PREFIX) || message.author.bot) {
      return;
    }
    const args = message.content.slice(PREFIX.length).trim().split(/ +/);
    const commandName = args.shift().toLowerCase();
    const command =
      client.commands.get(commandName) ||
      client.commands.find(
        (cmd) => cmd.aliases && cmd.aliases.includes(commandName)
      );
    if (!commandName) return;
    if (!command) return;

    if (command.bloxia && message.guild.id !== client.config.BLOXIAID) return;
    if (command.developer && !client.config.DEVID.includes(message.author.id))
      return message.reply({
        content: ":x: This command is only available to developers.",
        ephemeral: true,
      });
    let user = client.userSettings.get(message.author.id);
    // If there is no user, create it in the Database as "newUser"
    if (!user) {
      const findUser = await User.findOne({ Id: message.author.id });
      if (!findUser) {
        const newUser = await User.create({ Id: message.author.id });
        client.userSettings.set(message.author.id, newUser);
        user = newUser;
      } else return;
    }
    if (client.maintenanced && !command.maintenancebypass)
      return message.reply(":x: Maintenance mode is on !");
    if (command.premium && user && !user.isPremium) {
      return message.reply({
        content: `> \`${message.author.username}\` You are Not Premium User`,
      });
    }

    if (command.owneronly && message.author.id !== client.config.OWNERID)
      return message.reply({
        content: ":x: This command is only available to the owner.",
        ephemeral: true,
      });

    command.execute(message, args, commandName, client, Discord);
  },
};

如果你对某些部分有困难理解,我愿意解释,所以尽管问吧!还有一些特定要求的定义,但实际上可以忽略它们(如 command.... 等等)。

我尝试将命令代码中的 args[0](用于调用参数的方法)替换为 args[1],但没有变化。

英文:

I recently found out my arguments are not being recognized anymore when running a command.
If I don't put args my console logs undefined, but when I put args it doesn't log anything.

My command handler :

const { readdirSync } = require("fs");
module.exports = (client, Discord) => {
const commandFolders = readdirSync(`./Commands/`);
for (const folder of commandFolders) {
const commands = readdirSync(`./Commands/${folder}`).filter((files) =>
files.endsWith(".js")
);
for (const file of commands) {
const command = require(`../Commands/${folder}/${file}`);
client.commands.set(command.name, command);
}
}
};
const {
Client,
Message,
MessageEmbed,
Collection,
PermissionFlagsBits,
} = require("discord.js");
const { PREFIX } = require("../../config.json");
const User = require("../../Models/User");
module.exports = {
name: "messageCreate",
/**
* @param {Client} client
* @param {Message} message
*/
async execute(message, client, Discord) {
if (!message.content.startsWith(PREFIX) || message.author.bot) {
return;
}
const args = message.content.slice(PREFIX.length).trim().split(/ + /);
const commandName = args.shift().toLowerCase();
const command =
client.commands.get(commandName) ||
client.commands.find(
(cmd) => cmd.aliases && cmd.aliases.includes(commandName)
);
if (!commandName) return;
if (!command) return;
if (command.bloxia && message.guild.id !== client.config.BLOXIAID) return;
if (command.developer && !client.config.DEVID.includes(message.author.id))
return message.reply({
content: ":x: This command is only available to developers.",
ephemeral: true,
});
let user = client.userSettings.get(message.author.id);
// If there is no user, create it in the Database as "newUser"
if (!user) {
const findUser = await User.findOne({ Id: message.author.id });
if (!findUser) {
const newUser = await User.create({ Id: message.author.id });
client.userSettings.set(message.author.id, newUser);
user = newUser;
} else return;
}
if (client.maintenanced && !command.maintenancebypass)
return message.reply(":x: Maintenance mode is on !");
if (command.premium && user && !user.isPremium) {
return message.reply({
content: `> \`${message.author.username}\` You are Not Premium User`,
});
}
if (command.owneronly && message.author.id !== client.config.OWNERID)
return message.reply({
content: ":x: This command is only available to the owner.",
ephemeral: true,
});
command.execute(message, args, commandName, client, Discord);
},
};

If you have any problems understanding some part I'm willing to explain so ask away !
There are also a bunch of definitions for certain requirement but ignore them really (if command....) etc..

I tried replacing args[0] (the method used to call args) in a command's code with args[1] but it didn't change.

答案1

得分: 0

使用这个修正后的代码:

const args = message.content.slice(PREFIX.length).trim().split(/ +/);
英文:

You have a space in the regex.
Use this fixed code

const args = message.content.slice(PREFIX.length).trim().split(/ +/);

huangapple
  • 本文由 发表于 2023年3月7日 23:10:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/75663743.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定