Discord.js команда pat

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Я попытался создать и выполнить команду pat для моего бота Discord, но это не сработало.

Я получаю следующую ошибку:

 (node:14648) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'users' of undefined
    at Object.execute (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botcommandspat.js:13:26)
    at Client.<anonymous> (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botindex.js:90:13)
    at Client.emit (events.js:315:20)
    at MessageCreateAction.handle (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_modulesdiscord.jssrcclientactionsMessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_modulesdiscord.jssrcclientwebsockethandlersMESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:384:31)
    at WebSocketShard.onPacket (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
    at WebSocket.onMessage (C:UsersnbabuOneDriveDesktopDiscord botsRaphtalia botRaphtalia botnode_moduleswslibevent-target.js:125:16)
    at WebSocket.emit (events.js:315:20)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:14648) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:14648) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
 

Код:

 const Discord = require('discord.js');
const { patch } = require('node-superfetch');
const superagent = require('superagent');
const customisation = require('../customisation.json');

module.exports = {
  name: "pat",
  description: "Pat someone UwU",
  aliases:["pat"],
  category: "fun",

  execute: async (client, message, args, tools) => {
    if (message.mentions.users.first().id)
    return message.reply("you almost mention someone to pat them");
    
    if (message.mentions.users.first().id) 
    return message.channel.send('UwU');

    const { body } = await superagent
    .get("https://nekos.life/api/pat");
    
    const embed = new Discord.MessageEmbed()
    .catch(body)
    .setColor("#3bb9ff")
    .setTitle(`i see that is, ${message.author.username} patted ${message.mentions.users.first().username}`) 
    .setImage(body.url)
    .setFooter(${customisation.ownername}`);
    message.channel.send({embed})
}}
 

Index.js способность отвечать на команды

 const commandFiles = readdirSync(join(__dirname, "commands")).filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
  const command = require(join(__dirname, "commands", `${file}`));
  client.commands.set(command.name, command);
}

client.on("message", async (message) => {
  if (message.author.bot) return;
  if (!message.guild) return;

  const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(PREFIX)})\s*`);
  if (!prefixRegex.test(message.content)) return;

  const [, matchedPrefix] = message.content.match(prefixRegex);

  const args = message.content.slice(matchedPrefix.length).trim().split(/  /);
  const commandName = args.shift().toLowerCase();

  const command =
    client.commands.get(commandName) ||
    client.commands.find((cmd) => cmd.aliases amp;amp; cmd.aliases.includes(commandName));

  if (!command) return;

  if (!cooldowns.has(command.name)) {
    cooldowns.set(command.name, new Collection());
  }

  const now = Date.now();
  const timestamps = cooldowns.get(command.name);
  const cooldownAmount = (command.cooldown || 1) * 1000;

  if (timestamps.has(message.author.id)) {
    const expirationTime = timestamps.get(message.author.id)   cooldownAmount;

    if (now < expirationTime) {
      const timeLeft = (expirationTime - now) / 1000;
      return message.reply(
        `please wait ${timeLeft.toFixed(1)} more second(s) before reusing the `${command.name}` command.`
      );
    }
  }

  timestamps.set(message.author.id, now);
  setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);

  try {
    command.execute(message, args);
  } catch (error) {
    console.error(error);
    message.reply("There was an error executing that command.").catch(console.error);
  }
});
 

Я вижу ошибку/ Когда я смогу обновить код, пожалуйста, сообщите me.
My discord is IncarnateWill#6969.
Если вам нужно увидеть что-то еще, добавьте меня, и я скриню общий код бота.

Комментарии:

1. Можете ли вы показать нам, как вы вызвали execute() метод?

2. это сработало, я решил удалить .catch (body) из pat.js

3. Я только что откатился к предыдущему редактированию. Вы должны улучшать свой пост только путем редактирования, а не изменения вопроса, удаляя части, которые были решены с помощью пользователя, и добавляя больше ошибок, не связанных с исходным вопросом.

Ответ №1:

Ну, message всегда имеет mentions свойство, даже если нет упоминаний (и message.mentions.users.first() возвращается undefined , когда в сообщении никто не упоминается). Поскольку ваш приведенный выше код выглядит правильно, единственный возможный способ message.mentions — это undefined если вы не передали message объект своему execute методу или передали аргументы в неправильном порядке.

Обновить:

В вашем index.js вы вызываете execute следующим образом: command.execute(message, args) . Вам необходимо обновить ее правильными аргументами:

 // ...
try {
  command.execute(client, message, args)
} catch (error) {

// ...
 

В pat.js :

 // ...
execute: async (client, message, args) => {
  // ...
}}
 

Если у вас есть другие команды, которые в настоящее время работают с этим порядком, вы можете добавить client в качестве третьего аргумента, поэтому вам не нужно их обновлять, только эти две:

 // in index.js

try {
  command.execute(message, args, client)
} catch (error) {

// in pat.js

execute: async (message, args, client) => {
  // ...
}}
 

Комментарии:

1. Можете ли вы обновить свой вопрос и показать нам, как вы вызвали execute функцию?

2. Из index.js Я не совсем понимаю, что я новичок в коде. Это все, что я вставил Pat.js

3. Ну, тогда вы должны показать нам свой index.js файл, чтобы мы могли проверить, правильно ли это.

4. Если у вас есть разногласия, добавьте меня в IncarnateWill #6969, я добавлю index.js часть, способная отвечать на команды за 1 минуту

5. И это делает противоположную вещь. Например, когда я делаю / pat, он должен ответить «вы почти упоминаете кого-то, чтобы похлопать их». И когда я делаю /pat @user, он должен отправить UwU и встроенное