#javascript #node.js
#javascript #node.js
Вопрос:
Я работал над простой справочной командой, которая должна предоставлять подробную справку по определенным командам при вводе аргумента для команды, если он не введен, он должен выдавать общий список команд.
Фрагмент функции:
function help(helpcomm) {
if (helpcomm == "say") {
message.channel.send("Say command makes me repeat the words you type. EG. if you type `p!say Hello World!` I'm going to delete your message and say `Hello world!`.");
} else
if (helpcomm == "ping") {
message.channel.send("Ping command checks the latency between me, the node I'm hosted on and the API latency.");
} else
if (helpcomm == "purge") {
message.channel.send("Purge command deletes a number of latest messages you choose from 2 to 99. EG. if you type `p!purge 20` I will delete the last 20 messages.");
} else
if (helpcomm == "joke") {
message.channel.send("Joke sends a random joke from my database.");
} else
if (helpcomm == "roll") {
message.channel.send("Roll makes me roll a dice from 1 to 20 sides. Basically a random number generator.");
} else
if (helpcomm == "creator") {
message.channel.send("Gives info about my creator. Currently outdated.");
} else
message.channel.send("For specific command help type: `p!help [command]` nHere are my commands: `p!say [words], p!ping, p!purge [number], p!joke, p!roll [number], p!creator`");
}
И команда, которая должна принимать аргумент:
if (command === "help") {
let text = args.join(' ');
await message.channel.send(help(text));
}
Я могу нодировать бота без ошибок, но когда я фактически ввожу префикс с помощью команды с аргументом или без него, он выдает ошибку «Сообщение не определено».
Помощь была бы очень ценной, если бы вы могли объяснить, что я делаю не так и как это исправить, это было бы потрясающе, без кормления с ложки. Если мне нужно предоставить какую-либо дополнительную информацию, я добавлю ее в комментарии.
Ответ №1:
Эта ошибка указывает на то, что message
переменная не существует в области действия справочной функции. Если вы хотите вызвать message.channel.send внутри вашей справочной функции, вам нужно будет передать в нее message:
function help (helpComm, message) {
if (helpcomm == "say") {
return message.channel.send("Say command makes me repeat the words you type. [etc]');
}
//...
return message.channel.send("For specific command help [etc]")
}
// called like:
client.on('message', async function(message) {
//...
if (command === "help") {
let text = args.join(' ');
await help(text, message);
}
});
Тем не менее, мне неясно, что вы собираетесь делать, поскольку эта строка уже вызывает message.channel.send и, по-видимому, ожидает, что помощь вернет строку:
await message.channel.send(help(text));
Если вам просто нужна помощь для создания строки, тогда нет необходимости передавать ей message, поскольку только основной код должен взаимодействовать с объектом message:
function help (helpComm) {
if (helpcomm == "say") {
return "Say command makes me repeat the words you type. [etc]';
}
// ...
return "For specific command help [etc]";
}
// called like:
client.on('message', async function(message) {
//...
if (command === "help") {
let text = args.join(' ');
await message.channel.send(help(text));
}
});
Комментарии:
1. У меня уже есть обработчик сообщений, что-то вроде этого:
client.on("message", async message => { const args = message.content.slice(config.prefix.length).trim().split(/ /g); const command = args.shift(); if (!message.content.startsWith(config.prefix)) return;
я просто не знаю, почему в сообщении указано «не определено».. когда я помещаю справку (helpcomm, message), он выдает: «Ошибка типа: не удается прочитать свойство’channel’ неопределенного». Я так запутался, как это исправить