Discord.js ReferenceError:未定义receiveMessage

时间:2020-07-07 09:32:56

标签: discord discord.js

我正在为服务器制作机器人,并且之前已经做过,但是现在我收到一条错误消息,提示未定义receiveMessage。

这是代码,它将检查消息是否以“>”开头并检查它是什么命令(我知道switch语句更有效。):

client.on('message', (receivedMessage) => {
    if (receivedMessage.content.startsWith(">")) {
        processCommand(receivedMessage)
    }
})

function processCommand(receivedMessage) {
let fullCommand = receivedMessage.content.substr(1)
let splitCommand = fullCommand.split(" ")
let primaryCommand = splitCommand[0]
let arguments = splitCommand.slice(1)

if (primaryCommand == "help") {
    helpCommand(arguments, primaryCommand)
} else if (primaryCommand == "giveRole") {
    gvRoleCommand(arguments, primaryCommand)
} else if (primaryCommand == "duck") {
    duckCommand(arguments, primaryCommand)
} else if (primaryCommand == "kick") {
    kickCommand(arguments, primaryCommand)
} else if (primaryCommand == "ban") {
    banCommand(arguments, primaryCommand)
} else if (primaryCommand == "listCommandForMyRole") {
    listCommandForRole(arguments, primaryCommand)
} else if (primaryCommand == "stoppedLookingForTeam") {
    stopLookingForTeamCommand(arguments, primaryCommand)
} else if (primaryCommand == "poke") {
    pokeCommand(arguments, primaryCommand)
} else if (primaryCommand == "stop") {
    stopCommand(arguments, primaryCommand)
} else if (primaryCommand == "ping") {
    pongCommand(arguments, primaryCommand)
} else {
    receivedMessage.channel.send("Error: Invalid command!")
}

我为以前的机器人使用了相同的代码,并且运行良好,我尝试使用相同的节点模块,因为在制造机器人时无法安装它们。当我想返回消息时(或机器人将消息发送时),将发生错误。

return receivedMessage.channel.send("Pong!");

谢谢!

编辑:这是完整的代码:

const Discord = require("discord.js");
const client = new Discord.Client();

client.on('ready', () => {
    console.log("Connected as " + client.user.tag)
    
    client.user.setActivity("jams", {type: "PLAYING"})
    
    client.guilds.forEach((guild) => {
        console.log(guild.name)
        guild.channels.forEach((channel) => {
        console.log(' - ${channel.name} ${channel.type} ${channel.id}')
        })
    })
    
    args = ["Is", "this", "the", "real", "life?"]
    
})

/*client.on('message', (receivedMessage) => {
    if (receivedMessage.author == client.user) {
        return
    }
    
    if (receivedMessage.content.includes(client.user.toString())) {
        receivedMessage.message.send("Why you ping me " + receivedMessage.author.toString())
    }
    
    if (receivedMessage.content.startsWith(">")) {
        processCommand(receivedMessage)
    }
})*/

client.on('message', receivedMessage => {
    if (receivedMessage.content.startsWith(">")) {
        processCommand(receivedMessage)
    }
})

/*client.on('guildMemberAdd', member => {
    const channel = member.guild.channels.find(channel => channel.name === "welcome");
    if (!channel) return;
    
    channel.send("Welcome $(member), we are hoping that you will fit in. Please read our rules if you want to stay in this server.");
    if (!member.roles.find(r => r.name === "Admin")) {
        member.addRole("Newcomer");
    }
})*/

function processCommand(receivedMessage) {
    let fullCommand = receivedMessage.content.substr(1)
    let splitCommand = fullCommand.split(" ")
    let primaryCommand = splitCommand[0]
    let arguments = splitCommand.slice(1)
    
    if (primaryCommand == "help") {
        helpCommand(arguments, primaryCommand)
    } else if (primaryCommand == "giveRole") {
        gvRoleCommand(arguments, primaryCommand)
    } else if (primaryCommand == "duck") {
        duckCommand(arguments, primaryCommand)
    } else if (primaryCommand == "kick") {
        kickCommand(arguments, primaryCommand)
    } else if (primaryCommand == "ban") {
        banCommand(arguments, primaryCommand)
    } else if (primaryCommand == "listCommandForMyRole") {
        listCommandForRole(arguments, primaryCommand)
    } else if (primaryCommand == "stoppedLookingForTeam") {
        stopLookingForTeamCommand(arguments, primaryCommand)
    } else if (primaryCommand == "poke") {
        pokeCommand(arguments, primaryCommand)
    } else if (primaryCommand == "stop") {
        stopCommand(arguments, primaryCommand)
    } else if (primaryCommand == "ping") {
        pongCommand(arguments, primaryCommand)
    } else {
        receivedMessage.channel.send("Error: Invalid command!")
    }
    
    /*switch(primaryCommand) {
        case "help":
            helpCommand(arguments, primaryCommand);
            break;
        case "giveRole":
            gvRoleCommand(arguments, primaryCommand);
            break;
        case "duck":
            duckCommand(arguments, primaryCommand);
            break;
        case "kick":
            kickCommand(arguments, primaryCommand);
            break;
        case "ban":
            banCommand(arguments, primaryCommand);
            break;
        case "listCommandsForMyRole":
            listCommandForRole(arguments, primaryCommand);
            break;
        case "stoppedLookingForTeam":
            stopLookingForTeamCommand(arguments, primaryCommand);
            break;
        case "poke":
            pokeCommand(arguments, primaryCommand);
            break;
        case "stop":
            stopCommand(arguments, primaryCommand);
            break;
        case "pong":
            pongCommand(arguments, primaryCommand);
            break;
    }*/
}

function stopCommand(arguments, primaryCommand) {
    if (!receivedMessage.member.guild.me.hasPerimission("ADMINISTRATOR")) {
        return receivedMessage.channel.send("Error: Only the administrator of this server and the creator of the bot has that permission!");
    }
    
    if (!receivedMessage.member.guild.me.hasPerimission("ADMINISTRATOR")) {
        client.destroy();
    }
}

function gvRoleCommand(arguments, primaryCommand) {
    if (!receivedMessage.toString()) {
        return receivedMessage.channel.send("Please put members after the give role command \n ps. put a space when you are mentioning the user");
    }
    
    if (!receivedMessage.member.roles.find(r => r.name === "Admin")) {
        return receivedMessage.channel.send("Error: You don't have permissions for that command. Type >listCommandsForMyRole to see which commands are available for your role.");
    }
}

/*function listCommandForRole(arguments, primaryCommand) {
    if (receivedMessage.member.roles.find(r => r.name === "Admin")) {
        return receivedMessage.channel.send("Available Commands: help \n giveRole \n duck \n kick \n ban \ listCommandsForMyRole \n poke \n stop");
    } else if (receivedMessage.member.roles.find(r => r.name === "Looking for Team")) {
        return receivedMessage.channel.send("Available Commands: help \n duck \n listCommandForMyRole \n poke \n stoppedLookingForTeam");
    } //else if (receivedMessage.member.roles.find(r => r.name === ""))
}
*/

function pongCommand(arguments, primaryCommand) {
    return receivedMessage.channel.send("Pong!");
}

client.login(NOT REVEALING MY TOKEN!)

1 个答案:

答案 0 :(得分:0)

您可以尝试一下此代码吗?如果它不起作用,请给我您的错误代码(截图/完整粘贴粘贴)

client.on("message", async message => {
    if (message.author.bot) return;

    if (message.content && message.content.startsWith('>')) {
        processCommand(message);
    }
})

function processCommand(message) {
    if (!message) return;
    let fullCommand = receivedMessage.content.substr(1)
    let splitCommand = fullCommand.split(" ")
    let primaryCommand = splitCommand[0]
    let arguments = splitCommand.slice(1)

    switch (primaryCommand) {
        case 'help':
            helpCommand(arguments, message)
            break;
        case 'giveRole':
            gvRoleCommand(arguments, message)
            break;
        case 'duck':
            duckCommand(arguments, message)
            break;
        case 'kick':
            kickCommand(arguments, message)
            break;
        case 'ban':
            banCommand(arguments, message)
            break;
        case 'listCommandForMyRole':
            listCommandForRole(arguments, message)
            break;
        case 'stoppedLookingForTeam':
            stopLookingForTeamCommand(arguments, message)
            break;
        case 'poke':
            pokeCommand(arguments, message)
            break;
        case 'stop':
            stopCommand(arguments, message)
            break;
        case 'ping':
            pongCommand(arguments, message)
            break;
        default:
            message.channel.send("Error: Invalid command!")
            break;
    }
}

function pongCommand(arguments, message) {
    return message.channel.send('Pong!')
}

我认为出错的是,当您执行函数时,没有传递“ message”变量。试试看,看看是否有效

GL