【问题标题】:Why does my Discord bot immediately crash after a command?为什么我的 Discord 机器人在发出命令后立即崩溃?
【发布时间】:2021-01-11 19:20:33
【问题描述】:

我制作了一个 Discord 机器人来处理“反应角色”。用户可以对消息做出反应以获得角色。

现在,嵌入和反应已添加,但之后立即崩溃:

embedMsg.message.react('????') ^

TypeError:无法读取未定义的属性“反应” 在客户端。 (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 [as 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);
        }
})

感谢任何帮助!

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    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 来修复它们。

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2023-02-10
      • 2021-02-20
      • 2020-05-30
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多