#javascript #discord
#javascript #Discord
Вопрос:
Это мой reactionrole.js файл, я получаю сообщение об ошибке и понятия не имею, как это исправить, я новичок в кодировании JavaScript в целом, у меня есть обработчик команд для бота вместо того, чтобы помещать все мои команды в мой main.js файл (ранее все это было в main.js файл). Я переместил все команды в их собственные файлы, чтобы попытаться main.js меньший, все остальные функции моего бота работают после этого, но не мои роли реагирования.
module.exports = {
name: 'reactionrole',
description: 'Sets up a reaction role message.',
async execute(message, args, Discord, client) {
const channel = '802539365985157141';
const yellowTeamRole = message.guild.roles.cache.find(role => role.name === "test");
const blueTeamRole = message.guild.roles.cache.find(role => role.name === "test2");
const yellowTeamEmoji = '🍋';
const blueTeamEmoji = '🍇';
let embed = new Discord.MessageEmbed()
.setColor('#e42643')
.setTitle('Choose a team to play on!')
.setDescription('Choosing a team will allow you to interact with your teammates!nn'
`${yellowTeamEmoji} for yellow teamn`
`${blueTeamEmoji} for blue team`);
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(yellowTeamEmoji);
messageEmbed.react(blueTeamEmoji);
client.on('messageReactionAdd', async (reaction, user) => {
if (reaction.message.partial) await reaction.message.fetch();
if (reaction.partial) await reaction.fetch();
if (user.bot) return;
if (!reaction.message.guild) return;
if (reaction.message.channel.id == channel) {
if (reaction.emoji.name === yellowTeamEmoji) {
await reaction.message.guild.members.cache.get(user.id).roles.add(yellowTeamRole);
}
if (reaction.emoji.name === blueTeamEmoji) {
await reaction.message.guild.members.cache.get(user.id).roles.add(blueTeamRole);
}
} else {
return;
}
});
client.on('messageReactionRemove', async (reaction, user) => {
if (reaction.message.partial) await reaction.message.fetch();
if (reaction.partial) await reaction.fetch();
if (user.bot) return;
if (!reaction.message.guild) return;
if (reaction.message.channel.id == channel) {
if (reaction.emoji.name === yellowTeamEmoji) {
await reaction.message.guild.members.cache.get(user.id).roles.remove(yellowTeamRole);
}
if (reaction.emoji.name === blueTeamEmoji) {
await reaction.message.guild.members.cache.get(user.id).roles.remove(blueTeamRole);
}
} else {
return;
}
});
}
}
Пытаюсь создать роли реагирования для моего бота discord, но он выдает эту ошибку, когда я использую команду.
(node:11292) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'roles' of undefined
at Object.execute (F:GitHubvBotcommandsreactionrole.js:7:46)
at module.exports (F:GitHubvBoteventsguildmessage.js:13:25)
at Client.emit (events.js:315:20)
at MessageCreateAction.handle (F:GitHubvBotnode_modulesdiscord.jssrcclientactionsMessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (F:GitHubvBotnode_modulesdiscord.jssrcclientwebsockethandlersMESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (F:GitHubvBotnode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:384:31)
at WebSocketShard.onPacket (F:GitHubvBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
at WebSocketShard.onMessage (F:GitHubvBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
at WebSocket.onMessage (F:GitHubvBotnode_moduleswslibevent-target.js:132:16)
at WebSocket.emit (events.js:315:20)
Комментарии:
1. Я бы предположил
message.guild
, что не определено. Вам нужно будет отладить больше, чтобы выяснить причину.
Ответ №1:
Я выполнял client в конце вместо того, чтобы выполнять его первым..
Проблема:
module.exports = {
name: 'reactionrole',
description: 'Sets up a reaction role message.',
async execute(Discord, message, args, client)
Решение:
module.exports = {
name: 'reactionrole',
description: 'Sets up a reaction role message.',
async execute(client, message, args, Discord)