#javascript #node.js #discord.js #undefined
Вопрос:
Я нахожусь в середине (полууспешно) обучения использованию новых команд косой черты в Discord.js, а node.js модуль для взаимодействия с API ботов Discord. Насколько я могу видеть, это строго проблема с базовым кодом Javascript, и никаких знаний о Discord.js требуется, чтобы помочь моей довольно досадной маленькой проблеме!
Код предназначен для извлечения файлов событий и их выполнения. Проблема в том, что всякий interactionCreate.js
раз, когда файл выполняется, interaction
аргумент кажется неопределенным.
При необходимости структура файла выглядит следующим образом:
project-folder/
├── index.js
├── events/
└── interactionCreate.js
Вот index.js
:
const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js'));
for (const file of eventFiles) {
const event = require(`./events/${file}`);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
}
…и вот interactionCreate.js
:
module.exports = {
name: 'interactionCreate',
async execute(client, interaction) {
if (!interaction.isCommand()) return;
const command = client.commands.get(interaction.commandName);
if (!command) return;
try {
await command.execute(interaction);
} catch (error) {
console.error(error);
await interaction.reply({ content: 'There was an error while executing this command.', ephemeral: true });
}
},
};
Я не совсем уверен, имеет ли это отношение к делу, но вот как выглядит код, когда он не находится в отдельных модулях. Конечно, поиск файлов событий здесь не требуется.
index.js (before modularisation)
:
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
const command = client.commands.get(interaction.commandName);
if (!command) return;
try {
await command.execute(interaction);
} catch (error) {
console.error(error);
await interaction.reply({ content: 'There was an error while executing this command.', ephemeral: true });
}
});
Опять же, я не уверен, нужно ли это, но вот одно из сообщений об ошибках, которые я получу.
C:pathtofilesproject-foldereventsinteractionCreate.js:4
if (!interaction.isCommand()) return;
^
TypeError: Cannot read properties of undefined (reading 'isCommand')
У меня не слишком большой опыт в том, чтобы задавать здесь вопросы, поэтому, если вам понадобится что-нибудь еще, дайте мне знать! Я с радостью либо отвечу на ваш ответ, либо обновлю вопрос. Большое спасибо!
Ответ №1:
Ваше заявление выглядит так:
async execute(client, interaction) {
//...
}
И interactionCreate
событие предоставляет только 1 параметр ( interaction
). Если бы все ваши события были расположены в client, rest, of, the, args
порядке параметров, это был бы правильный подход:
if (event.once) {
client.once(event.name, (...args) => event.execute(client, ...args));
} else {
client.on(event.name, (...args) => event.execute(client, ...args));
}
Комментарии:
1. Ах, он все это время смотрел мне в лицо! Огромное спасибо, чувак.
2. Хм, только что попробовал. Похоже, это не сработало. Я получаю следующую ошибку:
TypeError: Cannot read properties of undefined (reading 'isCommand')
3. Действительно? Это та же линия?
4. Моя вина, если вы используете верхнюю index.js есть другая проблема, отредактируйте ответ сейчас…
5. Я отредактировал его для первого index.js