我制作了Discord机器人来处理“反应角色”。用户可以对消息做出反应以获得角色。
现在,添加了嵌入和反应,但随后崩溃了:
embedMsg.message.react('?') ^
TypeError:无法读取未定义的属性“ react” 在客户处。 (C:\ Users \ rdvdn \ Desktop \ Bot \ Bot.js:19:34) 在Client.emit(events.js:311:20) 在MessageCreateAction.handle(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ discord.js \ src \ client \ actions \ MessageCreate.js:31:14) 在Object.module.exports [作为MESSAGE_CREATE](C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ discord.js \ src \ client \ websocket \ handlers \ MESSAGE_CREATE.js:4:32) 在WebSocketManager.handlePacket(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketManager.js:384:31) 在WebSocketShard.onPacket上(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard.js:444:22) 在WebSocketShard.onMessage(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard.js:301:10) 在WebSocket.onMessage(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ ws \ lib \ event-target.js:125:16) 在WebSocket.emit(events.js:311:20) 在Receiver.receiverOnMessage(C:\ Users \ rdvdn \ Desktop \ Bot \ node_modules \ ws \ lib \ websocket.js:797:20)
我认为该错误可能是由于Discord.js v12引起的。 我不确定为什么会崩溃,但是确实添加了嵌入和反应,我将非常感谢我能提供的任何帮助。
我现在的代码如下:
const { Client, MessageEmbed } = require('discord.js');
const client = new Client();
const TOKEN = require('./config.json');
client.login(TOKEN.token);
client.on('ready', () => {
console.log("Bot is online and ready!")
})
client.on('message', message =>{
if(message.author.bot)
{
if(message.embeds)
{
const embedMsg = message.embeds.find(msg => msg.title === 'Application Access');
if(embedMsg)
{
embedMsg.message.react('?')
.then(reaction => reaction.message.react('?'))
.catch(err => console.error);
}
}
return;
}
if(message.content.toLowerCase() === ']roles')
{
const embed = new MessageEmbed();
embed.setTitle("Application Access");
embed.setColor("GREEN");
embed.setDescription("React with the emoji and you will be able to apply for Logistics!\n" +
"\n" +
"\? - Applicant");
message.channel.send(embed);
}
})
client.on('messageReactionAdd', (reaction, user) => {
if(user.bot)
return;
var roleName = "Applicant";
var role = reaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());
var member = reaction.message.guild.members.find(member => member.id === user.id);
member.addRole(role.id).then(member => {
console.log("Added " + member.user.username + " to Applicant.");
}).catch(err => console.error);
});
client.on('messageReactionRemove', (reaction, user) => {
if(user.bot)
return;
var roleName = "Applicant";
var role = reaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());
var member = reaction.message.guild.members.find(member => member.id === user.id);
if(member.roles.has(role.id))
{
member.removeRole(role.id).then(member => {
console.log("Removed " + member.user.username + " from Applicant role.");
}).catch(err => console.error);
}
})
感谢您的帮助!
答案 0 :(得分:2)
message
不是MessageEmbed
属性,这就是您的机器人提示错误的原因。
// change:
const embedMsg = message.embeds.find(
(msg) => msg.title === 'Application Access'
);
if (embedMsg) {
embedMsg.message
.react('?')
.then((reaction) => reaction.message.react('?'))
.catch((err) => console.error);
}
// to:
if (message.embeds[0].title === 'Application Access') {
message
.react('?') // you can't react to the same message twice
.catch(console.error);
}
此外,您的代码中还有许多过时的v11.x
函数,例如addRole()
。我建议您检出this post进行修复。