Сообщение не определено с помощью события «messageReactionAdd» для выполнения действия

#javascript #discord.js #member

#javascript #discord.js #Участник

Вопрос:

Я хочу, чтобы мой бот выполнял действие с «message.member», когда этот самый участник реагирует определенным смайликом на сообщение от моего бота. Однако у меня ошибка «сообщение не определено», и я ничего не могу с этим поделать.

Я думаю, что мне нужно использовать «messageReactionAdd», потому что мне нужно знать все реакции на моем сервере, проверить их, если они применены к сообщению моего бота, а затем вернуть действие пользователю, который их выполнил. Это должно касаться всех сообщений от моего бота, даже старых. Все методы, которые я хочу использовать, — это методы члена гильдии:https://discord.js.org/#/docs/main/stable/class/GuildMember.

 client.on('messageReactionAdd', (reaction, user) => {
  console.log(`mess id : ${reaction.message.id} emoji user = ${reaction.message.member.id}`);
    if ((reaction.message.author.id == client.user.id) amp;amp; (user.id != client.user.id)) {
      if (reaction.emoji.name == '🐍') {
        message.member.send('You picked 🐍  '); 
      }
    }
  });
  
 UnhandledPromiseRejectionWarning: ReferenceError: message is not defined
    at Client.client.on (/home/me/botdiscord/index.js:84:7)
    at Client.emit (events.js:193:13)
    at MessageReactionAdd.handle (/home/me/botdiscord/node_modules/discord.js/src/client/actions/MessageReactionAdd.js:46:17)
    at Object.module.exports [as MESSAGE_REACTION_ADD] (/home/me/botdiscord/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js:4:37)
    at WebSocketManager.handlePacket (/home/me/botdiscord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/home/me/botdiscord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/home/me/botdiscord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/home/me/botdiscord/node_modules/ws/lib/event-target.js:125:16)
    at WebSocket.emit (events.js:193:13)
    at Receiver.receiverOnMessage (/home/me/botdiscord/node_modules/ws/lib/websocket.js:797:20)
(node:7306) 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(). (rejection id: 1)
(node:7306) [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.
  

Ответ №1:

В этой строке:

 message.member.send('You picked 🐍  '); 
  

message не определено. Вместо этого используйте reaction.message

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

1. «message.member.send(‘Вы выбрали 🐍’); » — это бот

2. Что вы имеете в виду?

Ответ №2:

Я добавил «reaction.message […]», но не вижу сообщения. Поэтому я ввел метод «.nickname», чтобы посмотреть, работает ли он. Но я меняю ник на себя, а не на пользователя, который отреагировал на emohi. Любая помощь с этим, пожалуйста?

 client.on('messageReactionAdd', (reaction, user) => {
  console.log(`mess id : ${reaction.message.id} emoji user = ${reaction.message.member.id}`);
    if ((reaction.message.author.id == client.user.id) amp;amp; (user.id != client.user.id)) {
      if (reaction.emoji.name == '🐍') {
        reaction.message.member.setNickname('🐍')
        .then(console.log)
        .catch(console.error);
      }
    }
  });
  

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

1. reaction.message.member вернет GuildMember объект того, кто отправил сообщение, на которое реагируют. Чтобы получить GuildMember объект того, кто отреагировал, используйте: reaction.message.guild.member(user)

Ответ №3:

Message не определено в вашем коде. И, скорее всего, автором сообщения является бот, поэтому вы бы попытались отправить сообщение боту. Как вы можете видеть, вы получаете User объект в качестве второго параметра. Вы можете использовать send() метод User для отправки сообщения пользователю.

 client.on('messageReactionAdd', (reaction, user) => {
  console.log(`mess id : ${reaction.message.id} emoji user = ${reaction.message.member.id}`);
    if ((reaction.message.author.id == client.user.id) amp;amp; (user.id != client.user.id)) {
      if (reaction.emoji.name == '🐍') {
        user.send('You picked 🐍'); 
      }
    }
  });
  

Примечание: В зависимости от настроек конфиденциальности пользователя, ваш код может завершиться ошибкой. Используйте .catch блок для обнаружения любых ошибок и предотвращения сбоя бота.

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

1. У меня ошибка: ` (узел: 15594) Необработанное предупреждение об отказе: ошибка DiscordAPIError: не удается отправить сообщения этому пользователю при обработке запроса.execute (/home/me/botdiscord/node_modules/discord.js/src/rest/RequestHandler.js:170:25) при обработке и отклонениях (internal/process/task_queues.js:86:5) `

2. @FomaFomitch Я обновил свой код. Я неправильно понял ваш вопрос. Также, пожалуйста, прочитайте примечание, которое я поместил.