#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 Я обновил свой код. Я неправильно понял ваш вопрос. Также, пожалуйста, прочитайте примечание, которое я поместил.