Нужна помощь в определении аргумента сообщения, не уверен, что не так?

#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’ неопределенного». Я так запутался, как это исправить